Programa C para comparar dos archivos y reportar discrepancias

Nos dan casi dos archivos idénticos. Pero algunos personajes están dañados. Necesitamos encontrar el número de línea y su posición donde existen esas letras corruptas, así como el número total de letras corruptas (errores).

Ejemplos:

Input :
file1.txt contains
it is
fun
file2.txt contains
it is
run

Output :
Line Number : 2         Error Position : 1
Total Errors : 1

Requisito previo: getc() en C

Pasos:
1.> Abra dos archivos usando el puntero de archivo en modo de solo lectura.
2.> Obtenga datos del archivo en dos variables de caracteres uno por uno hasta el final del archivo.
3.> Si la variable encuentra una nueva línea, aumente el número de línea y restablezca la posición a cero.
4.> Si las variables no son iguales, aumente el número de error e imprima la línea de error, así como el índice de error.

// C program to compare two files and report
// mismatches by displaying line number and
// position of line.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
  
void compareFiles(FILE *fp1, FILE *fp2)
{
    // fetching character of two file
    // in two variable ch1 and ch2
    char ch1 = getc(fp1);
    char ch2 = getc(fp2);
  
    // error keeps track of number of errors
    // pos keeps track of position of errors
    // line keeps track of error line
    int error = 0, pos = 0, line = 1;
  
    // iterate loop till end of file
    while (ch1 != EOF && ch2 != EOF)
    {
        pos++;
  
        // if both variable encounters new
        // line then line variable is incremented
        // and pos variable is set to 0
        if (ch1 == '\n' && ch2 == '\n')
        {
            line++;
            pos = 0;
        }
  
        // if fetched data is not equal then
        // error is incremented
        if (ch1 != ch2)
        {
            error++;
            printf("Line Number : %d \tError"
               " Position : %d \n", line, pos);
        }
  
        // fetching character until end of file
        ch1 = getc(fp1);
        ch2 = getc(fp2);
    }
  
    printf("Total Errors : %d\t", error);
}
  
// Driver code
int main()
{
    // opening both file in read only mode
    FILE *fp1 = fopen("file1.txt", "r");
    FILE *fp2 = fopen("file2.txt", "r");
  
    if (fp1 == NULL || fp2 == NULL)
    {
       printf("Error : Files not open");
       exit(0);
    }
  
    compareFiles(fp1, fp2);
  
    // closing both file
    fclose(fp1);
    fclose(fp2);
    return 0;
}

Producción:

Line Number : 2         Error Position : 1
Total Errors : 1

Este artículo es una contribución de Aditya Kumar . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *