रूबी में, मैं सी-शैली से बचने के दृश्यों को कैसे डीकोड करूं? जैसे '\ n' एक नई लाइन में, '\ t' एक टैब पर?मैं रूबी से सी-स्टाइल एस्केप दृश्य कैसे अनदेखा कर सकता हूं?
उत्तर
ठीक है, अगर तुम eval
समाधान पसंद नहीं है, मैं एक साधारण राज्य मशीन रूबी में सरल "\ t" तार में सही ढंग से पार्स करने के लिए "\ n" और काट दिया है उसके सहित पूर्व ई, बैकस्लैश खुद को स्कैपिंग। संदेश यह है:
BACKSLASH = "\\"
def unescape_c_string(s)
state = 0
res = ''
s.each_char { |c|
case state
when 0
case c
when BACKSLASH then state = 1
else res << c
end
when 1
case c
when 'n' then res << "\n"; state = 0
when 't' then res << "\t"; state = 0
when BACKSLASH then res << BACKSLASH; state = 0
else res << BACKSLASH; res << c; state = 0
end
end
}
return res
end
यह एक आसानी से \123
की तरह, बहु चरित्र संस्थाओं सहित अधिक वर्ण, समर्थन करने के लिए बढ़ाया जा सकता है। टेस्ट इकाई साबित होता है कि यह काम करता है:
require 'test/unit'
class TestEscapeCString < Test::Unit::TestCase
def test_1
assert_equal("abc\nasd", unescape_c_string('abc\nasd'))
end
def test_2
assert_equal("abc\tasd", unescape_c_string('abc\tasd'))
end
def test_3
assert_equal("abc\\asd", unescape_c_string('abc' + BACKSLASH * 2 + 'asd'))
end
def test_4
assert_equal("abc\\nasd", unescape_c_string('abc' + BACKSLASH * 2 + 'nasd'))
end
def test_5
assert_equal("abc\\\nasd", unescape_c_string('abc' + BACKSLASH * 3 + 'nasd'))
end
def test_6
assert_equal("abc\\\\nasd", unescape_c_string('abc' + BACKSLASH * 4 + 'nasd'))
end
end
छोटा, और भी अधिक hacky और काफी खतरनाक है, eval की वजह से:
eval "\"#{string}\""
एक साधारण उदाहरण:
> a = '1\t2\n3'
> puts a
1\t2\n3
> puts eval "\"#{a}\""
1 2
3
संपादित करें: ध्यान दें कि यह वास्तव में काम नहीं करता। आपको वास्तव में एक राज्य मशीन के साथ एक उचित पार्सर बनाने की आवश्यकता है जो ट्रैक करता है कि आप बचने के अनुक्रम में हैं या नहीं।
रूबी ही भागने दृश्यों के कई का समर्थन करता है, तो आप इस तरह एक सरल अनुवाद तालिका बना सकते हैं:
T = {
'\n' => "\n",
'\t' => "\t",
'\r' => "\r"
}
और फिर उपयोग करें कि अनुवाद तालिका स्रोत स्ट्रिंग में उन दृश्यों को बदलने के लिए:
a = '1\t2\n3'
a.gsub(/#{T.keys.map(&Regexp.method(:escape)).join('|')}/, &T.method(:[]))
# => "1\t2\n3"
- 1. रूबी - एस्केप पेरेंटेसिस
- 2. मैं सेटअपtools subversion सूची को अनदेखा कैसे कर सकता हूं?
- 3. क्या मैं कक्षा को अनदेखा कर सकता हूं लेकिन बाहरी रूप से सील कर सकता हूं?
- 4. मैं बाल दृश्य नियंत्रक से अभिभावक दृश्य नियंत्रक के दृश्य को कैसे एक्सेस कर सकता हूं?
- 5. मैं रूबी के xmlrpc क्लाइंट को SSL प्रमाणपत्र त्रुटियों को अनदेखा कैसे कर सकता हूं?
- 6. मैं रूबी में अग्रणी शून्य कैसे आउटपुट कर सकता हूं?
- 7. क्या मैं वैश्विक .gitignore को अनदेखा कर सकता हूं?
- 8. मैं रूबी जेम कैसे चला सकता हूं?
- 9. क्या मैं वालिग्रिंड ग्लिब पुस्तकालयों को अनदेखा कर सकता हूं?
- 10. मैं स्प्लिंट को अनदेखा कैसे कर सकता हूं जहां मैं अपने चर घोषित करता हूं?
- 11. मैं दृश्य नियंत्रक से स्टोरीबोर्ड सेगू कैसे बना सकता हूं?
- 12. मैं उन प्लगइन को कैसे डिबग कर सकता हूं जिन्हें चुपचाप अनदेखा किया जा रहा है?
- 13. रेगेक्स एस्केप दृश्यों को अनदेखा करें सी #
- 14. मैं रेल नियंत्रक से स्पष्ट रूप से एक दृश्य कैसे घोषित कर सकता हूं?
- 15. मैं SQL प्लस से चल रहे SQL स्क्रिप्ट में एम्पर्सेंड को कैसे अनदेखा कर सकता हूं?
- 16. मैं टैग से ऑब्जेक्ट कैसे प्राप्त कर सकता हूं?
- 17. मैं एक योजनाबद्ध दृश्य कैसे बना सकता हूं जिस पर मैं आइटम रख सकता हूं, स्थानांतरित कर सकता हूं और कनेक्ट कर सकता हूं?
- 18. जब मैं किसी सूची से तत्व निकालने का प्रयास करता हूं तो मैं ValueError को कैसे अनदेखा कर सकता हूं?
- 19. मैं डेटा व्यू के भीतर से 'अंकगणित ओवरफ़्लो' से संबंधित त्रुटियों को कैसे अनदेखा कर सकता हूं?
- 20. मैं Java3D को तेज़ी से कैसे शुरू कर सकता हूं?
- 21. .hgignore का उपयोग कर एक को छोड़कर मैं सभी निर्देशिकाओं को कैसे अनदेखा कर सकता हूं?
- 22. मैं विशिष्ट दृश्य वर्ग के साथ पहले दृश्य तत्व को कैसे स्क्रॉल कर सकता हूं?
- 23. मैं couchdb दृश्य में एक और दृश्य कैसे कॉल कर सकता हूं?
- 24. क्या मैं एंड्रॉइड में एक दृश्य स्केल कर सकता हूं?
- 25. मैं टेबल को ठीक से कैसे छोटा कर सकता हूं?
- 26. रूबी पर रूबी में अनुरोधों पर क्वेरीस्ट्रिंग मानों को मैं कैसे संरक्षित कर सकता हूं?
- 27. मैं रूबी पर रूबी में एक अनुरोध कैसे प्रोफाइल कर सकता हूं?
- 28. मैं रूबी में रूबी का उपयोग करके ईसी 2 इंस्टेंस कैसे टैग कर सकता हूं?
- 29. मैं (salesOrderEntity से) शिपिंग पता पुनर्प्राप्त कैसे कर सकता हूं?
- 30. मैं Google Play से एक को संक्षिप्त दृश्य को कैसे कार्यान्वित कर सकता हूं?
हाँ, कि मेरे पास हुआ था ... लेकिन eval बुराई :-) – Simon