perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




11.02.2012 / 20:26

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragZeilenweiser Vergleich von Textdateien
Seitenanfang
Liebe Community,

hoffe, ihr könnt (und wollt) mir bei folgendem Problem helfen. Eigentlich erschien es mir so unglaublich einfach, jetzt hänge ich aber schon ne ganze Zeit dran und werde einfach nicht mehr schlau aus den Fehlern...

Zuerst einmal der Sinn: Ich möchte zwei Textdateien mit kurzen Einträgen zeilenweise vergleichen. Nur in Datei 1 vorkommende Zeilen werden in einer eigenen Datei gespeichert, ebenso nur in Datei 2 oder in beiden Dateien vorkommende Zeilen.

Wollte dann einfach die erste Datei öffnen und diese Zeile mit allen Zeilen der zweiten Datei vergleichen. Bei Gleichheit kommt es in die Datei hinter dem Handle BOTH, ansonsten in ONLY1. Danach neu laden und Datei 2 durchgehen und mit 1 vergleichen, bei Gleichheit einfach ignorieren, ansonsten in ONLY2. Mehrere gleiche Zeilen in einer Datei kommen übrigens nicht vor.

Ein Ausschnitt aus dem Code:


open FILE1, "< $srcFiles[0]";
while ($srcLine = <FILE1>) {
open FILE2, "< $srcFiles[1]";
while ($cmpLine = <FILE2>) {
if ($srcLine eq $cmpLine) {
print "Found in both files: $srcLine \n";
print BOTH "$srcLine\n";
}
else {
print "Only in file 1: $srcLine \n";
print ONLY1 "$srcLine\n";
}
}
close FILE2;
}
close FILE1;

Hab's auch mit nem Regex versucht, aber da ich mir nicht sicher war, ob ich eine Variable wieder im Regex verwenden darf, hab ich auf diese Variante umgestellt.

Das Ergebnis: In der Ausgabe (und in der Datei hinter ONLY1) erscheint die gleiche Zeile mehrfach, bevor die nächste Zeile durchgegangen wird. Und wie gesagt: Alles nur in der Art, als würden die Zeilen nur in Datei 1 vorkommen. Allein die erste Zeile ist aber in beiden Dateien schon gleich...

Habe überhaupt keine Ahnung mehr, was ich da falsch gemacht habe... Hoffe also auf eure Hilfe! Danke im Voraus!

Datum: 10.08.2008-17:49

Beitragre: Zeilenweiser Vergleich von Textdateien
Seitenanfang
Hallo!

Vergegenwärtige dir doch mal, was dein Code eigentlich macht:
1.) Vergleich Zeile 1.1 mit Zeile 2.1
---> Zeile 1.1 entsprechend in eine der beiden Ergebnisdateien eintragen
2.) Vergleich Zeile 1.1 mit Zeile 2.2
---> Zeile 1.1 entsprechend in eine der beiden Ergebnisdateien eintragen
3.) Vergleich Zeile 1.1 mit Zeile 2.3
--->... usw. usf.

Erkennst du deinen Fehler?

Du musst erst die komplette zweite Datei durchgehen, bevor du die Entscheidung triffst, in welche Datei diese Textzeile eingetragen wird.

Erstelle dir dazu am besten eine Variable mit dem Wert 0 (falsch), den du bei erkannter Gleichheit der Zeilen auf 1 (wahr) setzt.
Außerhalb der inneren while-Schleife kannst du dann anhand dieser Variable entscheiden, wo du die Textzeile einträgst.

Grüße, Skrilax

Datum: 11.08.2008-08:33

Beitragre: Zeilenweiser Vergleich von Textdateien
Seitenanfang
Oh je, da war ich wohl etwas euphorisch über ein Skript, das mir einfach mal so von der Hand gehen sollte... und ja, hast natürlich recht. Jetzt funktioniert es einwandfrei.
Na ja, man merkt, dass ich immer noch Anfänger bin.

Vielen Dank, Skrilax!
Grüße
Chris

Datum: 11.08.2008-18:29

-






-
-