use strict; use warnings; #... # ich hoffe du öffnest Dateien der Art: open(my $fh, '<:encoding(UTF-8)', $file) or die("Err $file $!"); #... # Matrix der gelesenen Daten my @record; while ($line=<$fh>) { my @fields=parse_csv1($line); push( @record,\@fields ); } print $record[2][1]."\n";#nur der text buchungstage jedes "wort" jede zahl einzel mit index anzusprechen. close($fh); sub parse_csv1 { my $line = shift; my @fields; # falls die Zeile noch Daten enthält while(length($line)) { # sich durch den String hangeln # eine CSV-Zeile beginnt mit # einem Quotezeichen ' " ' # oder einem zeichen dfas nicht ',' ist if($line=~s/^\s*"//s) { # wir befinden uns innerhalb eines Quotes # es wird solange gelesen bis wir auf ein einzelnes ' " ' stoßen: my $value=''; while($line=~s/^([^"]*)"//s) { $value.=$1; if($line=~s/^"//s) { # ' "" ' gefunden, immer noch innerhalb des Quotes $value.='"'; } else { # einzelnes ' " ' gefunden, Quote verlassen last; } } # gelesene Spalte in das Array push(@fields,$value); # mögliches Komma entfernen: $line=~s/^\s*,//s; } elsif($line=~s/^\s*([^,]+)\s*//s) { # wir haben eine Spalte gelesen push(@fields,$1); # ein mögliches ',' entfernen $line=~s/^\s*,//s; } else { die(qq(Zeile "$line" nicht parsen!\n)); } # mögliches Zeilenende entfernen: $line=~s/^\s+//s; } #Array zurück geben return (@fields); }