Hola Visitante

Autor Tema: Buscador de lineas coincidentes en dos archivos  (Leído 1422 veces)

Berni69

  • Administrator
  • *****
  • Mensajes: 25
    • Ver Perfil
Buscador de lineas coincidentes en dos archivos
« en: Octubre 03, 2011, 11:06:43 pm »
Este programa esta pensado apra analizar dos archivos  en busca de 2 lineas =, saltandose las lineas nulas o conformadas por espacios y otros char especiales.


Código: (C) [Seleccionar]
/*
 * File:   main.c
 * Author: berni
 *
 * Programa para saber si hay coincidencias en 2 archivos de texto
 *
 *
 *
 * Salida del main, valores: -1 error del programa, 0 no hay coincidencias, hay coincidencias
 */

#include
#include
#include

char *trim(char *s) {
    char *start = s;

    /* Nos comemos los espacios al inicio */
    while (*start && isspace(*start))
        ++start;

    char *i = start;
    char *end = start;

    /* Nos comemos los espacios al final */
    while (*i) {
        if (!isspace(*(i++)))
            end = i;
    }

    /* Escribimos el terminados */
    *end = 0;

    return start;
}

char *trim2(char *s, const char *trimChars) {
    char *start = s;

    /* Nos comemos los caracteres al principio */
    while (*start && strpbrk((const char*) start, trimChars) == start)
        ++start;

    char *i = start;
    char *end = start;

    /* Nos comemos los caracteres al final */
    while (*i) {
        if (strpbrk(i++, trimChars) != i - 1)
            end = i;
    }

    /* Coloramos el perminador */
    *end = 0;

    return start;
}

int main(int argc, char* argv[]) {
    if (argc!=3){ fprintf(stderr,\"Número de argumentos no válido\"); return -1;}
   
    short colision = 0;
    FILE *f = fopen(argv[1], \"r\");
    FILE *f2 = fopen(argv[2], \"r\");
    if (f == NULL) {
        perror(\"Error al abrir primer archivo\");
        return -1;
    }
    if (f2 == NULL) {
        perror(\"Error al abrir el segundo archivo\");
        return -1;
    }
    short nulo=0;
    const short lenght = 100;
    char cadena1[lenght], cadena2[lenght];
    while (fgets(cadena1, 100, f) != NULL) {
        strncpy(cadena1,trim2(trim(cadena1),\";\\\\r\\\\b\\\\n\\\\t\"),lenght );
       
        while (fgets(cadena2, 100, f2) != NULL) {
           strncpy(cadena2, trim2(trim(cadena2),\";\\\\r\\\\b\\\\n\\\\t\"),lenght );
           
           
            nulo=(strcmp(cadena1, \"\") == 0) || (strcmp(cadena1, \"\") == 0);
            if ((strcmp(cadena1, cadena2) == 0 ) && !nulo) //Son strings iguales
           
            { //printf(\"entro\");
                printf(\"Hay colisión en: %s.\\\\n\", cadena1);
               
                colision = colision || 1;
            }

        }rewind(f2);

    }




    fclose(f);
    fclose(f2);

    if (!colision)
        return 0;
    else return 1;
}