关于文件内容处理

来源:百度知道 编辑:UC知道 时间:2024/06/16 11:54:36
现在有两个文件file1和file2,格式相同,都是两列字符串(用户对),同一行的字符串用空格分隔,形如:
abcd bdc
dd edd
ewe gwadf
有很多很多行

现在需要从file1(300-500行)里面读出第一行,去和file2(5w-10w行)里面的所有行比较
如果file2有相同的行就把这一行放到yesfile中间去
如果file2里面没有这一行,就把这行内容放到nofile里去
也就是按照是否在file2中是否有相同行为标准把file1的内容分别存到两个file中去。
不会弄:(
思路是有的,就是先读一遍file1,把每行的内容存到一个二维数组里面。
然后把这个二维数组的每一个元素和file2的每一行内容比较,如果有就写入yesfile,如果没有就写入nofile,对了,还要数出来yesfile和nofile各有多少行:(

看了一晚上shell命令,觉得太复杂了,转而投奔c,发现文件操作这块也不怎么利索:(
请指导一下,非常感谢!

用fgets可以直接读出一行内容,包括new-line符号,并放在buff里。

#define buff_size 2000
FILE *fin, *fin2, *fout, *fout2; //用于文件1,2和输出文件1,2

char *buff, *buff2; // 用于读行
int i,j,k;
int N1,N2;
buff = (char *) malloc(buff_size * sizeof(char));
buff2 = (char *) malloc(buff_size * sizeof(char));

//自己添加打开2个输入文件和2个输出文件

// 跳过299行 file1
N1 = 0;
while ( fgets(buff,buff_size,fin) !=NULL ){
N1 = N1 + 1;
if (N1 == 299) break;
}

for (i=300;i<=500;i++){
// 从文件1 每读1行
fgets( buff, buff_size, fin);
// 回绕文件2,跳过前4行
rewind(fin2);
N2=0;
while ( fgets(buff2,buff_size,fin2) !=NULL ){
N2 = N2 + 1;
if (N2 == 4) break;
};

// 读文件2 第5到10行,每读1行,就同buff比较
for (j=5;j<=10;j++){
fgets( buff2, buff_size, fin2);
if (strcmp(buff,buuf2) == 0){
fprintf(fout,"%s",buff);
}else {
fprintf(fout2,"%s",buff);
};
};
};