2009-03-02 14 views
36

पहली बार रूबी प्रोग्रामर से बहुत आसान सवाल।रूबी में एक मल्टीलाइन स्ट्रिंग के माध्यम से आप कैसे लूप करते हैं?

रूबी में टेक्स्ट के स्लैब के माध्यम से आप कैसे लूप करते हैं? हर बार एक नई लाइन पूरी हो जाती है, मैं भीतरी-लूप को फिर से शुरू करना चाहता हूं।

def parse(input) 
    ... 
end 

उत्तर

84

String#each_line

str.each_line do |line| 
    #do something with line 
end 
+3

आप राक्षस! इसे प्यार करें –

19

क्या Iraimbilanja कहा।

या आप नई लाइनों पर स्ट्रिंग विभाजित किया जा सकता है: split उन्हें खाती

str.split(/\r?\n|\r/).each { |line| … } 

खबरदार कि each_line, लाइन फ़ीड वर्ण रहता है।

ध्यान दें कि यहां उपयोग किए गए रेगेक्स में सभी तीन पंक्ति समाप्ति प्रारूपों का ख्याल रखा जाएगा। String#each_line वैकल्पिक तर्क sep_string द्वारा लाइनों को अलग करता है, जो $/ पर डिफ़ॉल्ट है, जो स्वयं ही "\n" पर डिफ़ॉल्ट रूप से डिफ़ॉल्ट है।

आखिरकार, यदि आप अधिक जटिल स्ट्रिंग पार्सिंग करना चाहते हैं, तो अंतर्निहित स्ट्रिंगस्केनर क्लास देखें।

3

आप किसी भी पैटर्न के साथ साथ कर सकते हैं:

str.scan(/\w+/) do |w| 
    #do something 
end 
-2
str.each_line.chomp do |line| 
    # do something with a clean line without line feed characters 
end 

मुझे लगता है कि इस नई-पंक्तियों का ध्यान रखना चाहिए।

+1

यह काम नहीं करेगा। एक ब्लॉक के बिना स्ट्रिंग # प्रत्येक_लाइन एक गणनाकर्ता लौटाता है, जो chomp का जवाब नहीं देता है। चॉम्प से परे एक ब्लॉक नहीं लेता है। – Chuck

+1

कुछ 'str.each_line.map (&: chomp) .each do | line | ...' ऐसा कुछ करेगा, लेकिन आप इसे 'प्रत्येक_लाइन' पुनरावृत्ति में एक ही पास के रूप में भी कर सकते हैं। – jwadsack

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