Datein vergleichen
-
Dieses Programm machts so wie ich oben beschrieben hab!
Hab nur zum Testen ohne Kommandozeilenparameter gemacht, musst halt noch ab ändern.#include <stdio.h> #include <string.h> int datcmp(char *file_name1,char *file_name2); int main(int argc, char **argv) { printf("%i",datcmp("m1.txt","m2.txt")); //Dateinamen angeben, oder Kommandozeilenparameter return (0) ; } int datcmp(char *file_name1,char *file_name2) { FILE *fp1,*fp2; //Filepointer char arr1[1000]={0},arr2[1000]={0}; //Arrays zum zwischenspeichern der Zeilen int i=0; //Variable zum hochzählen der erfolgreich verglichenen Zeilen fp1=fopen(file_name1,"r"); //1.Datei zum lesen öffnen fp2=fopen(file_name2,"r"); //2.Datei zum lesen öffnen while(fgets(arr1,1000,fp1)) //Zeilenweises einlesen { while(fgets(arr2,1000,fp2)) //Zeilenweises einlesen { break; } if(strcmp(arr1,arr2)==0) //Vergleich der Zeilen { i++; } } fclose(fp1); //Schließen der Datei fclose(fp2); //Schließen der Datei return (i); //rückgabe der Anzahl gleicher Zeilen }
mfg hohesC
[edit]Beschreibung/Kommentare zugefügt
[/edit]
-
VIelen Dank für die tolle antwort kapiers langsam.
Noch eine Frage zu meiner "Lösung", die war einfach völlig falsch oder gab es zumindest gute ansätze
-
Um ehrlich zu sein habe ich dein Konzept gar nicht verstanden, war bisschen unverständlich aber das macht nix
Am Anfang ist es eh immer schwer, man muss bloß einmal dahinter gestiegen sein und dann fällt es einem leicht.mfg hohesC
-
Hallo
hab dein Programm jetzt vertanden und auch geschafft es einzubinden, nur hab ich jetzt das Problem das es nur zeilenweise vergleicht, -> also nur Zeile 1 von Datei 1 mit Zeile 1 von Datei 2 und dann Zeile 2 von Datei 1 und Zeile 2 von Datei 2
Was ich aber machen muss ist zu schauen ob z.B. Zeile1 von Datei 1 überhaupt in Datei 2 vorkommt und wenn ja den Counter erhöhen.
Kann man mir tipps geben welche Befehle ichdafür brauch.
Mir ist klar das ich wahrscheinlich eine for oder while schleife brauch aber ich weiß nicht weiter
-
hab dein Programm jetzt vertanden und auch geschafft es einzubinden, nur hab ich jetzt das Problem das es nur zeilenweise vergleicht, -> also nur Zeile 1 von Datei 1 mit Zeile 1 von Datei 2 und dann Zeile 2 von Datei 1 und Zeile 2 von Datei 2
Keine Überraschung, weil hohesC sich in seinem Programm vertan hat.
Der Vergleich und das erhöhen des Zählers muss mit in die innere while-Schleife,
nicht dahinter.
-
Also hab es mir so gedacht ich muss mall schauen wieviele Lines eine Datei hat und die Anzahl als var speichern
for ( i=0; i<anz_lines;i++;)
und jetzt mein Problem wie finde ich raus wieviele lines die datei hat und wie spreche ich dann eine einzelne line an
-
Keine Überraschung, weil hohesC sich in seinem Programm vertan hat.
Der Vergleich und das erhöhen des Zählers muss mit in die innere while-Schleife,
nicht dahinter.Stimmt hab gedacht er wollte das so, sorry!
Musst ja blos umstellenmfg hohesC
-
also hab es so umgeändert wie ihr gesagt habt aber es geht trotzdem nicht
bei mir schaut es jetzt so ausint datcmp(char *file_name1,char *file_name2) { FILE *fp1,*fp2; //Filepointer char arr1[1000]={0},arr2[1000]={0}; //Arrays zum zwischenspeichern der Zeilen int i=0; //Variable zum hochzählen der erfolgreich vergleichten Zeilen fp1=fopen(file_name1,"r"); //1.Datei zum lesen öffnen fp2=fopen(file_name2,"r"); //2.Datei zum lesen öffnen while(fgets(arr1,1000,fp1)) //Zeilenweises einlesen { while(fgets(arr2,1000,fp2)) //Zeilenweises einlesen { if(strcmp(arr1,arr2)==0) //Vergleich der Zeilen { i++; } break; } } fclose(fp1); //Schließen der Datei fclose(fp2); //Schließen der Datei return (i); //rückgabe der Anzahl gleicher Zeilen }
bei den Dateien die so auschauen
9, 21, 6 10, 20, 31 98, 12, 45
als erstes File und zweites File das so auschaut
11, 32, 9 98, 12, 45 11, 21, 31 100, 1, 0
also müsste er mir ja ein zurückgeben wegen 98, 12, 45 aber ich kriege null zurück
-
Sorry war Gestern nicht mehr im Forum:
int datcmp(char *file_name1,char *file_name2) { FILE *fp1,*fp2; //Filepointer char arr1[1000]={0},arr2[1000]={0}; //Arrays zum zwischenspeichern der Zeilen int i=0; //Variable zum hochzählen der erfolgreich vergleichten Zeilen fp1=fopen(file_name1,"r"); //1.Datei zum lesen öffnen fp2=fopen(file_name2,"r"); //2.Datei zum lesen öffnen while(fgets(arr1,1000,fp1)) //Zeilenweises einlesen { while(fgets(arr2,1000,fp2))//Zeilenweises einlesen { if(strcmp(arr2,arr1)==0) //Vergleich der Zeilen { i++; } } fseek( fp2, 0, SEEK_SET ); //wieder auf den Anfang setzen } fclose(fp1); //Schließen der Dateiên fclose(fp2); return (i); //rückgabe der Anzahl gleicher Zeilen }
damit gehts wie dus dir vorstellst!
mfg hohesC
-
Hohes C, vielen vielen Dank du bist echt eine rießen Hilfe
Danke sehr