我需要比较两个文件并使用这两个文件的区别创建一个新文件,我只知道比较文件以显示它们是否相等,但是我不知道该如何解决我的问题。
我搜索了很多有关如何比较文件的信息,但是我没有找到显示这两个文件之间差异的方法。这是我的实际代码。
编辑:该文件可以包含多于1行的数据,通常为30行。
该文本无法删除,相似性仅出现在文本末尾。我的意思是,文件文本的最后一行将始终是其他文件文本的开头。
这是用于家庭作业,说明是:“读取主机文件,并检查ip url文件中是否已存在任何行,如果没有,则有必要将它们写入临时文件中。”
#include <stdio.h>
void main()
{
FILE *f1, *f2;
int a, b;
f1 = fopen("D:\\product3\\test.txt","r");
f2 = fopen("D:\\product3\\test2.txt", "r");
if(f1 == NULL || f2 == NULL)
{
printf("Cannot read the files");
}
else
{
a = getc(f1);
b = getc(f2);
while (a != EOF && b != EOF)
{
a = getc(f1);
b = getc(f2);
if(a != b)
{
printf("");
}
}
if (a == b)
{
printf("\n The files are equal \n");
}
else if (a!=b)
{
printf("\n The files aren't equal \n");
}
else
{
printf("\n Error \n");
}
}
fclose(f1);
fclose(f2);
}
文件内容为:
>Test.txt AAA aaa bbb BBB 111 >Test2.txt AAA aaa bbb BBB 111 333 444 555 6666 777 CCC
因此输出必须为:
>333 444 555 6666 777 CCC
答案 0 :(得分:1)
让我们在while循环主体中添加更多代码以显示不同之处:
Traceback (most recent call last):
File "F:TC.py", line 1, in <module>
import xlsxwriter
ImportError: No module named xlsxwriter
然后,我们添加有关文件长度差异的信息:
while (a != EOF && b != EOF)
{
a = getc(f1);
b = getc(f2);
if(a != b)
{
/* print info about this difference */
}
}
如果您在这些小步骤中发现任何问题,请在此处添加评论。
最后一步很简单:将差异保存在文件中(但在完成两个第一步之前,我建议您使用if (a == EOF || b == EOF)
{
/* print other characters of the longer file */
}
打印所有内容)。
答案 1 :(得分:1)
嗯,您的算法是错误的。以下是一些伪代码可能会有所帮助:
function line_exists(l, la)
for line in la
if line == l
return true
return false
line_array = array()
for line in file1
line_array.add(line)
for line in file2
if not line_exists(line, line_array)
print(line)
答案 2 :(得分:0)
这是我最终使用的代码。
void CheckContent(char dir[100])
{
FILE *f1, *f2,*f3;
int a, b;
char dir2[100];
char temporal[100];
strcpy (temporal,"D:\\producto3\\temporal.txt");
printf("\nIntroduce la ruta del archivo donde estan los pares a leer.\n");
scanf("%s", &dir2);
f1 = fopen(dir, "r");
f2 = fopen(dir2, "r");
f3 = fopen(temporal, "w");
if (f1 == NULL || f2 == NULL)
{
printf("No se puede leer alguno de los ficheros");
}
else
{
char pairLine[256];
f2 = fopen("D:\\producto3\\pares.txt", "r");
while (fgets(pairLine, sizeof(pairLine), f2))
{
char hostLine[256];
f1 = fopen("D:\\producto3\\hosts", "r");
int counter = 0;
while (fgets(hostLine, sizeof(hostLine), f1))
{
if (hostLine[0] != '#')
{
if (strcmp(pairLine, hostLine) == 0)
{
counter++;
}
}
}
fclose(f1);
if (counter == 0)
{
fputs(pairLine,f3);
}
}
fclose(f3);
fclose(f2);
}
FilePares(dir,temporal);
}