Frank Schönmann: Perl: Geht das einfacher?

Beitrag lesen

hi!

ZIEL: Namen (Werte) der Spalten in Variablen zu speichern mit Bezug auf Position in der Reihenfolge.

OK, ich hab mich wirklich bemüht. Ich hab zehn Minuten vor dem Stück Quellcode gesessen, aber trotzdem nicht verstanden, was du da genau machst. So ziemlich alles an deinem Quellcode kommt mir irgendwie umständlich oder unverständlich vor... Deshalb versuche ich es mal von Anfang an komplett neu.

Zuallererst: Schau dir vor allem die Perl-Funktion push an, vielleicht bringt dich das allein schon weiter.

OK, los geht's:
=== cut ===
#!/usr/bin/perl

wir lesen zuallererst mal alle Zeilen der Datei in eine Liste ein

open DATEI, "<database.txt";
@lines = <DATEI>;
close DATEI;

dann bearbeiten wir jede Zeile einzeln

for (@lines)
{
  # wir splitten jede Zeile in die Hauptgruppe und die Untergruppe auf
  ($grp, $subgrp) = split /;/;
  # wir entfernen das letzte Zeichen = das Newline-Zeichen
  chop $subgrp;
  # wenn wir jetzt bei einer anderen Hauptgruppe sind als vorher...
  if ($lastgrp ne $grp)
  {
    # ...dann definieren wir eine neue letzte Hauptgruppe
    $lastgrp = $grp;
    # ...und erweitern das Array der Hauptgruppen um die neue Gruppe
    push @groups, $grp;
  }
  # abschließend hängen wir an das Array, das die Untergruppen der aktuellen Hauptgruppe
  # speichert, die neue Untergruppe an
  push @{ $subgroups[$#groups] }, $subgrp;
}

zum testen ein bisschen was auf den Bildschirm schreiben

print @groups, "\n";
print @{ $subgroups[0] };

=== cut ===

Das war's auch schon, und ich finde es übersichtlicher als vorher. Ich hoffe, das war, was du wolltest.
$groups[0] ist jetzt der Name der ersten Hauptgruppe, $groups[1] der Name der zweiten Hauptgruppe, etc.
$subgroups[0][0] ist der Name der ersten Untergruppe von der ersten Hauptgruppe, $subgroups[1][2] ist der Name der dritten Untergruppe von der zweiten Hauptgruppe, etc.

bye, Frank!