Mirko: Elegante Lösung für ein Standardproblem gesucht

Beitrag lesen

Hi!

Bin mal wieder da... ;)

eine CSV datei soll in eine Liste von Hashes eingelesen werden. Die Feldbezeichnungen, stehen in der ersten Zeile. Die Liste soll später nur die Daten (ab 2. Zeile enthalten), aber jedes Listenelement ist ein Hash, der als Key die Werte der ersten Zeile benutzt.
Das Feldtrennzeichen ist , es werden keine "" für Strings verwendet.

So, schonmal vielen Dank für die Hilfe in Form von Anregungen, Erklärungen oder sogar einem kleinen Stückchen Code :-)

Ich würde das so machen:

erstmal die erste Zeile lesen

Hier noch kein "@", weil sonst das gesamte File

gelesen wird

$felderzeile = <DATEI>;

CR am Ende entfernen

chomp($felderzeile);

Dann Aufsplitten:

@felder = split(//,$felderzeile);

Array-Zaehler auf 0

$zeile=0;

OK, jetzt der Rest:

while (<DATEI>) {
    # wieder CR weg und aufsplitten
    chomp($_);
    @werte = split(//,$_);
    # und jetzt kopieren wir den Array in den Hash-Array:
    for ($i=0;$i<=$#werte;$i++) {
        $wert{$felder[$i]}[$zeile] = $werte[$i];
    }
    # naechste Zeile...
    $zeile++;
}

Ansprechen laest sich das dann z.B. so:

for ($i=0;$i<$zeile-1;$i++) {
    foreach $key (keys %felder) {
        print $key,"=",$wert{$key}[$i],"\n";
    }
}

Statt dem $zeile-Zähler könnte man auch die Perl-Variable $./$NR verwenden, in der die Zeile der Datei steht. So finde ich's aber verständlicher...

Ciao,
Mirko