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

有一个约10000行的txt文件,部分行数据示意如下(前三列为日期,按递增顺序排列):196212037684-0.0548950.2293050.02730770.00... 有一个约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++初学者,最好程序简单易懂点。多谢各位大侠!~
展开
 我来答
tattackor
推荐于2016-02-20 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:863万
展开全部

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);
}
_whales
2013-05-17 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:487万
展开全部
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
推荐于2017-12-16 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5545万
展开全部
这是给定日期,输出同年同月数据(存放在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); 读得年月日,符合开始日期,没超过截止日期的行存起来就可以了。你可以模仿上面程序自己写。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2013-05-17 · TA获得超过380个赞
知道小有建树答主
回答量:618
采纳率:50%
帮助的人:224万
展开全部
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~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式