Moin!
text1.txt:
1;PE12345
40;PE234
12;IK3210text2.txt:
3;AK567
2;PE12345
20;IL098
6;JJ234567Ich möchte nun mittels eines Perl-Scriptes die beiden eingelesen Arrays miteinander vergleichen und in eine neue Datei zusammenfassen. Ist eine Registriernummer doppelt vergeben, sollen die beiden Mengen miteinander addiert werden und in die neue Datei gespeichert werden. Die anderen Einträge, also deren Registernummer nicht identisch sind, sollen aus beiden Dateien ebenfalls in die neue geschrieben werden.
Gehe ich recht in der Annahme, dass das in die neue Datei auszugebende Resultat (basierend auf obigen Daten, ergänzt durch meine Kommentare - die kommen natürlich nicht mit raus) so aussehen soll:
neutext.txt
3;PE12345 -> 2+1
40;PE234
12;IK3210
3;AK567
20;IL098
6;JJ234567
Sortierung ist egal?
Dann ist dein Problem kein "Array vergleichen"-Problem, sondern lediglich ein "Werte summieren"-Problem.
Zur Lösung eignet sich die Verwendung eines Hashes. Der Hash kriegt als Schlüssel deine Identifikationsnummer, und als enthaltenen Wert die Anzahl.
Auf diese Weise kannst du ganz einfach eine Datei nach der anderen auslesen und in den Hash füttern, und am Ende wiederum den Hash auslesen und in eine neue Datei füttern.
Also als Beispiel:
für alle Dateien (
öffne Datei
solange kein Dateiende (
lies eine Zeile.
splitte am ; -> ergibt $anzahl und $index
$hash[$index] = $hash[$index] + $anzahl
)
)
für alle Schlüsselwerte in %hash (
gib $anzahl und $index aus
)
Ja, alles in Pseudocode, aber ich schätze mal, du bist des Programmierens mächtig. Und bevor ich hier böse Perl-Fehler bastel oder my-Deklarationen vergesse, lasse ich es lieber (Perl ist nicht meine bevorzugte Programmiersprache).
- Sven Rautenberg
Die SelfHTML-Developer sagen Dankeschön für aktuell 21205,05 Euro Spendengelder!