bin gerade dabei Perl zu lernen. Hauptsächlich brauche ich es, um
größere Datentabellen zu manipulieren.
Folgende Aufgabenstellung möchte ich gerne lösen:
Tabelle/Datei A:
data1 data2 ID data3
Tabelle/Datei B:
ID
Die erste Tabelle enthält also tausende von Zeilen, die in einer Spalte
mittendrin eine eindeutige ID haben.
Die zweite Tabelle enthält nur eine Reihe von IDs.
Wie finde ich in der ersten Tabelle alle Zeilen, deren ID in Tabelle B
vorkommt?
Mich würde jetzt ein grob skizzierter Weg interessieren, wie man
vorgehen könnte, kein fertiger Code-Vorschlag. Den will ich mir selbst
erarbeiten.
Ist es sinnvoll, beide Tabellen zuerst in ein Array zu lesen und dann zu
manipulieren? Könnte bei umfangreichen Tabellen blöd sein.
Oder lese ich besser die erste Zeile von Tabelle A, dann sämtliche
Zeilen von Tabelle B, dann die zweite Zeile von Tabelle A, dann wieder
sämtliche Zeilen von Tabelle B? Scheint mir sehr teuer zu sein.
Freue mich über Ideen.
--
Andre Tann
1. Lies Tabelle B komplett ein. In einen Hash, also jede ID als key.
Wert ist egal.
2. Lies Tabelle A zeilenweise ein. Finde die Spalte mit der ID und frage
mit Hilfe von exists ab, ob die ID in dem Hash vorkommt.
Wolf
PS: Viel Erfolg!
Hi,...
ganz wie du willst, hätte dir auch ein fertiges Skript gegeben, aber
so ist es natürlich sehr zu begrüßen...
Also, mein Tipp wäre ein Hash!
my %hash;
Erste Datei einlesen, Feld merken.
$hash{$feld} = 1;
Zweite Datei einlesen und Feld vergleichen
my $vergleich = feldAusDatei2
$hash{$vergleich};
Tipp: http://perl-zeitung.at.tf/
Gruß,
Gernot
> 1. Lies Tabelle B komplett ein. In einen Hash, also jede ID als key.
> Wert ist egal.
> 2. Lies Tabelle A zeilenweise ein. Finde die Spalte mit der ID und
> frage mit Hilfe von exists ab, ob die ID in dem Hash vorkommt.
Danke, das hilft mir schon mal ganz gut weiter. Wenn ich das umgesetzt
habe, dann poste ich meine Lösung, und dann kann ja evtl. mal jemand
drübergucken, ob es Verbesserungsmöglichkeiten gibt.
Danke auch an gernot, der im Prinzip Ähnliches vorgeschlagen hat.
Viele Grüße!
--
Andre Tann