Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrdimensionales Array unter Perl?
Hallo,
da ich in Perl-Programmierung noch relativ grün bin, hoffe ich, hier kann mir jemand das Wie zeigen.
Ich will aus einer Datei 86 Namen mit 86 Altersangaben und 86 Grössenangaben in ein Array einlesen, so dass zum dem jeweiligen Namen das Alter und die Grösse passt.
Aus einer Liste wie
Adel
27
165
Alexandra
25
174
Diane
26
178
soll folgendes Array werden:
Adel 27 165
Alexandra 25 174
Diane 26 178
Der Inhalt von Element (2,0) sollte also Diane sein.
Kann mir jemand erklären, wie ich das unter Perl realisieren kann? Vor allem möchte ich nachher nach Name, Alter und Grösse sortieren können, so dass eben wieder alles bestens zusammen passt was zusammen gehört.
Für Eure Hilfe bereits besten Dank im Voraus!
Gruss
Andreas
Mehrdimensionales Array:
@multi=( ["adel", "27", "167"],
["Kathrin", "22", "177"]);
Also ich persönlich finde assotiative Array's(=Hashes) wesentlich aussagekräftiger und lesbarer.
Beispiel:
#!/usr/bin/perl
# Die folgende Zuweisung laesst sich natuerlich auch verkuerzen
$personen{"adel"}{"alter"}=27;
$personen{"adel"}{"groesse"}=167;
$personen{"Kathrin"}{"alter"}=22;
$personen{"Kathrin"}{"groesse"}=187;
foreach(keys %personen) {
print "$_\t: ".$personen{$_}{"groesse"}."\n";
}
Gruß
Tobias
Besten Dank, Tobias,
für Dein aufschlussreiches Beispiel. Aber gibt es da eine Möglichkeit
aus einer ASCII-Datei so einzulesen, dass dann das
@multi=( ["adel", "27", "167"],
["Kathrin", "22", "177"]);
herauskommt? Also die Einträge sehen in der Datei natürlich so aus
adel 27 167
Kathrin 22 177 usw.
Ich weiss, dazu habe die Dateihandels über die ich mit
open <INPUT "datei">
Daten zeilenweise einlesen kann.
Aber wie muss ich schreiben, dass mir Perl das schön in das assoziative Array einliest, wie Du es mir so beispielhaft gezeigt hast?
Ich danke Dir für Deine Bemühungen,
Gruss
Andreas
so etwa:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my %person;
my @temp;
open(FILE,"<datei.txt") or die "Kann Datei nicht oeffnen: $!\n";
while(<FILE>){
chomp();
@temp=split();
$person{"$temp[0]"}{"alter"}=$temp[1];
$person{"$temp[0]"}{"groesse"}=$temp[2];
}
close(FILE);
foreach(keys %person) {
print "$_ : Alter: ".$person{"$_"}{"alter"}.
" Grösse : ".$person{"$_"}{"groesse"}."\n";
}
Gruß
Tobias
Hallo Tobias,
ich benötige noch einmal Dein Knowhow, um die Sache besser zu verstehen. Dein Skript
nutze ich, abgewandelt, um aus einer Datei daten.dat mit folgender Struktur
Diane 27 178
Ariane 25 174
die Werte in ein assoziatives Array zu schreiben:
#!/usr/bin/perl -w
use strict;
use warnings;
use diagnostics;
my %data;
my @temp;
my @array;
my $i;
my $j;
open(FILE,"<daten.dat") or die "Kann Datei nicht oeffnen: $!\n";
while(<FILE> ){
chomp();
@temp=split();
$data{"$temp[0]"}{"alter"}=$temp[1];
$data{"$temp[0]"}{"groesse"}=$temp[2];
}
close(FILE);
foreach(keys %data) {
$i = 0;
$array[$i]="$_";
$i = $i + 1;
}
for ($j = 0; $j <= $i; $j++){
print "Nr. $j: $array[$j] \n";
}
Ich möchte jetzt allerdings auf alle Elemente des Arrays seperat zugreifen können, weil ich
a) entweder nach Alter, Name oder Grösse sortieren möchte,
b) den Namen seperat benötige, um eine Tabelle zu erzeugen.
Wie kann ich also auf die einzelnen Elemente dieses assoziativen Array zugreifen und die gewünschten Werte in
einer Liste array für meine weiteren Zwecke ablegen? Jedenfalls liest mein Versuch da oben nur
Ariane ein und spuckt auch nur sie in der neuen Liste aus.
Als Nächstes interessiert mich natürlich der Befehl, den ich zum Sortieren benötige.
Vielen Dank für Deine Unterstützung
Andreas
foreach(keys %data) {
$i = 0;
$array[$i][0]="$_";
$array[$i][1]=$data{"$_"}{"alter"};
$array[$i][2]=$data{"$_"}{"groesse"};
$i = $i + 1;
}
> Als Nächstes interessiert mich natürlich der Befehl, den ich zum Sortieren benötige.
Ich kann Dir da "Einführung in Perl" von O'Reilly empfehlen, ein sehr gutes Buch.
Gruß
Tobias
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.