比较两个文件并创建具有差异的新文件

时间:2019-05-31 05:09:09

标签: c

我需要比较两个文件并使用这两个文件的区别创建一个新文件,我只知道比较文件以显示它们是否相等,但是我不知道该如何解决我的问题。

我搜索了很多有关如何比较文件的信息,但是我没有找到显示这两个文件之间差异的方法。这是我的实际代码。

编辑:该文件可以包含多于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

3 个答案:

答案 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);
}