2013-01-09 13 views
5

Używam modułu Text::CSV do analizowania linii w różnych polach z pliku wartości rozdzielanych tabulatorami.Analizowanie pól ze znakami specjalnymi przy użyciu tekstu Perla: CSV

Przykłady znaków specjalnych w ciągów są

"CEZARY Å?UKASZEWICZ, PAWEÅ? WIETESKA","BÜRO FÜR" 

Mój kod idzie jak poniżej:

my $file = $ARGV[0] or die "Need to get TSV file on the command line\n"; 

my $csv = Text::CSV->new({sep_char => "\t"}); 

open(my $data,'<', $file) or die "Could not open '$file' $!\n"; 


while (my $line= <$data>) { 

     if($csv->parse($line)){ 
      my @curr_arr = $csv->fields(); 

     } 
} # end of while 

close $data; 

Powyższy to niektóre z najważniejszych części mojego kodu. Błąd pojawia się następująco:

cvs_xs error : 2026 - EIQ - Binary Character inside quoted field, binary off @pos 15 
+6

Ważna uwaga: domyślne zachowanie jest do zaakceptowania tylko znaki ASCII. Oznacza to, że pola nie mogą zawierać znaków nowej linii. Jeśli twoje dane zawierają znaki nowej linii osadzone w polach lub znaki powyżej 0x7e (tyldy) lub danych binarnych, musisz * ustawić * binary => 1 w wywołaniu funkcji new(). Aby objąć najszerszy zakres opcji analizowania, zawsze będziesz chciał ustawić plik binarny. – alex

Odpowiedz

11
my $csv = Text::CSV->new({ binary => 1, sep_char => "\t"}); 
+0

Nie mogę ci wystarczająco podziękować za tę odpowiedź! –

Powiązane problemy