Lesen einer tab-getrennte Datei in den hash in perl und Suche
Ich habe eine tab-getrennte Datei (inpFile.txt) als
field1 field2
aaa1 aaa2
aaa1 bbb2
aaa1 ccc2
ccc1 ddd2
eee2 aaa2
Ich es Lesen wollen, und speichern Sie es in hash ( hashname )
Einmal meine hash ist bereit, ich will zu suchen, wenn ein ($key, $value) - paar gefunden wird oder nicht. Zum Beispiel, wenn (eee2, aaa2) gefunden wird oder nicht?
Ich bin ein starter in Perl, aber ich weiß, dass es getan werden kann effizient in Perl und ist einfach.
Schrieb ich den folgenden code. Kannst du bitte weiter auszubauen?
Dank
#!/usr/local/bin/perl
open (LIST1, "/inpFile.txt") || die "File not found\n";
while (<LIST1>) {
($tmpvar1, $tmpvar2) = split(/\t/, $_);
$hashname{$tmpvar1} = $tmpvar2;
}
close(LIST1);
- Vielen Dank, der code-Schnipsel in Ihre Frage eigentlich war meine Lösung!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Ihre Daten enthält Schlüssel mit mehreren Werten und unter der Annahme, dass das tatsächlich der Fall ist, in Ihrer Daten-Datei, können Sie ein hash von arrays (HoA), wo ein Schlüssel zugeordnet ist, mit einem array:
Suche nach einem 'Schlüssel/Wert-paar wird durchgeführt, indem man zuerst sehen, ob der Schlüssel vorhanden ist, und dann mit der smart match-operator, um zu sehen, ob der Wert existiert in dem array, das mit der Taste verknüpft.
Ausgabe:
Hoffe, das hilft!
Erstens, ich interpretiere deine Frage zu spezifisch sein, um Duplikate auf Schlüssel/Werte Paare. Dies ist etwas umständlich, -- die normale Frage ist nur zum testen für den Schlüssel, aber wir können Schlüssel-Wert, indem Sie beide den Schlüssel und den Wert der Eingabe einer Funktion verwenden, erzeugt von neuem Schlüssel.
Wenn Sie nur mit einem tab-deliminated CSV, verwenden Sie Text::CSV und seien Sie versichert, dass es richtig gemacht ist und die komplexesten Fälle sind abgedeckt! Installieren Text::CSV_XS, um es sehr schnell zu.
Nachdem Sie verstehen, dass der rest der übung ist auch einfach. Ich verwende einen sehr einfachen algo, dass sha1 ' ed key und Wert verkettet die beiden und indiziert ein hash ist. Dies eliminiert die listigen versuche, Kollisionen, aber möglicherweise nicht notwendig für Ihre Aufgabe. Fühlen Sie sich frei, Fragen zu stellen.
Ersten, wenn Sie traf sich mit Perl, verwenden pragma
use strict;
.Merke ich, dass Sie die Datei besteht
während der Verarbeitung unserer Datei, hash speichern wird nur ein Schlüssel
'aaa1' => 'bbb2'
, weil Perl hat eindeutigen Schlüssel im hash.Ihre input-Datei wird das Ergebnis in nur drei hash-element, weil die Tasten dupliziert werden. Im wirklichen Leben Sie haben, um mit dieser Art von situation, aber ich in diesem Fall ändern Sie Ihre Eingabe-Datei:
Hier einige Verbesserungs-code:
print Dumper($hashname)
zu testen, die hash-Elemente. Nehmen Sie das heraus, wenn Sie eine große Datei.