Tobiahao

09_PLIKI_04

Jan 13th, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.66 KB | None | 0 0
  1. /*
  2. 4. Napisz program, który porówna ze sobą dwa pliki tekstowe, których nazwy zostaną przekazane mu jako argumenty wywołania. Porównanie to należy zrealizować wiersz po wierszu, wypisując na ekranie te wiersze, które się różnią treścią, wraz z ich numerem i nazwą pliku z jakiego pochodzą. Numer powinien być nadawany wierszowi względem początku pliku, czyli pierwszy wiersz powinien mieć numer jeden, drugi dwa, itd.
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <string.h>
  7. #define BUFFER_SIZE 1024
  8.  
  9. _Bool compare_two_strings(char *first, char *second, unsigned long first_length, unsigned long second_length)
  10. {
  11.     unsigned int counter = 0;
  12.    
  13.     if(first_length == second_length){
  14.         for(int i = 0; i < first_length; i++){
  15.             if(first[i] == second[i]){
  16.                 counter++;
  17.             }
  18.         }
  19.         if(counter == first_length){
  20.             return 1;
  21.         }
  22.         else{
  23.             return 0;
  24.         }
  25.     }
  26.     else{
  27.         return 0;
  28.     }
  29. }
  30.  
  31. void compare_files(FILE *FIRST, FILE *SECOND, char *first_name, char *second_name)
  32. {
  33.     char first_buffer[BUFFER_SIZE];
  34.     char second_buffer[BUFFER_SIZE];
  35.     _Bool end_of_first = 0;
  36.     _Bool end_of_second = 0;
  37.     unsigned int line_counter = 1;
  38.    
  39.     while((!feof(FIRST)) || (!feof(SECOND))){
  40.         fgets(first_buffer, BUFFER_SIZE, FIRST);
  41.         fgets(second_buffer, BUFFER_SIZE, SECOND);
  42.        
  43.        
  44.         if(feof(FIRST) && end_of_first) // Sprawdzenie konca pliku 2
  45.             strncpy(first_buffer, "(Pusty wiersz)", BUFFER_SIZE);
  46.         if(feof(SECOND) && end_of_second)
  47.             strncpy(second_buffer, "(Pusty wiersz)", BUFFER_SIZE);
  48.  
  49.         if(feof(FIRST)) // Sprawdzenie konca pliku 1
  50.             end_of_first = 1;
  51.         if(feof(SECOND))
  52.             end_of_second = 1;
  53.  
  54.         if(!compare_two_strings(first_buffer, second_buffer, strlen(first_buffer), strlen(second_buffer))){
  55.             printf("Roznica w linii nr: %d\n", line_counter);
  56.             printf("Plik: %s, -- %s\n", first_name, first_buffer);
  57.             printf("Plik: %s, -- %s\n\n", second_name, second_buffer);
  58.         }
  59.         line_counter++;
  60.     }
  61. }
  62.  
  63. int main(int argc, char *argv[])
  64. {
  65.     FILE *FIRST_FILE;
  66.     FILE *SECOND_FILE;
  67.     FIRST_FILE = fopen(argv[1], "r");
  68.     SECOND_FILE = fopen(argv[2], "r");
  69.    
  70.     if((FIRST_FILE == NULL) || (SECOND_FILE == NULL)){
  71.         printf("Blad otwarcia plikow!\n");
  72.         return -1;
  73.     }
  74.    
  75.     compare_files(FIRST_FILE, SECOND_FILE, argv[2], argv[3]);
  76.    
  77.     if((fclose(FIRST_FILE)) || (fclose(SECOND_FILE))){
  78.         printf("Blad zamkniecia plikow!\n");
  79.         return -1;
  80.     }
  81.     return 0;
  82. }
Add Comment
Please, Sign In to add comment