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

2024-11-25 18:44:42
推荐回答(4个)
回答1:

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


2.例程:

#include
#include
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);
}

回答2:

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;

回答3:

这是给定日期,输出同年同月数据(存放在2维数组a[10][31];里)
程序原理:用fgets()读入一行,用 sscanf(buf,"%d %d",&y,&m); 读出年月,若年月满足需要,则
用 sscanf(buf 。。)读出10列数据,存入数组。
#include
#include
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;jfor (i=0;i<10;i++) printf("%g ",a[i][j]);
printf("\n");
};
return 0;
}

如果要找前后10天数据,你可以先计算前后目标日期,
用 sscanf(buf,"%d %d &d",&y,&m,&d); 读得年月日,符合开始日期,没超过截止日期的行存起来就可以了。你可以模仿上面程序自己写。

回答4:

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];