नोटपैड ++ - अल्पविराम से अलग की गई फ़ाइल में पहला कॉलम हटा रहा है


14

मेरे पास एक बड़ी CSV फ़ाइल है जिसे मुझे डेटा के पहले कॉलम को हटाने की आवश्यकता है। मैं इसे एक्सेल में नहीं खोल सकता क्योंकि एक्सेल कॉलम के कुछ मानों को वैज्ञानिक संख्याओं में परिवर्तित करता है।

मैं नोटपैड ++ का उपयोग कर रहा हूं , और मैं फ़ाइल से पहला कॉलम स्ट्रिंग करने की कोशिश कर रहा हूं EXE,

1,Value1,value2,value3,value4,value5
3445,Value1,value2,value3,value4,value5
12345,Value1,value2,value3,value4,value5
1234,Value1,value2,value3,value4,value5
11,Value1,value2,value3,value4,value5

तरह दिखने के लिए

Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5

जवाबों:


13

नोटपैड ++ की खोज और नियमित अभिव्यक्ति (रेगेक्स) का समर्थन करता है जो आसानी से इसके लिए उपयोग किया जा सकता है।

निम्नलिखित रेगेक्स का उपयोग करें:

^[^,]+,(.+)

यह रेखा की शुरुआत के साथ मेल खाता है और इसके बाद शेष पंक्ति के बाद अल्पविराम के बिना एक अल्पविराम नहीं हो सकता है। शेष पंक्ति को पहले प्रस्तुत करने के रूप में वर्गीकृत किया गया है।

इसके साथ विश्व स्तर पर प्रतिस्थापित:

\1

यह पहला सबमैच (बाकी लाइन) दर्शाता है। उसके द्वारा प्रत्येक पंक्ति को पहले कॉलम और अल्पविराम के बाद सब कुछ बदल दिया जाता है।

जब मैंने इसे एक ही वैश्विक प्रतिस्थापन में करने के लिए उपरोक्त तरीका पाया (और तदनुसार अपने उत्तर को अद्यतन किया), तो मैंने देखा कि यह उत्तर मूल रूप से समान है, लेकिन उपयोग किए गए रेगेक्स का एक व्यापक विवरण भी देता है।


ध्यान दें: छोटी रेगेक्स ^[^,]+,को खाली स्ट्रिंग के साथ वैश्विक प्रतिस्थापित करने के लिए उपयोग नहीं किया जा सकता है क्योंकि नोटपैड ++ तब सभी कॉलमों को अंतिम के अलावा बदल देगा: पहले कॉलम को बदलने के बाद, दूसरा कॉलम (जो अब पहला है और रेगेक्स से बिल्कुल मेल खाता है) प्रतिस्थापित किया जा सकता है, फिर तीसरा, और इसी तरह। हालांकि, छोटा रेगेक्स अन्य संपादकों (जैसे PSPad या विम ) के साथ पूरी तरह से काम करता है ।


यहां जाने का रास्ता यही है। यदि ओपी में पहले से ही एन ++ है तो यह सबसे तेज तरीका है। मैं PSPad के साथ यह बहुत कुछ करता हूं (जो एक बार में यह कर सकता था, btw)। यह भी देखें कि रेगेक्स कैसे काम करता है: rubular.com/r/OiehkBT0vA
simbabque

नोटपैड ++ इनपुट लाइन को लाइन से प्रोसेस नहीं करता है, लेकिन चरित्र द्वारा चरित्र। इसके कुछ साफ-सुथरे फायदे हैं (जैसे मल्टी-लाइन पैटर्न)।
डेनिस

संपादित करने के लिए +1। अफसोस की बात है कि आपका जवाब अब सामुदायिक विकि है।
डेनिस

@ डेनिस हां, मैंने 10-संपादन सीमा के बारे में पता नहीं होने के कारण बहुत बार संपादित किया।
बोलते हैं

क्यों नहीं ^[^,]+,और खाली के साथ बदलें?
knittl

10

प्रेस Ctrl+ Hऔर निम्न बदलें क्रिया:

Find what:          .*?,(.*)
Replace with:       \1
Wrap around:        checked
Regular expression: selected
. matches newline:  unchecked

अब सभी घटनाओं को बदलने के लिए Alt+ दबाएँ A

यह काम किस प्रकार करता है

  • नियमित अभिव्यक्ति .*?,(.*) एक पूरी लाइन मेल खाता है:

    • .*?, पहले अल्पविराम से पहले सब कुछ मेल खाता है, जिसमें अल्पविराम भी शामिल है।

      .*किसी भी वर्ण की घटनाओं की संख्या का अर्थ है, और प्रश्नवाचक मात्रा को आलसी बनाता है , अर्थात, यह यथासंभव कम वर्णों से मेल खाता है।

    • (.*) पहले कॉमा के बाद सब कुछ मेल खाता है।

      .*कोष्ठक में संलग्न करने से यह एक उपपट्ट में परिवर्तित हो जाता है, इसलिए मस्तूल को प्रतिस्थापित क्षेत्र में पहुँचा जा सकता है।

  • \1पहला सबमैच (मैच के लिए (.*)) का प्रतिनिधित्व करता है ।

    नतीजतन, नोटपैड ++ पहले कॉमा के बाद आने वाली हर चीज से लाइन को बदल देता है।


