2011-12-29 10 views
6

मैं अपने पिता की मदद करने की कोशिश कर रहा हूं - उसने मुझे अपने काम पर एक शेड्यूलिंग एप्लिकेशन से एक निर्यात दिया। हम यह देखने की कोशिश कर रहे हैं कि क्या हम इसे एक MySQL डेटाबेस में आयात कर सकते हैं ताकि वह/सहकर्मी इसके साथ ऑनलाइन सहयोग कर सकें।एक बहुत ही व्यस्त स्थान को सीमित फ़ाइल

मैंने कई अलग-अलग तरीकों की कोशिश की है लेकिन कोई भी सही काम नहीं कर रहा है - और यह विशिष्टताओं का मेरा क्षेत्र नहीं है।

निर्यात यहां देखा जा सकता: http://roikingon.com/export.txt

कैसे इस पार्स करने के बारे में जाने के लिए पर कोई मदद/सलाह बहुत सराहना की जाएगी!

धन्यवाद !!

+0

सलाह ... अच्छा, आपको उस निर्यात के डेटा प्रारूप को जानना चाहिए। साथ ही, पते अंतरिक्ष से अलग होते हैं, और कॉलम के बीच कोई टैब नहीं होता है - ऐसा लगता है कि इसमें कुछ जानकारी स्वचालित रूप से पार्स करने की कमी नहीं है। – alxx

+2

मेरा अनुमान है: यह निश्चित चौड़ाई है और पहले 3 वर्ण रिकॉर्ड प्रकार हैं। प्रत्येक रिकॉर्ड प्रकार में एक ही प्रारूप होता है (जिसका अर्थ है कि रिकॉर्ड प्रकार 4 के साथ प्रत्येक पंक्ति में दो कॉलम होते हैं, रिकॉर्ड प्रकार 17.1 में केवल एक कॉलम होता है लेकिन ऐसा लगता है कि यह एक नया "रूट ब्लॉक" शुरू होता है)। – vstm

+2

आपके डेटा इनलाइन सहित शामिल करने के लिए खराब फॉर्म। अब लिंक मर चुका है, इसलिए आपके प्रश्न को संदर्भित करना असंभव है। या पेस्टबिन एट अल का उपयोग करें ... बस sayin .. – ftrotter

उत्तर

2

मैंने एक (कुछ हद तक गतिशील) निश्चित-कॉलम पार्सर लिखने का प्रयास किया है। एक नज़र डालें: http://codepad.org/oAiKD0e7 (यह SO के लिए बहुत लंबा है, लेकिन यह ज्यादातर "डेटा" है)।

मैं क्या देखा है

  • पाठ डेटा की तरह "hello___" (_ = अंतरिक्ष)
  • संख्यात्मक डेटा दाएँ से बाएँ "___42"
पर गद्दी के साथ गठबंधन किया है सही पर गद्दी के साथ गठबंधन छोड़ दी जाती है

    :

    तुम मेरे कोड उपयोग करना चाहते हैं वहाँ अभी तक की जाने वाली चीजें है

  • रिकॉर्ड प्रकार 12.x में चरम कॉलम गिनती है (कुछ स्थैतिक कॉलम के बाद), आपको इसके लिए एक और "हैंडलर" लागू करना होगा
  • मेरी कुछ चौड़ाई शायद सबसे गलत है। मुझे लगता है कि एक प्रणाली है (जैसे कि संख्याएं 4 वर्ण लंबी हैं और विशेष 8 मामलों के लिए पाठ 8 वर्ण हैं)। डोमेन ज्ञान वाले एक और एक से अधिक नमूना फ़ाइल कॉलम को समझ सकती है।
  • कच्चे डेटा को प्राप्त करना केवल पहला कदम है, आपको कच्चे डेटा को कुछ उपयोगी मॉडल में मैप करना होगा और उस मॉडल को डेटाबेस में लिखना होगा।
+0

हा के प्रारूप के बाद ऐसा करने में सक्षम रहा है! मैं वास्तव में एक ही काम कर रहा हूँ। मैंने इसे थोड़ा अलग किया। मैंने एक स्विच का उपयोग किया, फिर एक फ़ंक्शन के साथ एक बड़ी सरणी जो प्रति पंक्ति डेटा की एक सरणी देता है। अच्छी चीजें! – Roi

1

आप नियमित अभिव्यक्ति (शून्य या अधिक रिक्त स्थान) के साथ विभाजित का उपयोग कर सकते हैं।

मैं कोशिश करूंगा और आपको बता दूंगा।

आपके डेटा के साथ एक संरचना प्रतीत नहीं होता है।

$data = "12.1 0 1144713  751 17 Y 8 517 526 537 542 550 556 561 567          17 "; 

$arr = preg_split("/ +/", $data); 
print_r($arr); 

Array 
(
    [0] => 12.1 
    [1] => 0 
    [2] => 1144713 
    [3] => 751 
    [4] => 17 
    [5] => Y 
    [6] => 8 
    [7] => 517 
    [8] => 526 
    [9] => 537 
    [10] => 542 
    [11] => 550 
    [12] => 556 
    [13] => 561 
    [14] => 567 
    [15] => 17 
    [16] => 
) 

इस preg_split("/ +/", $data); जो शून्य या अधिक रिक्त स्थान से लाइन विभाजन की कोशिश करो, तो आप एक अच्छा सरणी है कि आप पर कार्रवाई कर सकते हैं,। लेकिन आपके डेटा को देखते हुए, कोई संरचना नहीं है, इसलिए आपको यह जानना होगा कि कौन सा सरणी तत्व डेटा के अनुरूप है।

