Es ist ratsam, einer Verarbeitung von CSV-Dateien zu widerstehen, die z.B.
so aussieht:
while (<$fh>) {
my @row = split /;/;
# ... @row verarbeiten ...
}
Denn diese Verarbeitung misslingt, wenn in den Daten
- Kolumnentrennzeichen (hier: Semikolon) oder
- Zeilentrennzeichen (unter Unix: LF) oder
- doppelte Anführungsstriche
vorkommen.
Einen sicheren Weg bietet das Modul Text::CSV_XS.
Instantiierung (das Objekt kann zum Lesen und Schreiben genutzt werden):
my $csv = Text::CSV_XS->new({
binary => 1,
sep_char => ';',
eol => "\n", # nur für's Schreiben
}) or die "FATAL: CSV instantiation failed\n";
Lesen:
while (my $row = $csv->getline($fh)) {
# ... @$row verarbeiten ...
}
Schreiben:
$csv->print($fh,\@titles);
for my $row (@rows) {
$csv->print($fh,$row);
}
Hierbei ist:
$fh - Filehandle zum Lesen bzw. Schreiben
@titles - Array von Kolumnentiteln
@rows - Array von Zeilen
$row - Zeile (= Referenz auf ein Array von Kolumnenwerten)