बस एक ही विचार है कि यह देखने के बाद कि ^[^,]+,खाली स्ट्रिंग के साथ विश्व स्तर पर नोटपैड ++ में काम नहीं करेगा। (+1)
12

6

विंडोज में, आप इसे निम्नानुसार कर सकते हैं।

for /F "tokens=2,3,4,5,6 delims=," %i in (Input.csv) do @echo %i,%j,%k,%l,%m  >> output.csv

मैंने मान लिया कि आपके पास केवल 6 कॉलम हैं। यदि आपके पास कई और कॉलम हैं, तो * टोकन फ़ील्ड के साथ प्रयोग करने का प्रयास करें। आइडिया को विंडोज से कमांड के लिए लिया जाता है


2
कॉलम की मनमानी संख्या के लिए, इसका उपयोग करें:for /F "tokens=1* delims=," %i in (Input.csv) do @echo %j >> output.csv
SeanC

3

मान लें कि आपके पास एक Linux सिस्टम या कुछ यूनिक्स शैली का वातावरण है (मुझे पसंद है gow , या आप unixutils से उपयोगिताओं को सूँघ सकते हैं ) मेरा मानना ​​है कि फ़ाइल को चलाने के माध्यम से cut -d , -f2-6चाल चलनी चाहिए - यह चाहिए, अगर मुझे याद है कि सही ढंग से चाल चली जाएगी - -dसेट करता है अपराधी, और f2-6दूसरे से छठे वर्ण को छापता है।

cat input.csv | cut -d , -f2-6 > output.csvइनपुट फ़ाइल लेने और आउटपुट फ़ाइल को किक आउट करने की कोशिश करेगा। नोटपैड का उपयोग नहीं कर रहा है, लेकिन इसका तेज और वास्तव में सरल है।


धन्यवाद, मैंने अभी लिंक पर क्लिक किया है और मुझे 403 त्रुटि मिली है?
माइकडे

दोनों लिंक मेरे लिए काम करते हैं - जो कि अजीब है। मैं आमतौर पर इसके लिए गूग्लिंग द्वारा गॉव ढूंढता हूं - इसके गामाब रेपो पर बमात्जेल से संबंधित है। Cygwin भी एक विकल्प हो सकता है, लेकिन यह sorta बात के लिए अपने एक overkill
जर्नीमैन गीक

2

आपको CSV को एक्सेल में लोड करने में सक्षम होना चाहिए और इसे संख्याओं को पाठ के रूप में मानना ​​चाहिए (इसे वैज्ञानिक संख्याओं में बदलने से रोकना)।

  1. एक्सेल खोलें
  2. डेटा टैब
  3. पाठ से
  4. डिलीट करें चुनें
  5. अन्य चुनें: ","
  6. सभी कॉलम के लिए उन्हें डेटा पूर्वावलोकन विंडो में चुनें, और टेक्स्ट चुनें
  7. अपना कॉलम निकालें
  8. CSV के रूप में सहेजें

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

यह महान काम किया! थैंक
यू

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

मैं इस अवसर पर भी इसका उपयोग करता हूं, लेकिन इनमें से अधिकांश मुझे ऐसा करना पसंद नहीं है। यह अक्सर एक पाठ संपादक का उपयोग करने के लिए बहुत तेज़ होता है जो रेगेक्स खोज का समर्थन करता है और प्रतिस्थापित करता है यदि कोई जानता है कि इसे कैसे संभालना है। हालांकि, कोई अपराध नहीं है, क्योंकि आपका जवाब स्पष्ट और संक्षिप्त था।
सिमबेक 15

oi अपराध नहीं कर रहा था: D
जेम्स वुड

1

नोटपैड ++ ने बिल्ट-इन कॉलम एडिटिंग और लाइन अप (,) कमांड (टेक्स्टएफ़एक्स प्लगइन) द्वारा एक ग्राफिकल पॉइंट-एंड-क्लिक सॉल्यूशन दिया है जो पहली बार सही होने की संभावना है। यह नियमित अभिव्यक्ति या शेल प्रोग्रामिंग का उपयोग करने से बचता है, दोनों को आमतौर पर कुछ डिबगिंग की आवश्यकता होती है जब तक कि वे ठीक वही करते हैं जो आप चाहते हैं और कुछ भी नहीं।

