2009-10-09 5 views
5

क्या एरलंग में पर्ल के """ के बराबर है?एरलांग में स्ट्रिंग डिलीमिटिंग

मैं प्रत्येक एक से बचने के बिना डबल-कोट्स से भरा एक सुंदर लंबी स्ट्रिंग को परिभाषित करने में सक्षम होना चाहता हूं। क्या यह संभव है?

मुझे यह बताने में संकोच न करें कि मैं गलत कर रहा हूं

धन्यवाद!

+1

बचाना संभवतः सुरक्षित है, यदि आपके बाद आने वाले प्रोग्रामर के लिए समझना आसान नहीं होगा, तो इसके अलावा किसी अन्य कारण से नहीं। –

उत्तर

3

सं

वहाँ मूलतः यह ऐसा करने का कोई दूसरा रास्ता नहीं है। यहां प्रस्तुत सुझाव काम करते हैं लेकिन सीधे आगे के समाधान की तुलना में अधिक जटिल लगते हैं, और कम स्पष्ट होते हैं।

+0

धन्यवाद। मुझे यह मानना ​​है कि अब तक सभी समाधान चीजों को और जटिल बनाते हैं। –

1

मेरा मानना ​​है कि आपकी बहु-पंक्ति डबलक्वॉट-पूर्ण स्ट्रिंग को एक अलग फ़ाइल में रखना है, और उसके बाद इसे नई फ़ाइल के साथ पढ़ना है: read_line, अपने ऐप के बूट-अप पर लाइनों को जोड़ना।

या यदि आप एक über-mess करना चाहते हैं, तो आप इसे पार्स-ट्रांसफॉर्म के साथ जोड़ सकते हैं। आप अपनी स्ट्रिंग को स्रोत कोड में रख सकते हैं, टिप्पणी की और जब पार्स ट्रांसफॉर्म लागू किया जाता है, तो आप स्रोत फ़ाइल खोलते हैं, टिप्पणियों से टेक्स्ट को पढ़ते हैं, संयोजित करते हैं और प्रतिस्थापित करते हैं। उदाहरण:

... 
Len = erlang:length("MY_FAKE_STRING_13"), 
%% This is my "double-qouted" 
%% "multi-line" string; 
%% you know what I mean ;) 

... 

अपने पार्स ट्रांसफॉर्म में आप MY_FAKE_STRING से शुरू होने वाली तारों की तलाश करते हैं। जब आप एक पाते हैं, तो आप अपने मॉड्यूल के स्रोत कोड को खोलते हैं, और जब तक आप एक ही स्ट्रिंग तक नहीं पहुंच जाते तब तक लाइन को पढ़ते हैं। फिर टिप्पणियों के आने तक अपने स्रोत लाइन-दर-रेखा को पढ़ें, और उन्हें संयोजित करें। पहली खाली (या गैर-टिप्पणी) रेखा तक पहुंचने के बाद, आपके पास स्ट्रिंग है, जिसे आप नकली स्ट्रिंग के बजाय वापस कर सकते हैं।

+1

कृपया, इसके लिए पार्स ट्रांसफॉर्म का उपयोग न करें। कोड को पूरी तरह से अपठनीय बनाने के अलावा वे भी बनाने के लिए बहुत ही तुच्छ हैं। इस मामले में बाहरी टेक्स्ट फ़ाइलों का उपयोग करने के लिए यह दस गुना अधिक समझ में आता है। –

+0

मैं सहमत हूं, लेकिन बाहरी फ़ाइल का नकारात्मक पक्ष यह है कि फ़ाइल को केवल एक बार पढ़ने के लिए आपको अपने कोड को संशोधित करने की आवश्यकता है। उदाहरण के लिए httpd_utils: reason_phrase() को बाहरी फ़ाइलों का उपयोग करने के लिए पुनः लिखने का प्रयास करें। कोड अपग्रेड भी गैर-तुच्छ हो जाता है, क्योंकि यदि आप पाठ को बदलना चाहते हैं, तो आपको बाह्य फ़ाइल को फिर से पढ़ने की आवश्यकता है। – Zed

+0

यह समाधान बहुत जटिल है। – Christian

3

कैसे इस बारे में:

1> atom_to_list('He said "hello" and then she answered "hi".'). 
"He said \"hello\" and then she answered \"hi\"." 

आप सुधार पठनीयता के लिए atom_to_list संक्षिप्त मैक्रो निर्धारित कर सकते हैं।

+1

यह बाहरी फ़ाइल समाधान के समान ही नकारात्मक है। आप या तो एक बार रूपांतरण करने के लिए अपना कोड संशोधित करते हैं (जब तक निरंतर परमाणु-सूची रूपांतरण स्वीकार्य नहीं होता)। आपकी स्ट्रिंग में न्यूलाइन वर्ण ओएस पर निर्भर हो जाते हैं, इसलिए आपको एक दूसरे से बात करने वाले विभिन्न ओएस पर चल रहे एरलांग्स के साथ समस्याएं आ सकती हैं। – Zed

2

प्रथम में अपने पाठ को बचाने मैं कहना है कि इस तरह के स्ट्रिंग उद्धरण होने Erlang के भविष्य के संस्करणों के लिए एक बुरा विचार नहीं है चाहते हैं। लेकिन मैं इसके आने के लिए अपनी सांस नहीं पकड़ रहा हूं। पायथन उनके "अच्छा नहीं" बहु-रेखा दस्तावेज़-स्ट्रिंग के रूप में अच्छा उपयोग करता है।

यदि मैं उद्धरण और बैकस्लाश से बचने की आवश्यकता से पर्याप्त नाराज था, तो मैं अपने संपादक में एक परिवर्तनशील मैक्रो को वर्तमान पाठ चयन पर मेरे लिए करने के लिए काम करने में देखता हूं। या हो सकता है कि इसे सिर्फ 'repxp' के साथ लागू करने के लिए इसे regexp के साथ कार्यान्वित करें। :)

$ echo 'Testing a "robust" way to \quote\ things.' | sed -e 's/[\\"]/\\&/g' 
Testing a \"robust\" way to \\quote\\ things.