एक तार को विभाजित करना स्ट्रिंग डेटा में हेरफेर करने का केवल एक तरीका है। आप स्ट्रिंग के एक भाग को दूसरे स्ट्रिंग से बदलने के लिए प्रतिस्थापन भी कर सकते हैं। उदाहरण के लिए, एक उदाहरण स्ट्रिंग (फू, बार, बाज) में "फू" को "बू" से बदलने के लिए "बू, बार, बाज" मिलेगा। आप ऐसा कर सकते हैं और कई और चीजों का उपयोग कर सकते हैं विषय तथा gsub स्ट्रिंग कक्षा में विधि।
रूबी प्रतिस्थापन के लिए कई विकल्प
प्रतिस्थापन विधियाँ दो किस्मों में आती हैं। विषय विधि दो का सबसे बुनियादी है और कम से कम आश्चर्य के साथ आता है। यह केवल प्रतिस्थापन के साथ निर्दिष्ट पैटर्न के पहले उदाहरण को प्रतिस्थापित करता है।
जहाँ तक विषय केवल पहले उदाहरण की जगह लेता है, gsub विधि प्रतिस्थापन के हर उदाहरण को प्रतिस्थापन के साथ बदल देती है। इसके अलावा, दोनों विषय तथा gsub है विषय! तथा gsub! समकक्षों। याद रखें, तरीकों में माणिक विस्मयादिबोधक बिंदु के अंत में संशोधित प्रति वापस करने के बजाय परिवर्तनशील जगह में परिवर्तन करें।
खोजें और बदलें
प्रतिस्थापन विधियों का सबसे बुनियादी उपयोग एक स्थैतिक प्रतिस्थापन स्ट्रिंग के साथ एक स्थिर खोज स्ट्रिंग को बदलने के लिए है। उपरोक्त उदाहरण में, "फू" को "बू" से बदल दिया गया था। यह स्ट्रिंग में "फू" की पहली घटना के लिए किया जा सकता है
विषय विधि या "फू" के सभी घटनाओं के साथ का उपयोग कर gsub तरीका।#! / usr / bin / env माणिक
a = "फू, बार, बाज"
b = a.sub ("फू", "बू")
डालता है
$ ./1.rb
फू, बार, बाज
gsub $ ./1.rb
बू, बार, बाज
लचीली खोज
स्थैतिक तारों की खोज केवल इतनी दूर जा सकती है। आखिरकार, आप उन मामलों में भाग लेंगे जहाँ एक सबसेट है तार या वैकल्पिक घटकों के साथ तार का मिलान करना होगा। प्रतिस्थापन विधियाँ, निश्चित रूप से, स्थैतिक तारों के बजाय नियमित अभिव्यक्तियों से मेल खा सकती हैं। यह उन्हें और अधिक लचीला होने की अनुमति देता है और वस्तुतः किसी भी पाठ का मिलान कर सकता है जिसे आप सपना देख सकते हैं।
यह उदाहरण थोड़ा और वास्तविक दुनिया है। अल्पविराम से अलग किए गए मूल्यों के एक सेट की कल्पना करें। इन मूल्यों को एक सारणीयन कार्यक्रम में खिलाया जाता है, जिस पर आपका कोई नियंत्रण नहीं है (बंद है स्रोत). प्रोग्राम जो इन मानों को उत्पन्न करता है, वह बंद स्रोत भी है, लेकिन यह कुछ बुरी तरह से स्वरूपित डेटा को आउटपुट कर रहा है। कुछ क्षेत्रों में अल्पविराम के बाद रिक्त स्थान होते हैं और इससे सारणीबद्ध कार्यक्रम टूट जाता है।
एक संभव समाधान दो कार्यक्रमों के बीच "गोंद," या एक फिल्टर के रूप में कार्य करने के लिए रूबी कार्यक्रम लिखना है। यह रूबी कार्यक्रम डेटा स्वरूपण में किसी भी समस्या को ठीक करेगा ताकि सारणीकर्ता अपना काम कर सके। ऐसा करने के लिए, यह काफी सरल है: केवल अल्पविराम के साथ कई रिक्त स्थान के बाद अल्पविराम बदलें।
#! / usr / bin / env माणिक
STDIN.each करते हैं | एल |
l.gsub! (/, + /, ",")
डालता है
समाप्त
gsub $ बिल्ली data.txt
10, 20, 30
12.8, 10.4,11
gsub $ बिल्ली data.txt | ./2.rb
10,20,30
12.8,10.4,11
लचीला प्रतिस्थापन
अब इस स्थिति की कल्पना करें। मामूली स्वरूपण के अलावा त्रुटियोंप्रोग्राम, जो डेटा का उत्पादन करता है, वैज्ञानिक संकेतन में संख्या डेटा का उत्पादन करता है। टैबुलेटर प्रोग्राम इसे समझ नहीं पाता है, इसलिए आपको इसे बदलना होगा। जाहिर है, एक साधारण gsub यहां नहीं करेगा क्योंकि प्रतिस्थापन हर बार किए जाने वाले प्रतिस्थापन से अलग होगा।
सौभाग्य से, प्रतिस्थापन विधियां प्रतिस्थापन तर्क के लिए एक ब्लॉक ले सकती हैं। प्रत्येक बार खोज स्ट्रिंग मिल जाने पर, खोज स्ट्रिंग (या regex) से मेल खाने वाला पाठ इस ब्लॉक में पास हो जाता है। ब्लॉक द्वारा उत्पादित मूल्य को प्रतिस्थापन स्ट्रिंग के रूप में उपयोग किया जाता है। इस उदाहरण में, वैज्ञानिक संकेतन रूप में एक अस्थायी बिंदु संख्या (जैसे कि 1.232e4) दशमलव बिंदु के साथ एक सामान्य संख्या में परिवर्तित हो जाता है। स्ट्रिंग को एक संख्या के साथ परिवर्तित किया जाता है to_f, तब एक प्रारूप स्ट्रिंग का उपयोग करके संख्या को स्वरूपित किया जाता है।
#! / usr / bin / env माणिक
STDIN.each करते हैं | एल |
l.gsub! ((/-?dd+\.\d+e-?\d+/) do - n
"% .3f"% n.to_f
समाप्त
l.gsub! (/, + /, ",")
डालता है
समाप्त
gsub $ कैट फ़्लोटडाटा.टैक्स
२.२१५ ई -1, ५४, ११
3.15668e6, 21, 7
gsub $ कैट फ्लोटडाटा। txt | ./3.rb
0.222,54,11
3156680.000,21,7
नियमित अभिव्यक्तियों से परिचित नहीं हैं?
आइए एक कदम पीछे लें और उस पर गौर करें नियमित अभिव्यक्ति. यह गुप्त और जटिल लगता है, लेकिन यह बहुत सरल है। यदि आप नियमित अभिव्यक्तियों से परिचित नहीं हैं, तो वे काफी गूढ़ हो सकते हैं। हालाँकि, एक बार जब आप उनसे परिचित हो जाते हैं, तो वे पाठ का वर्णन करने के लिए सरल और प्राकृतिक तरीके हैं। कई तत्व हैं, और कई तत्वों में क्वांटिफायर हैं।
प्राथमिक तत्व यहाँ है \ घ चरित्र वर्ग। यह 9 के माध्यम से किसी भी अंक, वर्ण 0 से मेल खाएगा। क्वांटिफ़ायर + का उपयोग अंक चरित्र वर्ग के साथ किया जाता है ताकि यह इंगित किया जा सके कि इनमें से एक या अधिक अंकों को एक पंक्ति में मिलान किया जाना चाहिए। आपके पास अंकों के तीन समूह हैं, दो को "."और पत्र द्वारा अलग किए गए दूसरे"इ”(प्रतिपादक के लिए)।
चारों ओर तैरता दूसरा तत्व माइनस वर्ण है, जो "का उपयोग करता है"?"मात्रात्मक। इसका मतलब है इन तत्वों का "शून्य या एक"। तो, संक्षेप में, संख्या या प्रतिपादक की शुरुआत में नकारात्मक संकेत हो सकते हैं या नहीं हो सकते हैं।
दो अन्य तत्व हैं. (अवधि) चरित्र और इ चरित्र। इस सब को मिलाएं, और आपको एक नियमित अभिव्यक्ति मिलती है (या मिलान पाठ के लिए नियमों का सेट) जो वैज्ञानिक रूप में संख्याओं से मेल खाती है (जैसे कि 12.34e56).