2010-04-22 13 views
6

के रूप में एलएफ या सीआरएलएफ को कैसे स्वीकार करें हमारे ग्राहक हमें इनपुट के रूप में एक सपाट फ़ाइल भेजते हैं, जिसे हम गंतव्य सिस्टम पर भेजने से पहले एक एक्सएमएल फ़ाइल लेते हैं और कनवर्ट करते हैं।बिज़टॉक फ्लैट फ़ाइल स्कीमा - लाइन डिलीमीटर

फ्लैट फ़ाइल में कई लाइनें होती हैं, प्रत्येक पंक्ति एलएफ या सीआरएलएफ द्वारा सीमित होती है।

मैं एक फ्लैट फ़ाइल स्कीमा कैसे बना सकता हूं ताकि BizTalk डेटा की प्रत्येक पंक्ति की व्याख्या कर सके चाहे इस बात को एलएफ (0x0A) या CRLF (0x0D 0x0A) द्वारा सीमित किया गया हो या नहीं?

उत्तर

6

समस्या हल हो गई। अगर कोई और सोच रहा है तो समाधान यहां दिया गया है:

चूंकि एलएफ और सीआरएलएफ दोनों एलएफ चरित्र साझा करते हैं, इसलिए मैंने लाइन डिलीमीटर को एलएफ (0x0A) के रूप में सेट किया है। यह पूर्ण रिकॉर्ड्स निकालने के लिए सही ढंग से काम करता है (अंत में एक अतिरिक्त सीआर चरित्र होने के दुष्प्रभाव के साथ जब सीआरएलएफ डिलीमीटर होता है)।

सीआर चरित्र को अवशोषित करने या मानचित्र का उपयोग करके एक डमी क्षेत्र का उपयोग करके अतिरिक्त सीआर चरित्र से छुटकारा पा सकता है।

ध्यान दें कि चूंकि एलएफ और सीआरएलएफ डिलीमीटरों की क्रमशः अलग-अलग लंबाई (1 और 2 वर्ण) हैं, इसलिए मुझे स्कीमा में कुछ और बदलाव करना था ताकि यह सुनिश्चित किया जा सके कि दोनों सही तरीके से संभाले गए हैं।

मेरे परिदृश्य में, पार्स किए गए प्रत्येक लाइन रिकॉर्ड में 8 स्थितित्मक फ़ील्ड होते हैं, इसलिए अंत में एक अतिरिक्त सीआर चरित्र होने के परिणामस्वरूप बिज़टॉक के कारण अंतिम त्रुटि के लिए एक निश्चित लंबाई की अपेक्षा रखने वाली त्रुटि होती है जो अतिरिक्त के लिए जिम्मेदार नहीं है सीआर चरित्र समाधान 8 वें क्षेत्र की लंबाई (जो मेरे मामले में एक फिलर फ़ील्ड है) को बढ़ाकर 1 है। हालांकि, एलएफ लाइन डिलीमीटर को संभालने में सक्षम होने के लिए, सुनिश्चित करें कि आप 'प्रारंभिक समाप्ति की अनुमति दें' सेट करें सही करने के लिए ध्वज। इस प्रकार कोई त्रुटि नहीं फेंक दी जाती है यदि अंतिम फ़ील्ड अपनी निर्दिष्ट लंबाई की 1 वर्ण कम है (यदि सीआर चरित्र शामिल नहीं था)।

+0

क्या इसका मतलब यह नहीं होगा कि आप विकृत रिकॉर्ड भी स्वीकार करेंगे? –

4

अगर मुझे प्रश्न गलत समझा जाता है तो मुझे माफ़ कर दो ... ऐसा लगता है जैसे प्रत्येक पंक्ति एक रिकॉर्ड है, लेकिन कुछ लाइनें सीएफएलएफ में एलएफ और अन्य में समाप्त होती हैं, और आपको एक ही स्तर पर एक डिलीमीटर के रूप में दोनों की आवश्यकता होती है?

मुझे फ्लैट फ़ाइल स्कीमा के साथ एक से अधिक बच्चे डिलीमीटर निर्दिष्ट करने का कोई तरीका नहीं पता है, लेकिन एक संभावित समाधान आपके पाइपलाइन को बदलने के लिए पाइपलाइन के डीकोड चरण के लिए एक कस्टम पाइपलाइन घटक लिखना हो सकता है एलएफएस के साथ सीआरएलएफ, फिर फ्लैट फ़ाइल स्कीमा पर डीएफमीटर के रूप में एलएफ का उपयोग करें।

+0

धन्यवाद BiztalkMama। आपका उत्तर निश्चित रूप से एक विकल्प है, लेकिन मैं एक कस्टम डिकोड घटक के बजाय स्कीमा संपादक का उपयोग करके ऐसा करने का एक तरीका चाहता था। सौभाग्य से, मैंने पाया कि यह सब के बाद संभव है। हालांकि मैं आपकी मदद की सराहना करता हूं। – FullOfQuestions

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