我想把数据读入多数组中,再根据需要选出特定的行,要如何实现?
程序代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> //跳过6行 void skipline(FILE *fp, int n) //跳过n行 { for (; n>0; n--) { while (fgetc(fp) != '\n'); } } int main() { //===================================================== //基本数据 int startyear = 2005;//开始年份!!!!! int endyear = 2006;//结束年份!!!!!!! int stationID = 50136;//气象站ID号!!!! int N = 1; //跳过行数 const int number = 2;//固定值,文件特殊性质,分上下两个半年 static int ID[125000];static int Y[125000];static int M[125000];static int D[125000];static int PRE[125000]; static int a[125000]; static int b[125000]; static int c[125000]; static int d[125000]; static int e[125000]; static int f[125000]; static int g[125000]; static int h[125000]; static int I[125000]; static int J[125000]; static int k[125000]; static int l[125000]; static int m[125000]; static int n[125000]; static int o[125000]; //====================================================== //文件操作 char infilename[1000]; char outfilename[1000]; FILE *fin, *fout; //写入数据 sprintf(outfilename, "H:\\Heihe_data_all\\中国地面气候资料日值数据集(700 stations 195101-201304)\\桂江气象数据\\sunshine\\" "%d.txt", stationID); //读出位置 fout = fopen(outfilename, "w+"); //对文件开始循环 for (; startyear <= endyear; startyear++){ for (int j = 1; j <= number; j++){ sprintf(infilename, "H:\\Heihe_data_all\\中国地面气候资料日值数据集(700 stations 195101-201304)\\桂江气象数据\\" "SURF_CLI_CHN_MUL_DAY_1376058268668_%d_%d.txt", startyear,j);//读入位置!!修改 fin = fopen(infilename, "r"); //跳过1行 skipline(fin, N); for (int i = 0; i<125000; i++) { fscanf(fin, "%d,%d,%d,%d,%d," "%d,%d,%d,%d,%d," "%d,%d,%d,%d,%d," "%d,%d,%d,%d,%d", &ID[i],&Y[i],&M[i],&D[i],&PRE[i], &a[i], &b[i], &c[i], &d[i], &e[i], &f[i], &g[i], &h[i], &I[i],&J[i], &k[i], &l[i], &m[i], &n[i],&o[i]); if (stationID==ID[i]) { fprintf(fout, "%10d %10d %10d %10d %10d\n", ID[i], Y[i], M[i], D[i], PRE[i]); } } fclose(fin); } } fclose(fout); return 0; }
数据格式是一个20列,122930行的txt数据,类似于如下:
站点 年 月 日 降雨 风速 温度。。。 25121 2005 1 1 100 20 20
25130 2005 1 1 20 53 19
[此贴子已经被作者于2018-11-28 08:54编辑过]