मैं कुछ प्रसिद्ध फ़ाइल स्वरूपों के लिए एक पार्सर बनाने के लिए एक बेहतर समाधान खोजने की कोशिश कर रहा हूँ जैसे: EDIFACT और TRADOMOMS ।
यदि आप इन मानकों से परिचित नहीं हैं तो विकिपीडिया से इस उदाहरण को देखें:
उत्पाद उपलब्धता अनुरोध का उत्तर देने के लिए उपयोग किए गए EDIFACT संदेश के उदाहरण के लिए नीचे देखें: -
UNA:+.? '
UNB+IATB:1+6XPPC+LHPPC+940101:0950+1'
UNH+1+PAORES:93:1:IA'
MSG+1:45'
IFT+3+XYZCOMPANY AVAILABILITY'
ERC+A7V:1:AMD'
IFT+3+NO MORE FLIGHTS'
ODI'
TVL+240493:1000::1220+FRA+JFK+DL+400+C'
PDI++C:3+Y::3+F::1'
APD+714C:0:::6++++++6X'
TVL+240493:1740::2030+JFK+MIA+DL+081+C'
PDI++C:4'
APD+EM2:0:130::6+++++++DA'
UNT+13+1'
UNZ+1+1'
UNA सेगमेंट वैकल्पिक है। यदि मौजूद है, तो यह उन विशेष वर्णों को निर्दिष्ट करता है जिनका उपयोग शेष संदेश की व्याख्या करने के लिए किया जाना है। इस क्रम में UNA के बाद छह वर्ण हैं:
- घटक डेटा तत्व विभाजक (इस नमूने में)
- डेटा तत्व विभाजक (इस नमूने में)
- दशमलव अधिसूचना (इस नमूने में)
- रिलीज चरित्र (इस नमूने में)
- आरक्षित होना चाहिए, एक स्थान होना चाहिए
- खंड टर्मिनेटर ('इस नमूने में)
जैसा कि आप देख सकते हैं कि यह केवल कुछ विशेष रूप से पार्स किए जाने के इंतजार में प्रारूपित डेटा है (बहुत कुछ XML फ़ाइलों की तरह )।
अब मेरा सिस्टम PHP पर बनाया गया है और मैं प्रत्येक सेगमेंट के लिए नियमित एक्सप्रेशन का उपयोग करके पार्सर बनाने में सक्षम था, लेकिन समस्या यह नहीं है कि हर कोई मानक को पूरी तरह से लागू करता है।
कुछ आपूर्तिकर्ता पूरी तरह से वैकल्पिक क्षेत्रों और क्षेत्रों को अनदेखा करते हैं। अन्य लोग दूसरों की तुलना में अधिक डेटा भेजने का विकल्प चुन सकते हैं। इसलिए मुझे यह सुनिश्चित करने के लिए मजबूर किया गया था कि फ़ाइल सही थी या नहीं, परीक्षण के लिए खंडों और क्षेत्रों के लिए सत्यापनकर्ता बनाने के लिए।
आप नियमित अभिव्यक्ति की दुःस्वप्न की कल्पना कर सकते हैं जो मैं अभी कर रहा हूं। इसके अलावा, प्रत्येक आपूर्तिकर्ता को नियमित अभिव्यक्तियों के लिए कई संशोधनों की आवश्यकता होती है जो मैं प्रत्येक आपूर्तिकर्ता के लिए एक पार्सर बनाने के लिए करता हूं।
प्रशन:
1- क्या यह पार्सिंग फ़ाइलों (नियमित अभिव्यक्ति का उपयोग करके) के लिए सबसे अच्छा अभ्यास है?
2- क्या पार्सिंग फ़ाइलों के लिए एक बेहतर समाधान है (हो सकता है कि वहाँ तैयार समाधान हो)? क्या यह दिखाने में सक्षम होगा कि क्या खंड गायब है या यदि फ़ाइल दूषित है?
3- अगर मुझे अपने पार्सर का निर्माण करना है, तो मुझे किस डिज़ाइन पैटर्न या कार्यप्रणाली का उपयोग करना चाहिए?
टिप्पणियाँ:
मैंने याक और ANTLR के बारे में कहीं पढ़ा है, लेकिन मुझे नहीं पता कि वे मेरी ज़रूरतों से मेल खाते हैं या नहीं!