शुभकामनाएं।

+0

अरे - यह मेरा पहला विचार था .. और लागू करने के लिए शुरू किया लेकिन फिर एहसास हुआ कि इसे "स्तंभ सीमित" माना जाता है जिसका अर्थ है कि शून्य रिकॉर्ड हो सकते हैं और ऐसा करने से यह खत्म हो जाएगा उन अभिलेख। मुझे एक पीडीएफ मिला जो कुछ हद तक समझाया गया था कि इसमें क्या चल रहा था और इसमें ... इसमें फ़ील्ड लम्बाई शामिल थी।उस क्षेत्र की लंबाई का उपयोग करके मैं substr ($ पंक्ति, $ कॉलम-स्थिति, $ फ़ील्ड-लम्बाई) – Roi

+0

का उपयोग करने में सक्षम हूं जैसे कि मैंने शुभकामनाएं दीं। इस तरह के डेटा को पार्स करना बहुत मुश्किल है। – DarthVader

1

इसे एक्सेल के साथ खोलें और इसे अल्पविराम-सीमित के रूप में सहेजें। एक के रूप में लगातार delimiters का इलाज करें, या नहीं। फिर एक्सेल के साथ एक सीएसवी के रूप में इसे बचाएं, जो अल्पविराम से अलग और mysql में आयात करना आसान होगा।

संपादित करें: जो व्यक्ति "[+]" पर preg_split का उपयोग करने के लिए कहता है वह आपको वही उत्तर दे रहा है जैसा मैंने अभी किया था।

सवाल यह है कि उसके बाद क्या करना है।

क्या आपने अभी तक निर्धारित किया है कि "पंक्ति प्रकार" कितने हैं? एक बार जब आप इसे निर्धारित कर लेते हैं और अपनी विशेषताओं को परिभाषित करते हैं तो इसके माध्यम से जाने के लिए कुछ कोड लिखना बहुत आसान होगा।

यदि आप इसे सीएसवी में सहेजते हैं, तो आप PHP fgetcsv फ़ंक्शन और संबंधित फ़ंक्शंस का उपयोग कर सकते हैं। प्रत्येक पंक्ति के लिए, आप इस प्रकार के प्रकार की जांच करेंगे और प्रकार के आधार पर संचालन करेंगे।

मैंने देखा कि आपकी डेटा पंक्तियों को संभावित रूप से विभाजित किया जा सकता है कि पहले कॉलम के डेटा में "।" तो यहां एक उदाहरण दिया गया है कि आप फ़ाइल के माध्यम से कैसे लूप कर सकते हैं।

जबकि ($ पंक्ति = fgetcsv ($ file_handle)) { (strpos ($ पंक्ति [0], '।') === गलत) { // कुछ else { करते हैं} // करना कुछ और } }

आदि

ठीक है "table में डालने", और यहाँ कुछ और अवलोकन है जैसे "टेबल table_$row[0] बनाएँ" कुछ होगा या "कुछ करना":

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

मैं भी "smuwtfa" (सप्ताह के दिन) चारों ओर छिड़काव नोटिस।

प्रत्येक पंक्ति का इलाज करने के तर्क को निर्धारित करने के लिए इस तरह के सुराग का उपयोग करें।

+1

यदि आप फ़ाइल पर नज़र डालें तो आप देखेंगे कि यह एक CSV में परिवर्तित करने का एक साधारण मामला नहीं है। उसमें निहित डेटा उससे कहीं अधिक जटिल है। इसे रिवर्स इंजीनियरिंग, पार्सिंग और फिर कई अलग-अलग तालिकाओं में आयात करने की आवश्यकता होगी। –

+0

यह भी कहना मुश्किल है कि डेटा संरचना क्या है। यदि आप वास्तव में डीकोड करने के लिए आवश्यक संरचनाओं का सारांश पोस्ट करते हैं तो यह अधिक उपयोगी होगा। –

+0

मुझे लगता है कि यह सबस्ट्रेट का उपयोग करके और प्रति अनुभाग – Roi

2

उस फ़ाइल संरचना के साथ आपको मूल रूप से रिवर्स इंजीनियरिंग की एक मालिकाना प्रारूप की आवश्यकता होती है। हां, यह स्थान सीमित है लेकिन प्रारूप सीएसवी, वाईएएमएल इत्यादि जैसे किसी भी प्रकार के मानक का पालन नहीं करता है। यह पूरी तरह स्वामित्व वाला है जो एक हेडर और अलग-अलग अनुभाग है जो स्वयं के शीर्षकों के साथ होता है।

मुझे लगता है कि आपकी सबसे अच्छी शर्त यह कोशिश करने और देखने के लिए है कि क्या एक्सेल या एक्सएमएल जैसे कुछ अन्य प्रकार के निर्यात किए जा सकते हैं और वहां से काम कर रहे हैं। यदि ऐसा नहीं है तो देखें कि क्या किसी प्रकार का एचटीएमएल आउटपुट है जिसे स्क्रीन स्क्रैप किया जा सकता है, और एक्सेल में चिपकाया जा सकता है और आपको क्या मिल रहा है।

उपरोक्त वर्णित सब कुछ के कारण फ़ाइल को अपने वर्तमान रूप में किसी मालिश में मालिश करने के लिए बहुत मुश्किल होगा जिसे समझदारी से डेटाबेस में आयात किया जा सकता है। (ध्यान दें कि फ़ाइल संरचना से कई टेबल की आवश्यकता होगी।)

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