2 Files vergleichen
-
Guten Abend,
Ich bin langsam am verzweifeln.
Wir sollen 2 Textdateien einlesen und diese zeilenweise miteinander vergleichen, wenn die Character nicht übereinstimmen soll ein Counter erhöht werden.
Dazu kommt noch, dass nur bis zum Ende der kürzesten Zeile verglichen werden soll und nur bis zur minimalen Anzahl an Zeilen.Bsp:
File 1
abc
Haustor
defFile 2
abc
Haus
de
ghiHier sollte die Ausgabe "Zeile 3 Fehler 1" sein. Die 2. Zeile ist ok da ja nur bis zum Ende der kürzesten Zeile verglichen wird, sprich "tor" wird ignoriert. Die letzte Zeile von File 2 wird ebenfalls ignoriert, da File 1 nur 3 Zeilen hat.
int main(int argc, char *argv[]) { FILE *text1, *text2; char line1[50], line2[50]; int i, counter, pos, lineSize1, lineSize2; lineSize1 = 0; lineSize2 = 0; counter = 0; pos = 0; text1 = fopen("file1.txt" , "r"); text2 = fopen("file2.txt" , "r"); if(text1 == NULL || text2 == NULL) { perror ("Error opening file"); } else { while((fgets(line1, 50, text1) != NULL) && (fgets(line2, 50, text2) != NULL)) { pos++; lineSize1 = strlen(line1); lineSize2 = strlen(line2); if(lineSize1 >= lineSize2) { for(i = 0; i < lineSize2; i++) { if(line1[i] != line2[i]) { counter++; } } } else { for(i = 0; i < lineSize1; i++) { if(line1[i] != line2[i]) { counter++; } } } if(counter != 0) { printf("Zeile: %i Zeichen: %i\n", pos, counter); counter = 0; } } fclose(text1); fclose(text2); } system("PAUSE"); return 0; }
Das ist mein momentaner Lösungsansatz meine beiden Files sehen wie folgt aus:
File 1
11
111
111File 2
111
111
11111Die Ausgabe sollte ja eig "Zeile 1 Fehler 1" und "Zeile 3 Fehler 2" sein. aber er gibt mir nur "Zeile 1 Fehler 1" aus.
Ich hoffe ihr könnt mir helfen.
mfg
-
Gast0404 schrieb:
Hier sollte die Ausgabe "Zeile 3 Fehler 1" sein. Die 2. Zeile ist ok da ja nur bis zum Ende der kürzesten Zeile verglichen wird, sprich "tor" wird ignoriert.
Und wo ist der Fehler in Zeile 3? Bis zum Ende der kürzeren Zeile (de) sind die doch gleich.
Gast0404 schrieb:
Die Ausgabe sollte ja eig "Zeile 1 Fehler 1" und "Zeile 3 Fehler 2" sein. aber er gibt mir nur "Zeile 1 Fehler 1" aus.
Ich sehe da gar keinen Fehler. Kannst du nochmal genau erklären, was ein Fehler ist und was nicht?
-
Entschuldige, die Zeilen sollten "df" und "de" sein.
Der Inhalt der beiden Files ist nicht gerade gut gewählt.
File1
abcdefg
Garten
abcdefgFile2
abcdefg
Gartenzaun
ahciejg
abcdefgBei diesem Beispiel sollte alles stimmen bis auf Zeile 3, in dieser Zeile sind 3 Fehler. Das Programm erkennt das auch nur gibt er in Zeile 2 auch einen Fehler aus, wo aber keiner sein sollte da Garten = Garten ist.
Ich hoffe man erkennt die Funktion anhand dieser Inhalte besser.
Zeile 1: abcdefg = abcdefg
Zeile 2: Garten = Garten (zaun wird ja ignoriert)
Zeile 3: abcdefg != ahciejg (3 Fehler)
Zeile 4: wird ignoriert.Wie gesagt Zeile 3 wird erkannt nur gibt er mir in Zeile 2 auch einen Fehler aus. Ich weiß leider nicht warum.
-
fgets liest einen ggf. vorhandenen Zeilenumbruch mit ein.
-
Heisst dass das in Zeile 3 das "z" mit einem "\n" verglichen wird?
Das heisst ich müsste vorher überprüfen ob der Charakter ein Zeilenumbruch ist?mfg
-
Gast0404 schrieb:
Heisst dass das in Zeile 3 das "z" mit einem "\n" verglichen wird?
Genau so ist es. Mit einem Debugger hättest du das übrigens sehr einfach selbst herausgefunden
Gast0404 schrieb:
Das heisst ich müsste vorher überprüfen ob der Charakter ein Zeilenumbruch ist?
Du könntest auch vor dem Vergleich prüfen, ob das letzte Zeichen ein Zeilenumbruch ist, und es ggf. abschneiden.
-
Vielen Dank für deine Geduld und deine Hilfe!
Ich werde das Ganze gleich Umsetzen.
mfg