Hallo!
Schau mal bei <../../sfarchiv/1999_4/t09302.htm#a46976>,
dort habe ich schonmal eine Code dafuer gepostet. Es
wird dabei die Liste @csv aufgebaut, in der jeder Eintrag
eine Hashreferenz ist. Jeder dieser Hashs hat als Key
den Feldnamen und als Wert eben den Wert.
In der Zeile
LoadCSV(@csv, "xyz.csv", '') die("Can't read that fuckin' csv file!\n")
hat der dumme Schwanzabschneider leider alle Pipe-Zeichen rausgefiltert, deshalb sieht etwas duemmlich aus.
Fuer Deinen Zweck waere der dritte Parameter von LoadCSV ohnehin ein Komma ','.
Wenn Du eine eindeutige ID fuer jeden Datensatz hast, bietet es sich an, statt der umgebenden Liste einen Hash zu verwenden, damit der Zugriff schneller wird. Bei der Liste musst Du naemlich in einer Schleife den richtigen Datensatz finden, z.B. mit
sub FindRecordByNumericFieldvalue($$) {
my ($fieldname, $value) = (shift, shift);
for (@csv) {
return $_ if ($_->{$fieldname} == $value);
}
return undef;
}
$record = FindRecordByNumericFieldvalue('id', 562);
Wuerde den Datensatz finden, der im Feld "id" den Wert 562 hat. Vorsicht, der Rueckgabewert kann undef sein. Bei Erfolg Zugriff auf die einzelnen Felder mit
$record->{'FELD2'}
Wenn Du aber statt @csv einen %csv verwendest, und als Keys jeweils schon den Wert des id-Feldes, und als Value nach wie vor eine Hashreferenz auf den den Datensatz (war das verstaendlich?), dann waere die Funktion einfach
sub FindRecordByID($) {
my $id = shift;
return $csv{$id} undef;
}
$record = FindRecordByID(562);
Aehm ja, wenn Du Fragen hast, musst Du sie stellen.
So lange, Calocybe