Thread Rückgabe mehrerer Hashes geht nicht (22 answers)
Opened by SchaubFD at 2008-02-13 09:24

Dubu
 2008-02-16 16:16
#105981 #105981
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@SchaubFD: Dein Parsen der CSV-Datei ist nicht sehr robust. Was ist, wenn ein Feld ein ';' enthält? Oder eingebettete Zeilenumbrüche? Nimm lieber Text::CSV bzw. Text::CSV_XS dafür.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use Text::CSV_XS;    # die schnellere Variante, auf C-Code basierend

sub lese_email {
my ($datei) = @_;
my @email;

my $csv = Text::CSV_XS->new ({
sep_char => ';', # Feldtrenner ist Semikolon
binary => 1, # auch Nicht-ASCII-Zeichen erlauben, z.B. Umlaute, UTF-8
});

open my $datei_fh, "<", $datei or die "Kann $datei nicht oeffnen: $!";

$csv->getline($datei_fh); # Kopfzeile parsen, aber nicht speichern
while (my $zeile = $csv->getline($datei_fh)) {
my %zeilenhash;
# Hash fuellen ueber Hash-Slice:
@zeilenhash{ qw/kostenstelle kostenstellenname kostentraeger
kostentraegername konto kontoname email name/ } = @$zeile;
push @email, \%zeilenhash;
}
close $datei_fh;
return @email;
}

(ungetestet)

Und wo du schon von Datenbanken sprichst: Mit DBD::CSV kann man auch eine CSV-Datei wie eine Datenbank ansprechen und mit SQL-Befehlen bearbeiten. :-)

View full thread Rückgabe mehrerer Hashes geht nicht