2010-01-22 8 views
11

मैं ईडीआई के लिए नया हूं, और मेरे पास एक सवाल है।ईडीआई स्वरूपित फ़ाइलें पढ़ना

मैंने पढ़ा है कि आप आईएसए लाइन के अंतिम 3 अक्षरों को देख कर एक ईडीआई प्रारूप के बारे में आपको जो कुछ चाहिए, उसे प्राप्त कर सकते हैं। यह ठीक है अगर प्रत्येक ईडीआई लाइन अलग इकाइयों को तोड़ देती है, लेकिन मुझे पता चला है कि कई सिंगल लाइन फाइलें हैं जिनमें ब्रेक के रूप में इस्तेमाल किए गए किसी भी अक्षर के साथ। मैंने देखा है कि मैंने जो भी ईडीआई पार्स किया है, उसमें बहुत आखिरी चरित्र ब्रेक कैरेक्टर है। मैंने कुछ सौ देखा है, और इसमें कोई अपवाद नहीं मिला है। यदि मैं पहले उस चरित्र को पकड़ता हूं, और आईएसए लाइन के अंतिम 3 प्राप्त करने के लिए इसका उपयोग करता हूं, तो क्या मुझे उचित उम्मीद है कि मैं ईडीआई से डेटा पार्स कर पाऊंगा?

मुझे नहीं पता कि इससे मदद मिलती है, लेकिन सवाल में ईडीआई प्रकार 850, 875 होते हैं। मुझे यकीन नहीं है कि यह मानक है या नहीं, लेकिन यह उल्लेखनीय हो सकता है।

+1

2010 में ईडीआई? मैंने सोचा कि एक्सएमएल –

+6

के साथ काम करने के लिए थोड़ा आसान है ईडीआई से 9 0% राजस्व आ रहा है। वॉलमार्ट, लक्ष्य, खिलौने आर हम, और अन्य बड़े खुदरा विक्रेताओं का 50% हिस्सा बनाते हैं। हम ईडीआई का उपयोग नहीं करते क्योंकि हम इसे पसंद करते हैं, हम इसका इस्तेमाल करते हैं क्योंकि हमारे ग्राहक करते हैं। इनमें से किसी भी बड़े खुदरा विक्रेताओं के लिए किसी अन्य प्रारूप में बदलने के लिए समय/धन के लायक नहीं है, क्योंकि यह काम करता है। – Brandon

+1

जब मैं 9 0% राजस्व कहता हूं, मुझे उम्मीद है कि यह समझा गया था कि मेरा मतलब है कि मेरी कंपनी का राजस्व का 9 0% हिस्सा है। – Brandon

उत्तर

14

ईडी का लेनदेन प्रकार वास्तव में कोई फर्क नहीं पड़ता (850 = ऑर्डर, 875 = किराने का पीओ)। कुछ एडी पार्सर्स लिखने के बाद, यहां कुछ चीजें हैं जो मैंने पाई हैं:

आपको आईएसए (और केवल आईएसए) पर निश्चित चौड़ाई (105 वर्ण स्मृति अगर सेवा करता है) पर भरोसा करने में सक्षम होना चाहिए। पहले 105 वर्णों को तोड़ दें। उसके बाद सब कुछ और "जीएस" के पहले मौके से पहले आपका लाइन टर्मिनेटर है (यह कुछ भी हो सकता है, 0x07 - बीप शामिल करें - तो अगर आप डीबगिंग के लिए स्टडआउट करने के लिए आउटपुट कर रहे हैं तो देखें या आपके पास बीप का गुच्छा हो सकता है स्पीकर से बाहर)। आम तौर पर यह 1 या 2 वर्ण होता है, कभी-कभी यह और भी हो सकता है (यदि आपको डेटा भेजने वाला व्यक्ति किसी कारण से अतिरिक्त टर्मिनेटर जोड़ता है)। एक बार आपके पास लाइन टर्मिनेटर हो जाने पर, आप सेगमेंट (फ़ील्ड) डिलीमीटर प्राप्त कर सकते हैं। मैं आमतौर पर जीएस लाइन के 3 अक्षर खींचता हूं और इसका उपयोग करता हूं, हालांकि आईएसए लाइन के चौथे चरित्र को भी काम करना चाहिए।

यह भी पता है कि आप इसमें कई आईएसए के साथ एक फ़ाइल प्राप्त कर सकते हैं। उस स्थिति में आप लाइन या फ़ील्ड विभाजक पर भरोसा नहीं कर सकते हैं प्रत्येक आईएसए के भीतर समान है।

