2013-01-09 12 views
5

मैं Text::CSV मॉड्यूल का उपयोग कर रहा हूं ताकि टैब से अलग मूल्य फ़ाइल से विभिन्न फ़ील्ड में लाइनों को पार्स किया जा सके।पर्ल टेक्स्ट का उपयोग कर विशेष वर्णों वाले फ़ील्ड को पार्सिंग :: सीएसवी

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; 

ऊपर मेरी कोड के महत्वपूर्ण भागों में से कुछ है:

तार में विशेष वर्ण के उदाहरण

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

मेरे कोड के रूप में नीचे चला जाता है कर रहे हैं। इस प्रकार त्रुटि मैं मिलता है:

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

महत्वपूर्ण नोट: डिफ़ॉल्ट व्यवहार केवल ASCII वर्ण स्वीकार करना है। इसका मतलब है कि फ़ील्ड में न्यूलाइन नहीं हो सकती है। यदि आपके डेटा में फ़ील्ड में एम्बेडेड न्यूलाइन, या 0x7e (tilde), या बाइनरी डेटा से ऊपर वर्ण हैं, तो आपको * (*) में कॉल में बाइनरी => 1 सेट करना होगा। पार्सिंग विकल्पों की विस्तृत श्रृंखला को कवर करने के लिए, आप हमेशा बाइनरी सेट करना चाहेंगे। – alex

उत्तर

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

इस उत्तर के लिए आपको धन्यवाद नहीं दे सकता! –