मुझे CSV फ़ाइलों में अल्पविराम और भाषण के निशान से कैसे बचना चाहिए ताकि वे एक्सेल में काम करें?


111

मैं एक CSV फ़ाइल उत्पन्न कर रहा हूँ (टैब के बजाय अल्पविराम द्वारा सीमांकित)। मेरे उपयोगकर्ता डबल क्लिक करके एक्सेल में CSV फ़ाइल खोलने की सबसे अधिक संभावना रखेंगे। मेरे डेटा में अल्पविराम और भाषण चिह्न हो सकते हैं, इसलिए मैं इस प्रकार से बच रहा हूं।

Reference, Title, Description
1, "My little title", "My description, which may contain ""speech marks"" and commas."
2, "My other little title", "My other description, which may also contain ""speech marks"" and commas."

जहां तक ​​मुझे पता है कि हमेशा ऐसा करने का तरीका रहा है। यहाँ मेरा दलदल है: जब मैं एक्सेल 2010 में इस फाइल को खोलूंगा तो मेरा बचना सम्मान नहीं है। शीट पर भाषण के निशान दिखाई देते हैं, और अल्पविराम नए कॉलम का कारण बनता है।

जवाबों:


219

हमें आखिरकार इसका जवाब मिल गया।

यदि स्तंभ मान किसी स्थान से पहले नहीं है, तो Excel केवल अल्पविराम और भाषण के निशान से बचने का सम्मान करेगा। तो इस तरह से बिना स्पेस के फाइल जेनरेट करना ...

Reference,Title,Description
1,"My little title","My description, which may contain ""speech marks"" and commas."
2,"My other little title","My other description, which may also contain ""speech marks"" and commas."

... समस्या ठीक कर दी। आशा है कि यह किसी की मदद करता है!


2
यह एक ऐसी समस्या है जिसे मैंने पहले भी चलाया है और मैं हमेशा इसके बारे में भूल जाता हूं। एक्सेल को इस व्यवहार को बंद कर देना चाहिए, क्योंकि यह केवल भ्रम पैदा करता है और पहली बार में करने के लिए एक सहायक नियम नहीं है। कॉमा के बीच में व्हाट्सएप अनिवार्य नहीं होना चाहिए।
जैक्स मैथ्यू

61

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

  1. यदि मान में अल्पविराम, न्यूलाइन या डबल उद्धरण शामिल है, तो स्ट्रिंग मूल्य को दोहरे उद्धरणों में संलग्न किया जाना चाहिए।

  2. मूल्य में किसी भी दोहरे उद्धरण वर्ण को दूसरे दोहरे उद्धरण के साथ बच जाना चाहिए।

  3. यदि मान में अल्पविराम, न्यूलाइन या डबल उद्धरण नहीं है, तो स्ट्रिंग मान अपरिवर्तित लौटाया जाना चाहिए।


4
क्या यह कुछ को चोट पहुंचाने के लिए कुछ भी चोट पहुंचाता है जिसमें अल्पविराम, दोहरे उद्धरण या नए अंक नहीं होते हैं?
एरिक रेपेन

2
नहीं ErikReppen मुझे नहीं लगता है कि सामान्य रूप से चोट लगी होगी। मैं एक जावा बैकग्राउंड से ताल्लुक रखता हूँ जहाँ इसकी सिफारिश पुराने में टेक्स्ट को रिप्लेस करके नए स्ट्रिंग्स न बनाने की है क्योंकि उनके पास स्टेप मेमोरी के अंदर अपना हिस्सा है। यदि आप चाहें, तो आप बिना शर्त सभी मानों को बदल सकते हैं और हमें बता सकते हैं कि क्या यह किसी भी समस्या का कारण बनता है, हालांकि यह नहीं होना चाहिए।
अल्फाबेटगम्मा

2
एक क्षेत्र जो शुरू होता है या एक स्थान के साथ समाप्त होता है, उसे उद्धृत किया जाना चाहिए।
जोनाथन रोसेन

2

यशु के निर्देशों के अनुसार, मैंने निम्नलिखित फ़ंक्शन (यह पीएल / एसक्यूएल कोड है, लेकिन इसे आसानी से किसी अन्य भाषा के अनुकूल होना चाहिए) लिखा है।

FUNCTION field(str IN VARCHAR2) RETURN VARCHAR2 IS
    C_NEWLINE CONSTANT CHAR(1) := '
'; -- newline is intentional

    v_aux VARCHAR2(32000);
    v_has_double_quotes BOOLEAN;
    v_has_comma BOOLEAN;
    v_has_newline BOOLEAN;
BEGIN
    v_has_double_quotes := instr(str, '"') > 0;
    v_has_comma := instr(str,',') > 0;
    v_has_newline := instr(str, C_NEWLINE) > 0;

    IF v_has_double_quotes OR v_has_comma OR v_has_newline THEN
        IF v_has_double_quotes THEN
            v_aux := replace(str,'"','""');
        ELSE
            v_aux := str;
        END IF;
        return '"'||v_aux||'"';
    ELSE
        return str;
    END IF;
END;

0

एकल उद्धरण भी ठीक काम करते हैं, यहां तक ​​कि डबल उद्धरण से बचने के बिना, कम से कम एक्सेल 2016 में:

'text with spaces, and a comma','more text with spaces','spaces and "quoted text" and more spaces','nospaces','NOSPACES1234'

एक्सेल उस 5 कॉलम में डाल देगा (यदि आप "टेक्स्ट क्वालिफायर" के रूप में "टेक्स्ट टू कॉलम" विज़ार्ड के रूप में एकल उद्धरण चुनते हैं)


-3

दोहरे उद्धरण के बाद भी, मुझे कुछ दिनों के लिए यह समस्या थी।

कॉम्मा के साथ रिप्लेस किया गया पाइप डेलीमिटर, फिर चीजों ने ठीक काम किया।


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