2010-02-23 10 views
12

के साथ काम नहीं कर रहा है मैं PHP द्वारा उपयोगकर्ता द्वारा अपलोड की गई CSV फ़ाइलों को पार्स करने का प्रयास कर रहा हूं, लेकिन यह ठीक से काम नहीं कर रहा है।उद्धरण के बिना सीएसवी fgetcsv

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

मेरा प्रश्न है; मैं इन अनुचित रूप से स्वरूपित सीएसवी कैसे पढ़ूं?

अद्यतन: कारण मिला है!

यह एक्सेल के मैक संस्करण के लिए विशिष्ट है। मैक पर लाइन ब्रेक को कुछ मनमाना कारणों से अलग तरीके से संभाला जाता है, इसलिए fgetcsv का उपयोग करने से पहले, आपको यह करना चाहिए;

ini_set('auto_detect_line_endings',TRUE); 
+0

क्या आप हमें अपना कोड दिखा सकते हैं और हमें बता सकते हैं कि समस्या क्या है? हम स्वरूपण के बावजूद, fgetcsv() को बिना किसी समस्या के उपयोग करते हैं। – jasonbar

+0

इस दोस्त के लिए धन्यवाद !! जीवन बचतकर्ता –

उत्तर

22

यह एक्सेल के मैक संस्करण के लिए विशिष्ट है। मैक पर लाइन ब्रेक को कुछ मनमाना कारणों से अलग तरीके से संभाला जाता है, इसलिए fgetcsv का उपयोग करने से पहले, आपको यह करना चाहिए;

ini_set('auto_detect_line_endings',TRUE); 
+0

धन्यवाद! अच्छी तरह से काम। – tbradley22

+0

फ्रीकिंग। बहुत बढ़िया। का पता लगाएं। – Stegrex

1

manual page of fgetcsv को देखते हुए, अपने प्रोटोटाइप इस तरह दिखता है:

array fgetcsv (resource $handle [, int $length 
    [, string $delimiter = ',' [, string $enclosure = '"' 
    [, string $escape = '\\' ]]]]) 

$enclosure(अर्थात 4 पैरामीटर) के लिए डिफ़ॉल्ट मान है एक दोहरे-उद्धरण।

क्या होगा यदि आप यह निर्दिष्ट करने का प्रयास करते हैं कि आप किसी भी घेरे को नहीं चाहते हैं, तो उस चौथे पैरामीटर के लिए खाली स्ट्रिंग निर्दिष्ट करें?

(बेशक, यह अब जो काम कर रहा है उसे तोड़ सकता है - जिसका मतलब है कि आपको दो अलग-अलग मामलों से निपटना होगा: डबल-कोट्स में संलग्न फ़ील्ड वाली फाइलें, और फाइलें जिन्हें पहले द्वारा पढ़ा नहीं जा सका मामला)

+0

हाँ, मैंने देखा। लेकिन, जैसा कि आपने कहा था, यह वर्तमान में काम करता है जो टूटता है। क्या यह जांचने का कोई आसान तरीका नहीं है कि यह किस प्रारूप में संग्रहीत है और व्यवहार को उचित रूप से स्विच करता है? –

+0

मुझे लगता है कि कुछ रेगेक्स आपको यह निर्धारित करने की अनुमति देगा कि फ़ाइल किस प्रारूप में है ;; एक और समाधान हमेशा पहले * (सबसे लगातार मामले) * समाधान का प्रयास करना होगा, और, यदि यह काम नहीं करता है, तो दूसरा प्रयास करें ;; आपकी फ़ाइल की सभी पंक्तियों पर विचार करने के लिए शायद उसी तरह बनाया गया है, केवल पहली पंक्ति के लिए परीक्षण करना पर्याप्त होना चाहिए - जिसका अर्थ है कि आप केवल 'fgetcsv'' को 1 "बेकार" कॉल करेंगे। –

+0

मैंने कोशिश की, यह पता चला है कि खाली बाड़े काम नहीं करते हैं ... –

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