Hi an alle,
Eine subroutine in einem script soll folgendes leisten:
aus einer csv-datei der Art:
name|mailaddress|mobile|phone|rubrik|pw
Schnuffil|schnuffel@schnuffel.de|0169-55555555|030-12345678|design|sChN
Stoffel|stoff@stoff.de|0169-9876543|080-4444444|design, pr|STsT
Pumuckel|pumucke@mst.eder.de|555-1234567|0555-2468135|design|roteHaare
naechster|naechster@next.de|0555-0000000|000-0000000|Prod|letzter
soll in einen zweidimensionalen Hash geparst werden. Also isoliere ich erst die erste Zeile, und ermittle die keywords:
Opens the membersdb-file
open(MEMBERS,"<$membersfile") || &exit_on_error("$membersfile cannot be opened!");
my @readmembers = <MEMBERS>;
close(MEMBERS);
# entferne erste Zeile und ermittel die schluesselworte
@keynames = split /|/, shift(@readmembers);
# der letzte key hat einen Zeilenumbruch hintendran, aber nicht mehr lange....
chomp $keynames[-1];
Das funktioniert on- wie offline :-).
Als nächstes iteriere ich über @readmembers (alle Zeilen) und innerhalb jeder iteration nochmal über jeden neuen Array und orden die werte den keywords zu:
erzeugung eines 2dimensionalen hashes
foreach $readmember (@readmembers)
{
# jede Zeile hat einen Zeilenumbruch hintendran, kann ich nicht brauchen....
chomp($readmember);
# parse die zeilen in temporaeres array
my @member_line = split /|/, $readmember;
# ordne jeden wert einem key zu
for($i=0; $i<=$#member_line; $i++)
{
$members{$member_line[0]}{$keynames[$i]} = $member_line[$i];
}
}
Offline geht das alles, aber online wird der letzte wert (hier "pw") nicht an den Array angehängt. Also eine Iteration über @keywords zeigt an, das es dort "pw" gibt. Aber im großen Hash gibt es das nicht!
Woran könnte das liegen?
Bye Ed X
PS: Die Subroutine im ganzen:
sub parse_members {
# Opens the membersdb-file
open(MEMBERS,"<$membersfile") || &exit_on_error("Systemfailure or missing cofiguration:<br>There is no database file for the members or it cannot be opened!");
my @readmembers = <MEMBERS>;
close(MEMBERS);
# entferne erste Zeile und ermittel die schluesselworte
@keynames = split /|/, shift(@readmembers);
# der letzte key hat einen Zeilenumbruch hintendran, aber nicht mehr lange....
chomp $keynames[-1];
# erzeugung eines 2dimensionalen hashes
foreach $readmember (@readmembers)
{
# jede Zeile hat einen Zeilenumbruch hintendran, kann ich nicht brauchen....
chomp($readmember);
# parse die zeilen in temporaeres array
my @member_line = split /|/, $readmember;
# ordne jeden wert einem key zu
for($i=0; $i<=$#member_line; $i++)
{
$members{$member_line[0]}{$keynames[$i]} = $member_line[$i];
}
}
}