प्रारंभिक बिंदु : स्तंभों के साथ CSV फ़ाइल गलत लिखी गई है, इसलिए कॉलम द्वारा संपादित करना आसान नहीं है ...

    1,Value1,value2,value3,value4,value5
    3445,Value1,value2,value3,value4,value5
    12345,Value1,value2,value3,value4,value5
    1234,Value1,value2,value3,value4,value5
    11,Value1,value2,value3,value4,value5
    ...

प्रक्रिया:

  1. ब्याज की पंक्तियों का चयन करें - शायद पूरी फ़ाइल।

  2. मेनू कमांड का उपयोग करें TextFX> TextFX एडिट> कोमा (,) द्वारा कई लाइनों को पंक्तिबद्ध करें यह कॉलम द्वारा पंक्तियों के सभी को पंक्तिबद्ध करता है और कॉलम संपादन को आसान बनाता है।

    1    ,Value1,value2,value3,value4,value5
    3445 ,Value1,value2,value3,value4,value5
    12345,Value1,value2,value3,value4,value5
    1234 ,Value1,value2,value3,value4,value5
    11   ,Value1,value2,value3,value4,value5
    
  3. पहले कॉमा (,) के बाद कॉलम में कॉलम मोड में प्रवेश करें , छोटी संख्या में पंक्तियों के लिए, कीबोर्ड कमांड्स का उपयोग करें: Alt + Shift + DownArrow।
    यदि कई पंक्तियों (बड़ी फ़ाइल) पर काम करने की आवश्यकता है, तो Alt + माउस का उपयोग करें और पहली पंक्ति के वांछित कॉलम पर क्लिक करें , फिर फ़ाइल की अंतिम पंक्ति पर जाएं और Alt + Shift + समान कॉलम स्थिति पर क्लिक करें। यह ENTIRE फ़ाइल पर कॉलम मोड को सक्रिय करता है - आपको सभी अल्पविरामों के पीछे एक ऊर्ध्वाधर रेखा दिखनी चाहिए।

  4. कॉलम मोड में हटाएं वर्णों का एक संपूर्ण स्तंभ निकालता है। इसलिए आप पहले अल्पविराम से पहले सभी पंक्तियों को एक बार में सभी को हटा सकते हैं:

    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    

किया हुआ!

अब तक सुझाए गए अन्य लोगों की तुलना में इस समाधान पर टिप्पणी करें:

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

उदाहरण के लिए, यदि आपने 2 कॉलम, या Nth कॉलम को जल्दी से हटाने का फैसला किया है, तो यह दृष्टिकोण लगभग बिना किसी संशोधन के काम करता है।

दूसरी ओर, नियमित अभिव्यक्तियाँ, शेल स्क्रिप्ट, लक्ष्य को पूरा करेंगे, हाँ, लेकिन जटिल समस्याओं में आप अपना वाक्यविन्यास "de-bugging" अधिक समय बिताएंगे।

नोटपैड ++ की बहुमुखी अंतर्निहित कार्यक्षमता इसकी मुख्य शक्तियों में से एक है: आपको "प्रोग्रामिंग" का सहारा लिए बिना काफी शक्ति मिलती है।


0

यदि आप नोटपैड ++ के लिए पायथन कंसोल प्लगइन से परिचित हैं , तो मैं आपको एक अन्य विधि की सलाह दे सकता हूं। आपको नोटपैड ++ दस्तावेज़ पर अपना पाठ जोड़ने और कंसोल में अगली स्क्रिप्ट निष्पादित करने की आवश्यकता है:

res = []
data = editor.getText().split('\r\n')
for i in data:
    res.append(i.split(',')[1:])

for i in res:
    editor.addText(', '.join(i)+'\r\n')

इस स्क्रिप्ट ने परिणाम पाठ को आपके वर्तमान नोटपैड ++ दस्तावेज़ में जोड़ा।


-1

भागो vim(कमांड मोड में, अगर प्रेस नहीं बच)।

qकुंजी पर पहला कॉलम हटाने की क्रिया को मैप करने के लिए निम्न कमांड टाइप करें :

:map q 0df,j0

जिसका मतलब है:

  • 0 - लाइन की शुरुआत में जाएं
  • df,- d सब कुछ तब तक के लिए , चरित्र सहित (अल्पविराम सहित),
  • j - एक लाइन नीचे जाओ
  • 0 - लाइन की शुरुआत में जाएं

फिर इस क्रिया को सभी लाइनों में लागू करें:

:0,$ normal q

जिसका अर्थ है, उस क्रिया को चलाएं जो qपंक्ति को शुरुआत (0) से अंत तक ($) में सौंपी जाती है ।


सिर्फ एक वैश्विक परिवर्तन के साथ क्यों नहीं :%s/^[^,]\+,//g?
12

आप भी कर सकते हैं, यह एक प्रयोग करने में आसान और समझने के बजाय regex है :) आमतौर पर मैं हमेशा उलझन में रहता हूं कि मुझे किस चरित्र से बचना है, इसलिए मैं कई बार उसी regex को टाइप करने में समाप्त हो रहा हूं।
kenorb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.