2013-01-09 27 views
5

Tôi đang sử dụng mô-đun Text::CSV để phân tích các dòng thành các trường khác nhau từ tệp giá trị được phân tách bằng tab.Phân tích các trường có ký tự đặc biệt bằng cách sử dụng Văn bản Perl :: CSV

Ví dụ về các ký tự đặc biệt trong chuỗi là

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

Mã của tôi diễn ra như dưới đây:

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; 

Trên đây là một số trong những phần quan trọng của mã của tôi. Các lỗi tôi nhận được là như sau:

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

Quan trọng Lưu ý: Các hành vi mặc định là chỉ chấp nhận ký tự ASCII. Điều này có nghĩa là các trường không thể chứa các dòng mới. Nếu dữ liệu của bạn chứa các dòng mới được nhúng trong các trường hoặc các ký tự trên 0x7e (dấu ngã) hoặc dữ liệu nhị phân, bạn * phải * đặt nhị phân => 1 trong lệnh gọi hàm new(). Để bao gồm phạm vi tùy chọn phân tích rộng nhất, bạn sẽ luôn muốn đặt nhị phân. – alex

Trả lời

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

Không thể cảm ơn đủ cho câu trả lời này! –

Các vấn đề liên quan