用linux下的c语言读取txt文件中的列数据

想用c编写一个小程序,从.txt文件中按列读取数据,
.txt数据格式是这样子(数据非常大,只列出了前几行):
lat lon str dip rak str dip rak
19.09 120.24 77 47 -62 219 50 -117
-44.65 -15.46 316 44 -105 157 48 -76
-44.46 -82.03 335 46 -113 186 49 -68
-35.30 -179.01 190 36 -84 3 54 -94
-13.86 167.25 181 47 114 328 48 67
27.15 54.45 329 54 141 85 59 43
35.26 140.51 252 28 111 49 64 79
19.16 120.22 36 38 -76 199 53 -101
......

求大神指点迷津

1.用fgets函数可以读取文件中某行的数据,某列数据就必须一个一个读入每行的第几个字符,再存入到一个字符串当中。

2.例程:

#include<stdio.h>
#include<string.h>
void main()
{
  char a[100],b[100],c[100];
  int i=3,j=4,k=0;    //第三行,第四列
  FILE *fp = fopen("data.txt","r");
  while(fgets(c,100,fp)){    //读入每行数据
    i--;
    if(i==0) strcpy(a,c);    //读到第三行数据
    b[k++]=c[j-1];        //把每行的那列字符拷到b中
  }
  b[k]=0;
  printf("第%d行数据:%s\n",i,a);
  printf("第%d列数据:%s\n",j,b);
  fclose(fp);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-12
你想怎么读?得到哪些数据?追问

按照一列一列的 读取数据,
第一列是纬度,第二列是经度,第三列是...
每一列存储起来

追答

还是没有说清楚,每一列存储起来 存到哪里?

追问

可以将每列数据存到一个数组当中。
其实是为了参与计算的,不过那是后面的事情了,这里只想按照列提取出前两列数据,前两列数据是经纬度,想把经纬度网格化。。。
lat 和lon分别是纬度、经度两列数据,首先读取出lat列和lon列的数据,找出经纬度最大和最小的两个点,。。。。。。

追答#include <stdio.h>

int main()
{
    double lat[1000];
    double lon[1000];

    FILE *fp;
    char str[128];
    int i=0,j;
    fp=fopen( "data.txt", "r");
    if ( fp == NULL )
    {
        printf("open file error\n");
        return -1;
    }
    fgets(str,sizeof(str),fp);//skip first line
    while ( fgets(str,sizeof(str),fp) )
    {
        sscanf( str, "%lf %lf", &lat[i], &lon[i] );
        i++;
    }
    fclose(fp);
    for( j=0;j<i;j++ )
    {
        printf( "%lf %lf\n", lat[j], lon[j] );
    }
    return 0;
}

追问

非常感谢!
请问,如果行数未知呢?
另外,想找出经纬度最小和最大的点,画出一个矩形可以包围住所有点,然后按照0.5*0.5的大小划分网格,将矩形网格化,标记每一个小网格的位置(以左下方为(0,0)开始),然后判断每一个经纬度点属于哪
一个网格,这样怎样编码呢?
感谢!

追答

如果行数未知呢? 可以采用动态定义数组,但比较麻烦。建议根据文件行数变化情况,定义一个较为合理的数组,这样比较简单。

找出经纬度最小和最大的点:这个可以在读取数据时,就进行数据检查,确定出最大最小点。

最小点是left-bottom,最大点是right-top
画图我解决不了

本回答被提问者采纳
相似回答