CSV में दोहरी बोली से ठीक से बच जाएं


164

मेरे सीएसवी में इस तरह की एक पंक्ति है:

"Samsung U600 24"","10000003409","1","10000003427"

बगल में बोली 24का उपयोग इंच को व्यक्त करने के लिए किया जाता है, जबकि उस बोली के बगल में बोली क्षेत्र को बंद कर देती है। मैं लाइन पढ़ रहा हूँ fgetcsvलेकिन पार्सर गलती करता है और मान को पढ़ता है:

Samsung U600 24",10000003409"

मैंने इंच के उद्धरण से पहले बैकस्लैश लगाने की कोशिश की, लेकिन फिर मुझे नाम में एक बैकस्लैश मिला:

Samsung U600 24\"

क्या सीएसवी में इसे ठीक से भागने का एक तरीका है, ताकि मूल्य हो Samsung U600 24", या क्या मुझे इसे प्रोसेसर में फिर से जोड़ना होगा?


21
बस अपनी बोली को दोगुना करें। वह सब है
आपका कॉमन सेंस

जवाबों:


281

2 उद्धरणों का उपयोग करें:

"Samsung U600 24"""

102
RFC-4180, पैराग्राफ "यदि डबल-कोट्स का उपयोग खेतों को घेरने के लिए किया जाता है, तो एक मैदान के अंदर दिखाई देने वाले दोहरे-उद्धरण को दूसरे दोहरे उद्धरण के साथ पूर्ववर्ती होने से बच जाना चाहिए।"
tommed

4
जैसा कि कहा जाता है कि आपको केवल एक दोहरे उद्धरण से बचने के लिए एक ही दोहरे उद्धरण जोड़ने की आवश्यकता है। आप किसी भी लाइन का पता लगाने के लिए csvfix नामक एक कमांड-लाइन टूल का उपयोग कर सकते हैं जो कि अनुरूप नहीं है: csvfix check -nl -v [फ़ाइल नाम]
सैम

2
@SamCritchley मैं केवल एक ही दोहरी बोली देख रहा हूँ जिसका उपयोग यहाँ भागने के लिए किया जा रहा है। "2 उद्धरणों का उपयोग करें" द्वारा, user4035 का अर्थ है कि 1 उद्धरण को 2 उद्धरणों से बदला जाना चाहिए। दोहरे उद्धरण चिह्नों से बचकर, आप प्रभावी रूप से दोहरे उद्धरणों (2 दोहरे उद्धरणों) के जोड़े बना रहे हैं। अंतिम उद्धरण जो आप अंत में देखते हैं, वह क्षेत्र को समाप्त करना है।
ज़ेनेक्सर

1
सिंगल डबल डबल सिंगल डबल कोट्स की आवश्यकता होती है, लेकिन केवल अगर एक डबल सिंगल डबल कोटे से आगे बढ़ें ... शुभकामनाएँ!
डैनियल वालट्रिप

14

केवल दोहरे उद्धरण ही नहीं, आपको एकल उद्धरण ( '), डबल उद्धरण ( "), बैकस्लैश ( \) और NUL (NULL बाइट) की आवश्यकता होगी।

fputcsv()लिखने के लिए, और fgetcsv()पढ़ने के लिए उपयोग करें , जो सभी का ध्यान रखेगा।


3
यह दिखाता है कि जब आप वास्तविक फाइल के बजाय ब्राउज़र में सीएसवी प्रारूप में आउटपुट करना चाहते हैं, तो आप कैसे उपयोग कर सकते हैं , के प्रलेखन पृष्ठfputcsv() पर यह टिप्पणीfputcsv()
dennisschagt

15
@Angelin नादर, क्या आप कृपया एकल दावे, बैकस्लैश और एनयूएल को दोगुना करने की आवश्यकता के बारे में अपने दावे के लिए एक स्रोत जोड़ सकते हैं? मुझे यह RFC-4180 में नहीं मिला ।
पेट्र 'पेपा' पावेल

2
आपको वास्तव में सिंगल कोट्स वगैरह से बचने की जरूरत नहीं है। एक उचित CSV फ़ाइल को किसी ऐसे फ़ील्ड के आसपास दोहरे कोट्स को जोड़ने की आवश्यकता नहीं होती है, जिसमें केवल सिंगल कोट्स हों। यदि CSV रीडर को ठीक से लागू किया जाता है, तो इसे उन प्रतीकों के साथ भी फ़ाइल को सही ढंग से पढ़ना चाहिए।
xji

4
इस जवाब को कभी वोट क्यों दिया गया? पात्रों से बचने के बारे में टिप्पणी का कभी समर्थन नहीं किया गया और मूल प्रश्न PHP के बारे में नहीं पूछता है। यह केवल स्ट्रिंग सीमांकक के लिए (और केवल चुने हुए परिसीमन के लिए) सही प्रतीत होता है, जब कोई प्रोग्राम, जैसे ओपन ऑफिस, आपको इसे बदलने की अनुमति देता है।
डेव एफ

0

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन यहाँ मैंने इसे कैसे हल किया (शून्य मानों को रिक्त स्ट्रिंग में बदलने के साथ) C # में एक एक्सटेंशन विधि का उपयोग करके।

निम्नलिखित की तरह कुछ के साथ एक स्थिर वर्ग बनाएँ:

    /// <summary>
    /// Wraps value in quotes if necessary and converts nulls to empty string
    /// </summary>
    /// <param name="value"></param>
    /// <returns>String ready for use in CSV output</returns>
    public static string Q(this string value)
    {
        if (value == null)
        {
            return string.Empty;
        }
        if (value.Contains(",") || (value.Contains("\"") || value.Contains("'") || value.Contains("\\"))
        {
            return "\"" + value + "\"";
        }
        return value;
    }

फिर प्रत्येक स्ट्रिंग के लिए आप CSV को लिख रहे हैं, इसके बजाय:

stringBuilder.Append( WhateverVariable );

तुम बस करो:

stringBuilder.Append( WhateverVariable.Q() );

-1

यदि एक मान में एक अल्पविराम, एक नया वर्ण या एक दोहरा उद्धरण है, तो स्ट्रिंग को दोहरे उद्धरण चिह्नों में संलग्न किया जाना चाहिए। जैसे: "इस क्षेत्र में न्यूलाइन चार \ n"।

आप बचने के लिए ऑनलाइन टूल का उपयोग कर सकते हैं "" और, ऑपरेटरों। https://www.freeformatter.com/csv-escape.html#ad-output

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.