2012-10-03 7 views
9

मैं CSV.table के साथ कुछ परीक्षण कर रहा हूं। मेरे पास दो छोटी और लगभग समान सीएसवी फाइलें हैं, हालांकि एक में हेडर पंक्ति गुम है।रूबी 1.9.3 - CSV.table कैसे सीएसवी फ़ाइल में कोई हेडर नहीं हैं?

जब मैं हेडर पंक्ति के साथ CSV फ़ाइल के विरुद्ध CSV.table चलाता हूं, तो सब कुछ अपेक्षित काम करता है।

जब मैं शीर्ष लेख पंक्ति के बिना CSV फ़ाइल के खिलाफ इसे चलाने मैं:

NoMethodError: undefined method `encode' for nil:NilClass 

मैं विभिन्न प्रकार के डेटा के साथ इस की कोशिश की, हेडर के विभिन्न प्रकार के साथ, और एक ही परिणाम प्राप्त।

मैं CSV.table के जादू के लिए उत्सुक हूं। यदि मैं CSV.parse का उपयोग हेडर सेट पर सत्य के साथ करता हूं, तो यह हमेशा पहली पंक्ति हेडर बनता है चाहे कोई फर्क नहीं पड़ता। इसलिए, मैं यह जांचने के लिए CSV.table का उपयोग कर रहा हूं कि एक CSV फ़ाइल आयात की जा रही है या नहीं, लेकिन मैं इसके साथ बहुत सहज नहीं हूं क्योंकि मुझे समझ में नहीं आता है कि मैं इसका उपयोग कर रहा हूं या नहीं।

begin 
    CSV.table(csv_file_path) 
rescue 
    # Add error to log or something. 
end 

क्या किसी को पता है?

पीएस मैंने पहले ही इस विधि को पढ़ा है और यह प्रत्येक कोड पर प्रदान किया गया स्रोत कोड - http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

उत्तर

9

कोई जादू शामिल नहीं है, और यह सामान्य रूप से आपके लिए काम नहीं करेगा।

जैसा कि आप from the source, table देख सकते हैं सचमुच readheaders: true के साथ कॉल करता है। लेकिन यह हेडर को प्रतीकों (header_converters: :symbol) में भी परिवर्तित करता है और यह कुंजी है कि यह क्यों काम करता है।

आपको हेडर के बिना त्रुटि मिलती है क्योंकि आपके पास डेटा की पहली पंक्ति (a,b,,d,e जैसे कुछ) में रिक्त कॉलम है। खाली nil के रूप में पढ़ा जाता है, और nil को प्रतीक में परिवर्तित नहीं किया जा सकता है, यह उड़ाता है।

कुछ डेटा के साथ इसे आजमाएं जिसमें पहली पंक्ति में रिक्त स्थान नहीं है - आप देखेंगे कि table डेटा की उस पंक्ति को हेडर के रूप में अन्य तरीकों की तरह व्यवहार करेगा।

+0

धन्यवाद @ एंडी-एच मुझे एक समान स्थिति थी जब मैं 'सामग्री = CSV.open "languages.csv" चलाता हूं, हेडर: सत्य, header_converters:: प्रतीक' मुझे यह त्रुटि मिली: 'शून्य के लिए अपरिभाषित विधि 'एन्कोड' : NilClass (NoMethodError) '। यह 'header_converter:: प्रतीक' विधि के बारे में शिकायत कर रहा है। "Languages.csv" फ़ाइल की समीक्षा करने के बाद मैंने पाया कि यह हेडर एक स्पेस के साथ शुरू होता है। उस स्थान को हटाकर उस मुद्दे को हल किया गया। – egyamado

+0

** सुधार। ** मेरा मतलब था कि मुझे पहली पंक्ति '', नाम, पता, .... 'पर एक स्थान नहीं मिला था, "जब मैंने अंतरिक्ष, जैसे नाम, पता, ...." मैं अपना कोड चलाने में सक्षम था। – egyamado

संबंधित मुद्दे