डेटा और स्प्रेडशीट · CSV क्लीनर
RFC 4180 व्याख्या: आधिकारिक मानक के सबसे करीब चीज़ CSV है
· पेजभूमि
CAसवी आरएफसी-4180 डेटा-प्रारूप
CSV किसी के भी इसे लिखने से पहले दशकों तक अस्तित्व में था। यह पोस्ट RFC 4180 के बारे में बताती है, यह वास्तव में सीमांकक, उद्धरण, पंक्ति समाप्ति और शीर्षलेखों के बारे में क्या कहती है, और क्यों वास्तविक दुनिया की फ़ाइलें अभी भी इसे अनदेखा करती हैं।
दो 'मान्य' CSV फ़ाइलें जिन्हें कोई भी पार्सर सही ढंग से नहीं पढ़ता है - मानक के बिना प्रारूप दशकों तक क्यों बढ़ता रहा
दो फ़ाइलों में .csv एक्सटेंशन हो सकता है जबकि एक अर्धविराम का उपयोग करता है, दूसरा टैब और प्रत्येक अलग-अलग उद्धरण लागू करता है। विराम चिह्न की संरचना बनने से पहले एक पार्सर को बोली का ज्ञान होना चाहिए। ToolAcre चार उम्मीदवारों के साथ शुरू होता है और एक्सटेंशन पर भरोसा करने के बजाय नमूना आकृतियों का विश्लेषण करता है।
वह लचीलापन बताता है कि क्यों "वैध CSV" अक्सर अधूरा विवरण होता है। क्लीनर सामान्य विचलनों को स्वीकार कर सकता है और फिर एक सुसंगत परिणाम को क्रमबद्ध कर सकता है। इसका व्यवहार कॉन्फ़िगरेशन और परीक्षणों द्वारा परिभाषित किया गया है, यह मानने से अधिक उपयोगी अनुबंध देता है कि प्रत्येक निर्माता एक मेमो का पूरी तरह से पालन करता है।
RFC 4180 क्या है - 2005 का एक सूचनात्मक ज्ञापन जो सामान्य अभ्यास का दस्तावेजीकरण करता है, बाध्यकारी मानक नहीं
रिपॉजिटरी बार-बार आउटपुट कन्वेंशन के रूप में RFC 4180 का नाम देता है, लेकिन यह मेमो की तारीख या कानूनी स्थिति के बारे में ऐतिहासिक दावों का स्रोत नहीं है। इसलिए यह आलेख कार्यान्वयन द्वारा सन्निहित नियमों पर केंद्रित है: रिकॉर्ड अंत, उद्धरण, हेडर चौड़ाई और डिलीमीटर हैंडलिंग।
जब बाहरी मानकों का इतिहास मायने रखता है, तो प्राथमिक प्रकाशन को अलग से उद्धृत करें। ToolAcre का उपयोग करने के लिए, प्रासंगिक साक्ष्य स्थानीय है: कोड डिफ़ॉल्ट रूप से CRLF होता है, संरचनात्मक वर्णों को उद्धृत करता है, आंतरिक उद्धरणों को दोगुना करता है और एक पंक्ति की रिपोर्ट करता है जिसकी चौड़ाई हेडर से भिन्न होती है।
रिपॉजिटरी साक्ष्य लक्ष्य सम्मेलन के रूप में RFC 4180 का उपयोग करता है; प्रकाशन इतिहास स्रोत सेट से बाहर है
कॉन्फ़िगर किया गया लक्ष्य अल्पविराम-सीमांकित आउटपुट, CRLF पंक्ति अंत, एक वैकल्पिक हेडर अवधारणा और आयताकार पंक्तियों का वर्णन करता है। शिप किए गए रूट पर पहली पंक्ति व्यवहार में वैकल्पिक नहीं है: इसे हमेशा हेडर के रूप में उपयोग किया जाता है। एक हेडरलेस फ़ाइल उस भूमिका के लिए अपना पहला रिकॉर्ड खो देती है।
रैग्ड इनपुट अस्वीकृति का कारण नहीं बनता है। छोटी पंक्तियाँ खाली कोशिकाओं से भरी हुई हैं; लंबी पंक्तियाँ अतिरिक्त रखती हैं, और दोनों को पंक्ति-क्रमांकित चेतावनियाँ प्राप्त होती हैं। सीरिएलाइज़र प्रत्येक बरकरार पंक्ति को लिखता है, इसलिए "क्लीन आउटपुट" का मतलब यह नहीं है कि प्रोग्राम ने अनुमान लगाया है कि संरचनात्मक असहमति को कैसे ठीक किया जाए।
मेमो के अनुसार उद्धरण - फ़ील्ड को कब उद्धृत किया जाना चाहिए और शाब्दिक दोहरे उद्धरण को कैसे दोगुना किया जाता है
किसी फ़ील्ड को तब उद्धृत किया जाना चाहिए जब उसमें चयनित सीमांकक, उद्धरण या रिकॉर्ड-एंडिंग वर्ण शामिल हो। ToolAcre अतिरिक्त रूप से आगे या पीछे वाले स्थानों को उद्धृत करता है ताकि कोई अन्य पार्सर चुपचाप उन्हें ट्रिम न कर दे। उद्धृत फ़ील्ड के अंदर, प्रत्येक शाब्दिक दोहरा उद्धरण दो दोहरे उद्धरण चिह्न बन जाता है।
कोट प्रत्येक फ़ील्ड स्विच एक समान शैली का अनुरोध करता है; अन्यथा आउटपुट न्यूनतम रूप से उद्धृत किया जाता है। अनावश्यक स्रोत उद्धरण गायब हो सकते हैं जबकि पार्स किए गए मान समान रहेंगे। यह सामान्यीकरण अपेक्षित है और यही कारण है कि परीक्षण चयनित उदाहरणों के लिए पुनर्प्राप्त तालिका के साथ-साथ सटीक आउटपुट की तुलना करते हैं।
text/csv मीडिया प्रकार - वैकल्पिक हेडर और चारसेट पैरामीटर, और वे डिस्क पर फ़ाइल के साथ शायद ही कभी यात्रा क्यों करते हैं
डिस्क पर कोई फ़ाइल मीडिया-प्रकार के मापदंडों के साथ शायद ही कभी आती है। ToolAcre चयनित फ़ाइल से `header` या `charset` पैरामीटर नहीं पढ़ता है। यह अपने रूट अनुबंध पर निर्भर करता है: UTF-8 टेक्स्ट, पहली-पंक्ति हेडर और समर्थित डिलीमीटर डिटेक्शन या मैन्युअल चयन।
वैकल्पिक BOM निर्यात स्विच पहले हेडर से पहले U+FEFF लिखता है। इससे स्प्रेडशीट को UTF-8 को पहचानने में मदद मिल सकती है, लेकिन कॉन्फ़िगरेशन चेतावनी देता है कि यह सख्त स्क्रिप्ट या डेटाबेस आयात को तोड़ सकता है क्योंकि मार्कर हटाए जाने पर पहले नाम से जुड़ जाता है। जब तक उपभोक्ता को इसकी आवश्यकता न हो, इसे छोड़ दें।
जहां दुनिया अलग-अलग हो जाती है - अर्धविराम, LF लाइन अंत, फटी हुई पंक्तियां और बिना लेबल वाले एन्कोडिंग, और मेमो इनमें से किसी को भी बर्दाश्त क्यों नहीं करता है
वास्तविक इनपुट में अर्धविराम, टैब या पाइप, LF या अकेला CR, असमान पंक्तियाँ और एक अग्रणी UTF-8 BOM का उपयोग किया जा सकता है। पार्सर जानबूझकर उन सभी पंक्ति अंत और सीमांकक उम्मीदवारों को स्वीकार करता है। यह फटेहाल पंक्तियों को चुपचाप "बर्दाश्त" नहीं करता है; यह डेटा रखता है और एक चेतावनी संलग्न करता है।
एक खुला उद्धरण एक और स्वीकृत-लेकिन-रिपोर्ट की गई स्थिति है। प्रारंभिक उद्धरण के बाद सब कुछ एक फ़ील्ड बन जाता है, क्योंकि कोई स्पष्ट समापन सीमा मौजूद नहीं है। निर्यात पर भरोसा करने से पहले उस स्रोत को ठीक कर लें। अनुमेय पार्सिंग एक संरक्षण रणनीति है, न कि प्रमाणीकरण कि इनपुट अनुरूप था।
ToolAcre फटी हुई पंक्तियों की रिपोर्ट करते समय वास्तविक दुनिया के कई विचलनों को अस्वीकार करने के बजाय स्वीकार करता है
यहां कोई भी नियम कोशिकाओं को संख्यात्मक, बूलियन या शून्य प्रकार नहीं देता है। पार्सर स्ट्रिंग्स लौटाता है और JSON कन्वर्टर उन्हें स्ट्रिंग्स के रूप में संरक्षित करता है। प्रेषक और प्राप्तकर्ता द्वारा सिमेंटिक सम्मेलनों पर सहमति होनी चाहिए, जिसमें यह भी शामिल है कि क्या खाली पाठ गायब है और क्या कोई अंक अनुक्रम एक पहचानकर्ता है।
फ़ॉर्मूला-इंजेक्शन सुरक्षा CSV सिंटैक्स के ऊपर स्तरित एक निर्यात नीति है। सक्षम होने पर, जोखिम भरे प्रमुख पात्रों को सामान्य संख्यात्मक रूपों को छोड़कर एक एपोस्ट्रोफ प्राप्त होता है। वह जानबूझकर स्प्रेडशीट सुरक्षा के लिए मूल्यों को बदलता है; यह कोट एस्केपिंग या सामान्य प्रकार की प्रणाली का हिस्सा नहीं है।
RFC-स्टाइल आउटपुट का लक्ष्य रखें, भले ही इनपुट इसे अनदेखा कर दें - कैसे ToolAcre CSV क्लीनर लगातार परिसीमन और उद्धरण के लिए फ़ाइलों की मरम्मत करता है
स्रोत बोली भिन्न होने पर भी पूर्वानुमानित आउटपुट का लक्ष्य रखें। चेतावनियों को पार्स करने और हल करने के बाद, ToolAcre CRLF रिकॉर्ड और मानक डबल-कोट एस्केपिंग उत्सर्जित करता है। यदि पाया गया सीमांकक अर्धविराम या टैब रहता है, तो डाउनलोड हमेशा अल्पविराम लगाने के बजाय उस सीमांकक को रखता है।
जब किसी प्राप्तकर्ता अनुबंध को अल्पविराम से अलग किए गए आउटपुट की आवश्यकता होती है, तो मैन्युअल रूप से अल्पविराम का चयन करें और नियंत्रण का निरीक्षण करें क्योंकि यह वास्तव में उपयोग किए गए सीमांकक को प्रदर्शित करता है। संगति एक स्पष्ट चयन और समीक्षा की गई पंक्ति आकार से आती है, अकेले CSV एक्सटेंशन से नहीं।