C或C++编程从TXT文件中读取特定行并存入数组

有一个约10000行的txt文件,部分行数据示意如下(前三列为日期,按递增顺序排列):
1962 1 20 37684 -0.054895 0.229305 0.0273077 0.0006810 0.000000 0.000000
1962 1 21 37685 -0.055995 0.229905 0.0277506 0.0006780 0.000000 0.000000
1962 1 22 37686 -0.057094 0.230506 0.0281834 0.0007210 0.000000 0.000000
1962 1 23 37687 -0.057994 0.231006 0.0285533 0.0007900 0.000000 0.000000

要求找出给定日期(例如1962 1 21)所在月份的所有数据并将这些数据按列存为10个数组,或者找出给定日期的前后10天的所有数据并将这些数据按列存为10个数组。C或者C++编程都可以,本人C++初学者,最好程序简单易懂点。多谢各位大侠!~

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个回答  2013-05-17
1)如果每行长度一致;只读开始的日期 (只需要年份和月份);采用精确的二分查找。

2)如果长度大致一致,并且按照日期顺序存放,可以大致计算一个位置,使用非精确的二分查找。
(读字符直到回车换行)
3)否则 必须 每次读取一行数据。逐一查找。

4)不论长度一致还是大概一致,都可以,只读少量数据,就获得每行的长度。
a)每行长度一致,只读一行就可以精确知道,每行的精确长度。
b)每行长度大致一致,读3到5 行求平均长度,就可以大概知道,每行的长度,不过需要像盲人摸象,那样获取所读行的精确位置。
文件位置(文件指针)相关的函数
C:
文件代号: seek, telll,
FILE *; fseek,ftell;
C++:
ifstream::seekg;ifstream::tellg;
ofstream::seekp;ofstream::tellg;
Windows API:
SetFilePointer;GetFilePointer;

MFC CFile::Seek;CFile::SeekToBengin;CFile::SeekToEnd;
第2个回答  推荐于2017-12-16
这是给定日期,输出同年同月数据(存放在2维数组a[10][31];里)
程序原理:用fgets()读入一行,用 sscanf(buf,"%d %d",&y,&m); 读出年月,若年月满足需要,则
用 sscanf(buf 。。)读出10列数据,存入数组。
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *fin;
char buf[200];
int year,month,day,y,m,d;
float a[10][31];
int i,j,n=0;
fin=fopen("abc.txt","r");
printf("input 1962 1 21\n");
scanf("%d %d %d",&year,&month,&day);
while(1){
if (fgets(buf,200,fin)==NULL) break;
sscanf(buf,"%d %d",&y,&m);
if (y==year && m==month){
sscanf(buf,"%f%f%f%f%f%f%f%f%f%f",&a[0][n],&a[1][n],
&a[2][n],&a[3][n],&a[4][n],&a[5][n],&a[6][n],&a[7][n],
&a[8][n],&a[9][n]);
n++;
};
};
fclose(fin);
for (j=0;j<n;j++){
for (i=0;i<10;i++) printf("%g ",a[i][j]);
printf("\n");
};
return 0;
}

如果要找前后10天数据,你可以先计算前后目标日期,
用 sscanf(buf,"%d %d &d",&y,&m,&d); 读得年月日,符合开始日期,没超过截止日期的行存起来就可以了。你可以模仿上面程序自己写。本回答被提问者采纳
第3个回答  2013-05-17
int a,b,c;
ifstream fin(“xx.txt”);
while(fin>>a&&fin>>b&&fin>>c)
if(a==1962&&b==1&&c==21)
break;
double d[10];
for(xxxxx)
fin>>d[i];追问

好的我试试看

追答

fin相当于是一个输入指令吧。。。将读取到的内容输入给d~

C\/C++如何读取TXT文件的行数和把TXT文件的内容存到数组中
C语言读取TXT文件的行数并把把TXT文件的内容存到数组中,需要根据每行的内容(字符,数字,字符串)选取fgets、fscanf或者fgets。这里假设每行是一个字符串,每行不超过127个字符(用数组存字符串,最后一位存'\\0'),选取fgets进行读取。示例代码如下:include <stdio.h>#include <stdlib.h>int main...

请问C++ 如何从txt文件中读取数据,然后保存在类的数组中?
File_read>>data[i].num>>data[i].name>>data[i].score;i++;} 数组data是的类型是信息类。自己试试。

C++ 从TXT文件中读取数据存到数组中??你是怎么解决的谢谢
文件中读取数据存到数组中的命令:include <fstream> void main()nclude <stdio.h> include <math.h> define MaxLength { int a[10];ifstream fin("D:\/我的输入文件.txt");for(int i=0;i<10;i++)fin>>a[i];for(int i=0;i<10;i++)cout<<a[i]<<endl;ofstream fout("D:\/我的...

VC++,读取txt文件数据,并存入数组中。
include <iostream> using namespace std;define FRISTCLM 30000 define SECONDCLM 8 \/\/参数 Filename 为要读的文件名,如:readdd.txt 。int ReadFileToBUF(char * Filename,int bufdd[][SECONDCLM],int len){ FILE *fp=fopen(Filename,"r");if(fp == NULL)return 0;char buf[256],num...

C++ 从文件读取一行,存入一个字符串数组中
1)从文件读取一行:ifstream infile;infile.open("文件名.txt");if (!infile) { cerr << "error: unable to open input file !!!" << endl;system("pause");} string str;while (getline(infile, str)) { \/\/ 一行一行读 ...} 2)将每个字符串按逗号分离存在一个字符串数组中 设临时...

C++如何逐行读取txt文件,并将读取出来的数据进行运算导入到另一个文件...
1、首先我们在电脑上新建一个文件夹,名称叫txt2array。然后,打开我们的devc++,新建一个控制台c++项目,名称也叫txt2array。2、将项目文件及源代码文件以及我们演示用的数据文件都存放在txt2array文件夹中。3、向数据文件中写入一些演示用数据。4、读取文件。输入如下代码:运行下,看来我们读取成功了...

C++如何一行一行读取txt文件中数据并存入相应数组?
循环读入。c 程序 可作为 c++程序。include<iostream> include<fstream> using namespace std;include <stdio.h> main(){ int x[5],y[5];int i;FILE *fp;fp=fopen("sk.txt","r");for (i=0;i<5;i++) fscanf(fp,"%d",&x[i]);for (i=0;i<5;i++) fscanf(fp,"%d",&y[i...

用vc++逐行读取文本文件txt里面的数据,并且复制给数组
char *srcfile = "data.txt";\/\/文件名 int data[MAX][8];int main(){ FILE *src = fopen(src,"r");int i,j;for(i = 0;i < MAX;i++){ fscanf(srcfile,"%d,%d,%d,%d,%d,%d,%d,%d",&data[i][0],&data[i][1],&data[i][2],&data[i][3],&data[i][4],&data[...

C++编程读取TXT数据,将其赋值到数组,而后进行计算
最简单的方式是用freopen,使用了这个函数之后所有的cin\/cout就会从文件中读出或者写入,或者也可以用fstream;include <iostream>#include <cstdio>#define maxn 10000using namespace std;struct m{ int x; int y; int z;}a[maxn];int main(){ freopen("\/*文件名*\/","r"\/*代...

C++怎么读取指定TXT文档数据存入数组中
freopen("文件路径名","r",stdin);int case = 3, A, B;double a[3][3][3];scanf("A=%lf B=%lf",&A,&B);while(case--){ for(i = 0;i < 3;i ++){ for(j = 0;j < 3;j++){ for(k = 0;k < 3;k++){ scanf("%lf",&a[i][j][k]);} } } } ...

相似回答