2013-01-09 10 views
5

Sto utilizzando il modulo Text::CSV per analizzare le righe in vari campi da un file con valori separati da tabulazioni.Analisi dei campi con caratteri speciali utilizzando Perl Testo :: CSV

Esempi di caratteri speciali nelle stringhe sono

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

Il mio codice va come di seguito:

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; 

Quanto sopra è alcune delle parti importanti del mio codice. L'errore che ottengo è il seguente:

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

Nota importante: Il comportamento predefinito è quello di accettare solo caratteri ASCII. Ciò significa che i campi non possono contenere newline. Se i tuoi dati contengono newline incorporate nei campi o caratteri sopra 0x7e (tilde) o dati binari, devi * impostare * binary => 1 nella chiamata a new(). Per coprire la più ampia gamma di opzioni di analisi, dovrai sempre impostare binario. – alex

risposta

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

Non posso ringraziarti abbastanza per questa risposta! –