एक और चीज .. यह भी संभव है (फिर भी, यह सुनिश्चित नहीं है कि इसकी कल्पना) एक ईडीआई फ़ाइल के लिए एक परिवर्तनीय लंबाई आईएसए है। यह बहुत दुर्लभ है, लेकिन मुझे इसे समायोजित करना पड़ा। यदि ऐसा होता है तो आपको लाइन को अपने खेतों में पार्स करना होगा। आईएसए में अंतिम क्षेत्र केवल एक चरित्र लंबा है, इसलिए आप इससे आईएसए की वास्तविक लंबाई निर्धारित कर सकते हैं। अगर यह मैं था, तो मैं इस बारे में चिंता नहीं करता जबतक कि आप इस तरह की फाइल नहीं देखते। यह एक दुर्लभ मौका है।

जो मैंने ऊपर कहा है वह "spec" के पत्र पर नहीं हो सकता है ... यानी, मुझे यकीन नहीं है कि एक ही फ़ाइल में अलग-अलग लाइन विभाजक होने के लिए कानूनी है, लेकिन विभिन्न आईएसए में, लेकिन यह तकनीकी रूप से संभव है और मैं इसे समायोजित करता हूं क्योंकि मुझे उन तरीकों से संसाधित करना पड़ता है जो इस तरह से आते हैं। ईडी प्रोसेसर मैं डेटा के 3000 से अधिक संभावित स्रोतों के साथ दिन में 5000 फ़ाइलों के ऊपर प्रक्रियाओं का उपयोग करता हूं (इसलिए मुझे बहुत अजीब चीजें दिखाई देती हैं)।

सादर, डॉन

+0

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

+1

या उससे सावधान रहें। मैं बहुत सारी फाइलें देखता हूं जहां लोग लाइन टर्मिनेटर के बाद एक अतिरिक्त चरित्र या दो डालते हैं ... आमतौर पर एक शून्य या दो (0x00)। मैं जो करता हूं वह फ़ाइल में लाइन टर्मिनेटर को सामान्यीकृत करता है - जो फ़ाइल टर्मिनेटर के रूप में 0x0D/0x0A के साथ फ़ाइल को फिर से लिखता है। मैं ऐसा इसलिए करता हूं क्योंकि यह पाठ संपादक में फ़ाइल को पढ़ने में आसान बनाता है। तो मैं फ़ाइल के माध्यम से जाता हूं और सुनिश्चित करता हूं कि प्रत्येक आईएसए के लिए एक मिलान आईईए है। यदि आईईए के बाद अतिरिक्त डेटा है, तो मैं आमतौर पर इसे छोड़ देता हूं। यदि आईईए के बाद डेटा आईएसएटी के साथ शुरू होता है जिसका अर्थ है कि इसका आंशिक संचरण (त्रुटि स्थिति) है। –

+0

ओह, मुझे फ़ाइल के अंत में "अंतिम पंक्ति टर्मिनेटर के बाद एक अतिरिक्त वर्ण या दो" कहना था। –

0

ईडीआई सामग्री क्षेत्रों और तत्वों से बना है।

(PHP में) यह पार्स करने के लिए, आप इसे पहले को तोड़ने के लिए खंडों में की आवश्यकता होगी, और तत्वों की तरह ऐसा है तो:

<?php 

$edi = "YOUR EDIT STRING!"; 
$segment_delimeter = "~"; 
$element_delimeter = "*"; 

//First break it into segments 
$segments = explode($segment_delimiter, $edi); 

//Now break each segment into elements 
$segs_and_elems = array(); 
foreach($segments as $segment){ 
    $segs_and_elems[] = explode(element_delimeter, $segment); 
} 

//To echo out what type of EDI this is for example: 
foreach($segs_and_elems as $seg){ 
    if($seg[0] == "GS"){ echo($seg[1]); } 
} 

?> 

आशा इस आपके लिए प्रारंभ करने में मदद करता है।

0

शीर्षलेख जानकारी के लिए निम्नलिखित जावा आपको मूलभूत जानकारी को बहुत आसान बना देगा। सी # में भी विभाजित है और कोड बहुत समान दिखता है और कोड बहुत समान दिखता है

try { 
    String sCurrentLine; 
    fileContent = new BufferedReader(new FileReader(filePathName)); 

    sCurrentLine = fileContent.readLine(); 

    // get the delimiter after ISA, if you know your field delimiter just force it. 
    // we look at lots of different senders messages so never sure what it will be. 

    delimiterElement = sCurrentLine.substring(3,1); // Grab the delimiter they are using 
    String[] splitMessage = sCurrentLine.split(delimiterElement,16); // to get the messages if everything is on one line of course 
    senderQualifier = splitMessage[5]; //who sent something we need fixed qualifier 
    senderID = splitMessage[6]; //who sent something we need fixed alias 
    ISA = splitMessage[13]; // Control number 
    testIndicator = splitMessage[15]; 
    dateStamp = splitMessage[9]; 
    timeStamp = splitMessage[10]; 

    ... do stuff with the pieces of info ... 
संबंधित मुद्दे