CSV आयात करते समय मैं संख्याओं को मैनबलिंग से कैसे रखता हूं?


12

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

उदाहरण के लिए, आप संख्या स्प्रेडशीट में एक UPC कोड टाइप करें 005566778899 , नंबर स्वचालित रूप से 5566778899 में बदल देगा । यह वह नहीं है जो मैं चाहूंगा ...

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

CSV फ़ाइल खोलने पर मुझे अपने डेटा को छोड़ने के लिए नंबर कैसे मिल सकते हैं?

आयात करने के बाद फ़ील्ड को पाठ में परिवर्तित करने से मदद नहीं मिलेगी क्योंकि डेटा पहले से ही गड़बड़ था ...


आपका क्या मतलब है "डेटा पहले से ही गड़बड़ था"? क्या आपका मतलब फ़ाइल के खुलने के बाद पाठ में परिवर्तित होना है?
डैनियल

फ़ाइल खोलने पर, एक्सेल और नंबर दोनों आपके सभी डेटा के आसपास बदल जाएंगे। तो जो कुछ भी मुझे करना है वह मुझे फ़ाइल खोलने से पहले करना होगा।
मेंहदीरोन

7 साल बाद यह अभी भी एक अंतराल छेद है। यह समस्याग्रस्त है कि csv -> संख्या -> csv से एक गोल यात्रा कोशिकाओं को संशोधित करती है। अग्रणी शून्य एक अच्छा उदाहरण है। एक और एक प्रतिशत है (जैसे। 20% 0.2 हो जाता है)। एक और एक वैज्ञानिक संकेतन है (उदाहरण। 1E-2 0.01 हो जाता है)। दोहरे उद्धरण चिह्नों में लपेटने से मदद नहीं मिलती है, और एपोस्ट्रोफ के साथ उपसर्ग करना शाब्दिक रूप से व्याख्या किया जाता है। मुझे लगता है कि सबसे अच्छा विकल्प आयात से पहले एक एपोस्ट्रोफ के साथ सब कुछ उपसर्ग कर सकता है और निर्यात के बाद सभी प्रारंभिक एपोस्ट्रोफ्स को
छीन सकता है

जवाबों:


7

यदि कोई CSV फ़ाइल में कोई फ़ील्ड एक एपॉस्ट्रॉफ़ ( ') के साथ शुरू होती है , तो एक्सेल और नंबर दोनों फ़ील्ड को टेक्स्ट के रूप में मानेंगे, और इसे किसी संख्यात्मक स्वरूपण के साथ प्रस्तुत नहीं करेंगे।

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

अपनी CSV फ़ाइलों को संसाधित करने के लिए वे ऐसा करते हैं, तो आप एक ऑटोमेटर एप्लिकेशन बना सकते हैं।

ऑटोमेकर में, एक नया एप्लिकेशन बनाएं।

इसकी एक एकल क्रिया होगी: रन शैल स्क्रिप्ट (तर्क के रूप में इनपुट पास करना)। यहाँ स्क्रिप्ट है:

for f in "$@"
do
    perl -pi -e "s/\"\"([0-9A-Za-z: \.\-+]+)\"/'\1/g" "$f"
done

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

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

यहां छवि विवरण दर्ज करें


इस काम को करना ऐसा लगता है जैसे इसे कुछ बातचीत की आवश्यकता है। इस चर्चा बेहतर होगा जगह चैट में ले
डैनियल

0

विशेष रूप से, यहाँ प्रमुख शून्य को कैसे संभालना है । मुझे लगता है कि आपका प्रश्न ऑटोकरेक्ट की तुलना में सेल फॉर्मेटिंग के बारे में अधिक है।

जैसा कि उल्लेख किया गया था कि स्वतः सुधार सुविधा एक सिस्टम आइटम है, और सिस्टम प्राथमिकता से अक्षम होने की आवश्यकता है।


इस प्रारूप में कोशिकाओं को परिवर्तित करने से मदद नहीं मिलेगी क्योंकि डेटा पहले से ही गड़बड़ था ...
henryaaron

1
अगर आप कोशिकाओं को प्रारूपित करते हैं, तो मैं शून्य को वापस आने की उम्मीद करूंगा - अगर संख्याएं विनाशकारी रूप से उन शून्य को आयात पर हटा दें जो वास्तव में चूसना होगा। शायद आप आयात करने से पहले कोशिकाओं को प्रारूपित करने जा रहे हैं।
एडम एबेरबेक

यह सबसे निश्चित रूप से करता है।
हेनरीरोन

0

हुज़ाह, इस उत्तर और अन्य के लिए धन्यवाद , अब निम्नलिखित लाभों के साथ एक विधि है:

  • एक्सेल में और साथ ही संख्या में काम करता है
  • स्वचालित किया जा सकता है।
  • नंबरों में अदृश्य है।
  • आयात से निर्यात तक शून्य-प्रभाव CSV फ़ाइलों का उत्पादन करता है।

चाल को प्रत्येक क्षेत्र को एपोस्ट्रोफ के साथ उपसर्ग नहीं करना है और न ही दोहरे उद्धरणों में लपेटना है, लेकिन साथ उपसर्ग ="और प्रत्यय के साथ "। आयात नंबरों पर फ़ील्ड की सामग्री को एक स्ट्रिंग के रूप में माना जाता है और निर्यात पर यह उपसर्ग और प्रत्यय को गिराता है।

यहाँ एक आसान एक लाइनर है जो एक फाइल को प्री-प्रोसेस करता है जिसे my.csv:

sed 's/^/="/;s/,/",="/g;s/$/"/' my.csv | sed 's/=""//g' > tmp.csv

प्रत्येक पंक्ति के प्रारंभ में पहला sedडालता है =", प्रत्येक अल्पविराम को बदलता है ",=", फिर प्रत्येक पंक्ति को समाप्त करता है "। दूसरा sedतब किसी भी खाली खेत को हटा देता है, क्योंकि नंबर उन पर चोक हो जाता है। अंत में यह एक फाइल लिखता है जिसे नंबर पर आयात tmp.csvकरने के openलिए डबल क्लिक किया जा सकता है या पास किया जा सकता है ।

व्यवहार में यह किसी भी क्षेत्र को प्रभावित करेगा, जिसमें अल्पविराम होता है। आप केवल उन फ़ील्ड्स को लपेटने से बेहतर हो सकते हैं जो संख्याओं से शुरू होते हैं, लेकिन फिर आपको प्रत्येक पंक्ति के आरंभ और अंत और नियमित अभिव्यक्तियों के आपके संस्करण से सावधान रहने की आवश्यकता है। यह macOS पर करेगा:

sed -E 's/(^|,)([[:digit:]][^,]*)($|,)/\1="\2"\3/g'

यही है, लाइन या एक अल्पविराम, एक अंक और फिर वर्णों की कोई संख्या जो कि अल्पविराम नहीं हैं, फिर पंक्ति का अंत या किसी अन्य अल्पविराम से मेल खाता है। एक ही शुरुआत और अंत के साथ बदलें, लेकिन बीच बिट के साथ में लिपटे ="और "

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