C语言/C++ 一个按行读取 C盘某txt文档 (文档是按行更新的,只输出最新的一行) 怎么写,

如果指定输出最后一行 关键字 后6位数字 又该怎么写

方法很多,但都很麻烦,因为你的要求就不平常!下面提供一个方法,相对来说要简便一些。思路是这样的。 1、将每一行的字符个数及各个字符的ASCII值累加为一个整数作为.txt文档每一行的特征数据记录下来(存入一个数据文件)。2、读入更新后的.txt文档,同样获取每一行的特征数据,然后与上次数据对应比较,如果有一个数据不同,就说明该行已经更新,根据要求处理该行。

#include <stdio.h>
#include <stdlib.h>

int TotalValue(char *s,size_t *len) {
int i = 0,value = 0;
*len = 0;
while(s[i]) {
++(*len);
value += s[i++];
}
return value;
}

int main(){ 
int TV,nTV;
size_t size,len,nlen,num = 0;
char ParFile[] = "parFile.bin";
char DataFile[] = "dataFile.txt";
char Data[256];//假定最长行字符数不超过255个英文字符 
FILE *fpp,*fpd;
fpp = fopen(ParFile,"rb");
if(fpp == NULL) {//这还是第一次处理文件
if((fpd = fopen(DataFile,"rt")) == NULL) {
printf("无法打开数据文件:%s\n",DataFile);
exit(1);
}
}
fpp = fopen(ParFile,"rb");
while(!feof(fpp) && !feof(fpd)) {
fscanf(fpd,"%s",Data);
fread(&len,sizeof(int),1,fpp);
fread(&TV,sizeof(int),1,fpp);
nTV = TotalValue(Data,&nlen);
if(TV == nTV && len == nlen) continue;
else {
++num;
printf("%s\n",Data); // 显示更新后的文本行 
}
}
fclose(fpp);
fclose(fpd);
printf("共更新了%d行。\n",num);
fpd == fopen(DataFile,"rt");
fpp = fopen(ParFile,"wb");
while(!feof(fpp) && !feof(fpd)) {//重新获取文本文件特征数据 
fscanf(fpd,"%s",Data);
fread(&len,sizeof(int),1,fpp);
fread(&TV,sizeof(int),1,fpp);
nTV = TotalValue(Data,&nlen);
fwrite(&nlen,sizeof(int),1,fpp);
fwrite(&nTV,sizeof(int),1,fpp);
}
fclose(fpp);
fclose(fpd);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答