Vergleich von 2 Tab Txt Files anhand von 3 Werten
|
Seitenanfang |
| Hallo, folgende Sache - ich lese mit DBI 2 Datenbanken aus - habe also folglich 2 txt Files auf der Platte. Jetzt will ich diese 2 Files in eines Packen - jedoch nur jene Zeilen, wo bestimmte (3) Spalten in beiden Files gleich sind. Wie bekomme ich sowas am schnellsten hin? Habe schon ein wenig mit Filehandlern und verschachtelten While Schleifen experimentiert - ohne Erfolg. Vielen Dank für die Unterstützung.
Datum: 27.07.2006-11:29

|
re: Vergleich von 2 Tab Txt Files anhand von 3 Werten
|
Seitenanfang |
| Geht zwar sicherlich auch eleganter, sollte aber funktionieren (ist nicht getestet wg. Ende von Mittagspause...): #!c:\perl\bin\perl use strict; my (@datei1,@datei2); open(IN,"<file1.txt"); @datei1 = <IN>; close IN; open(IN,"<file2.txt"); @datei2 = <IN>; close IN; open(OUT,">ergebnis.txt"); foreach my $string1 ( @datei1 ){ # statt ; must du das entsprechende Trennzeichen verwenden my @array1 = split( ";", $string1 ); my $anzahl = $#array1; my $count = 0; foreach my $string2 ( @datei2 ){ # statt ; must du das entsprechende Trennzeichen verwenden my @array2 = split( ";", $string2 ); for( my $a = 0; $a <= $anzahl; $a++ ){ $count ++ if( $array1[$a] eq $array2[$a] ); } } print OUT $string1 if( $count >= 3 ); } close OUT;
Datum: 27.07.2006-12:58

|
re: Vergleich von 2 Tab Txt Files anhand von 3 Werten
|
Seitenanfang |
| mh, danke für den Ansatz - es fehlt mir aber die möglcihkeiten mehrere felder abzufragen und dann die gesamte Zeile mit werten der zeile aus file 1 und 2 zu schreiben :)
Datum: 27.07.2006-13:33

|
re: Vergleich von 2 Tab Txt Files anhand von 3 Werten
|
Seitenanfang |
| an sich gehts jetzt, zu beachten ist auch, das ein File 3500 Zeilen hat , das andere 140000.... Somit dauert das agnze eine halbe ewigkeit - gib es nicht vorgefertigte Module für sowas????
Datum: 27.07.2006-14:11

|
re: Vergleich von 2 Tab Txt Files anhand von 3 Werten
|
Seitenanfang |
| Hallo, grundsätzlich wirst du nichtdrumrum kommen, jede Zeile der einen Datai mit der kompletten anderen Datei zu vergleichen. Also 3500 x 140.000 = 490.000.000 Vergleiche. Herzlichen Glückwunsch ! Auch ein fertiges Modul muss nicht weniger vergleiche machen. Aber man kann hier trotzdem optimieren. Entweder - wie ich in schon geschrieben hatte - lass es direkt die Datenbank machen. Die haben schon hoch optimierte Routinen für sowas. Oder benutze Hashes, damit zumindest die Vergleiche schnell gehen. Vorschlag: Lese Datei 1 ein und extrahiere die drei Felder die dich interessieren. Dann fügst Du diezu einem String zusammen, mit einem Trennzeichen, das nicht in den Strings vorkomt. Das haust Du in ein Hash und verhinderst damit auch, dass doppelte darin vorkommen. Mit Datei 2 machst Du das selbe. Dann durch Hash1 loopen und schauen, ob der Wert auch in Hash 2 vorkommt. Ergibt - durch ausfilterung der doppelten - evt. weniger Vergleiche, die - dank Hash - schneller gehen als immer durch die Datei 2 zu loopen. Code kann ich Dir nicht liefern, da ich das erst selber probieren müsste - bin auch nicht so fit in Perl. spline
Datum: 28.07.2006-12:28

|
re: Vergleich von 2 Tab Txt Files anhand von 3 Werten
|
Seitenanfang |
| Servus, mal bloede gefragt: Kannst Du nicht gleich bei den DB-Abfragen den Vergleich machen? ... WHERE db1.x = db2.x AND db1.y = db2.y .... spline
Datum: 28.07.2006-09:08

|