Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tabellenzeilen filtern

0 views
Skip to first unread message

Andre Tann

unread,
Nov 16, 2009, 4:56:28 AM11/16/09
to
Hallo zusammen,

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

Wolf Behrenhoff

unread,
Nov 16, 2009, 5:16:05 AM11/16/09
to
Andre Tann wrote:
> 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.

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!

gernot

unread,
Nov 16, 2009, 5:20:11 AM11/16/09
to

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

Andre Tann

unread,
Nov 16, 2009, 5:59:18 AM11/16/09
to
Wolf Behrenhoff wrote:

> 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

0 new messages