रूबी में एक टैब-सीमांकित फ़ाइल को पार्स करने का सबसे अच्छा (सबसे प्रभावी) तरीका क्या है?रूबी में एक टैब-सीमांकित फ़ाइल का विश्लेषण करने का सबसे अच्छा तरीका क्या है?
उत्तर
रूबी सीएसवी लाइब्रेरी आपको फील्ड डेलीमीटर निर्दिष्ट करने देता है। रूबी 1.9 FasterCSV का उपयोग करता है। ऐसा कुछ काम करेगा:
require "csv"
parsed_file = CSV.read("path-to-file.csv", { :col_sep => "\t" })
टीएसवी के नियम वास्तव में सीएसवी से थोड़ा अलग हैं। मुख्य अंतर यह है कि सीएसवी के पास एक क्षेत्र के अंदर एक अल्पविराम चिपकाने के लिए प्रावधान हैं और फिर उद्धरण वर्णों का उपयोग करके और क्षेत्र के अंदर उद्धरण से बचने के प्रावधान हैं। मैं एक त्वरित उदाहरण लिखा था कि कैसे सरल प्रतिक्रिया में विफल रहता है को दिखाने के लिए:
require 'csv'
line = 'boogie\ttime\tis "now"'
begin
line = CSV.parse_line(line, col_sep: "\t")
puts "parsed correctly"
rescue CSV::MalformedCSVError
puts "failed to parse line"
end
begin
line = CSV.parse_line(line, col_sep: "\t", quote_char: "Ƃ")
puts "parsed correctly with random quote char"
rescue CSV::MalformedCSVError
puts "failed to parse line with random quote char"
end
#Output:
# failed to parse line
# parsed correctly with random quote char
आप CSV लाइब्रेरी का उपयोग करने के लिए आप एक यादृच्छिक उद्धरण कैरेक्टर है कि आप देखने की उम्मीद नहीं है इस्तेमाल किया जा सकता था चाहते हैं यदि आपकी फ़ाइल (उदाहरण से पता चलता है यह), लेकिन आप फ़ील्ड कोटेशन के बारे में चिंता किए बिना समान प्रभाव प्राप्त करने के लिए नीचे दिखाए गए स्ट्रिक्ट्सवी वर्ग की तरह एक सरल पद्धति का भी उपयोग कर सकते हैं।
# The main parse method is mostly borrowed from a tweet by @JEG2
class StrictTsv
attr_reader :filepath
def initialize(filepath)
@filepath = filepath
end
def parse
open(filepath) do |f|
headers = f.gets.strip.split("\t")
f.each do |line|
fields = Hash[headers.zip(line.split("\t"))]
yield fields
end
end
end
end
# Example Usage
tsv = Vendor::StrictTsv.new("your_file.tsv")
tsv.parse do |row|
puts row['named field']
end
सीएसवी पुस्तकालय या अधिक सख्त कुछ का उपयोग करने का विकल्प सिर्फ जो आप फ़ाइल भेज रहा है पर निर्भर करता है और वे सख्त TSV मानक का पालन करने की उम्मीद कर रहे हैं या नहीं।
TSV मानक के बारे में विवरण http://en.wikipedia.org/wiki/Tab-separated_values
कृपया उत्तर के साथ कोड स्निपेट, बाहरी * में * नहीं * शामिल करें। वह जिस्ट अब नीचे प्रतीत होता है, जो एक वास्तविक शर्म की बात है। –
@ जेज़ेन थॉमस सिर के लिए धन्यवाद। मैंने – mmmries
महान उत्तर को देखने के मुद्दे को ठीक करने के लिए सभी कोड नमूने इनलाइन खींचा। । मुझे आश्चर्य है कि सीएसवी पार्सर के साथ कितना भयंकर \ \' विफल रहता है। – dps
में पाया जा सकता मैं mmmries जवाब पसंद है। हालांकि, मुझे इस तरह से नफरत है कि रूबी एक विभाजन के अंत से किसी खाली मूल्य को बंद कर देता है। यह लाइनों के अंत में नई लाइन को अलग नहीं कर रहा है, या तो।
इसके अलावा, मेरे पास एक फ़ील्ड के भीतर संभावित न्यूलाइन वाली एक फ़ाइल थी। तो, मैं अपने 'पार्स' दुबारा लिखा इस प्रकार है:
def parse
open(filepath) do |f|
headers = f.gets.strip.split("\t")
f.each do |line|
myline=line
while myline.scan(/\t/).count != headers.count-1
myline+=f.gets
end
fields = Hash[headers.zip(myline.chomp.split("\t",headers.count))]
yield fields
end
end
end
इस डेटा की एक पूरी लाइन को पाने के लिए आवश्यक के रूप में किसी भी लाइनों संयोजित करता, और हमेशा (अंत में संभावित शून्य प्रविष्टियों के बिना) डेटा का पूरा सेट देता है।
- 1. रूबी में एक वेब पेज का विश्लेषण करने का सबसे अच्छा तरीका क्या है?
- 2. क्यूटी में एचटीएमएल का विश्लेषण करने का सबसे अच्छा तरीका?
- 3. डोमेन निकालने के लिए URL का विश्लेषण करने का सबसे अच्छा तरीका क्या है?
- 4. PHP में पेपैल एनवीपी का विश्लेषण करने का सबसे अच्छा तरीका क्या है?
- 5. आईफोन एप्लिकेशन के लिए आरएसएस/एटम फीड्स का विश्लेषण करने का सबसे अच्छा तरीका क्या है?
- 6. एक बीन शुरू करने का सबसे अच्छा तरीका क्या है?
- 7. माइक्रोसॉफ्ट ऑफिस और पीडीएफ दस्तावेज़ों का विश्लेषण करने का सबसे अच्छा तरीका क्या है?
- 8. तारों को पार्स करने का सबसे अच्छा तरीका क्या है?
- 9. रूबी पर रूबी में खाली अस्थायी निर्देशिका प्राप्त करने का सबसे अच्छा तरीका क्या है?
- 10. फ्लोट पार्स करने का सबसे अच्छा तरीका?
- 11. RedirectToAction का परीक्षण करने का सबसे अच्छा तरीका क्या है?
- 12. रूबी में एक यूआरएल हैश करने का सबसे अच्छा तरीका क्या है?
- 13. सेलेनियम में पुनर्निर्देशन करने का सबसे अच्छा तरीका क्या है?
- 14. क्लोजर में जीयूआई करने का सबसे अच्छा तरीका क्या है?
- 15. PHP में फ़ाइल को शामिल करने का सबसे अच्छा तरीका?
- 16. बैश में कमांड लाइन का विश्लेषण करने का सबसे अच्छा तरीका है?
- 17. लॉगिंग करने का सबसे अच्छा तरीका क्या है?
- 18. रूबी पर रूबी से सिस्टम कार्यों को करने का सबसे अच्छा तरीका क्या है?
- 19. रूबी में फ़ाइल को लिखने का सबसे अच्छा तरीका क्या है?
- 20. बैच फ़ाइल में एक सबस्ट्रिंग करने का सबसे अच्छा तरीका क्या है?
- 21. पर्ल में एक क्रॉस-प्लेटफार्म, परमाणु फ़ाइल प्रतिस्थापन करने का सबसे अच्छा तरीका क्या है?
- 22. सबसे अच्छा तरीका है रूबी में तरह
- 23. डाउनलोड शुरू करने का सबसे अच्छा तरीका?
- 24. फ़ाइल का आकार पाने का एक अच्छा तरीका क्या है?
- 25. रुझान डेटा संग्रहीत करने का सबसे अच्छा तरीका क्या है?
- 26. jQuery प्रदर्शन करने का सबसे अच्छा तरीका क्या है .change()
- 27. हस्ताक्षर ऑनलाइन कैप्चर करने का सबसे अच्छा तरीका क्या है?
- 28. तालिका को समर्पित करने का सबसे अच्छा तरीका क्या है?
- 29. सी # परियोजना आयोजित करने का सबसे अच्छा तरीका क्या है?
- 30. "टाइमर" को लागू करने का सबसे अच्छा तरीका क्या है?
सावधान रहें कि यदि कोई टैब-अलग-अलग मानों में डबल-कोट होता है तो यह दृष्टिकोण विफल हो जाएगा। दूसरे जवाब में StrictTsv सुझाव अधिक मजबूत है। –