नोटपैड ++ इंक्रीमेंटली रिप्लेस


84

आइए कहते हैं कि मैं डेटा की 10 पंक्तियाँ रखना चाहता हूं, लेकिन मुझे प्रत्येक पंक्ति या डेटा के टुकड़े के लिए वेतन वृद्धि चाहिए। मैं उस मूल्य को कैसे बढ़ाऊं?

उदाहरण के लिए .... यदि मेरे पास ये पंक्तियाँ हैं, तो क्या आईडी मानों को बढ़ाने के लिए रीजेक्स तरीका है?

<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />

--- यहाँ मैं इसे पसंद करने के लिए क्या करना चाहते हैं ... (अगर पहली पंक्ति की आईडी एक thats ठीक है ऊपर चला जाता है)

<row id="1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5" />

नोटपैड ++ प्रतिस्थापन गणित नहीं करते हैं, न ही regex।
अंबर

यदि यह संभव है, तो यह अविश्वसनीय रूप से कठिन है। नियमित अभिव्यक्तियों में संख्याओं की कोई अवधारणा नहीं है (इसलिए कोई +1 नहीं है) और डेटा संचय करने का कोई आसान तरीका नहीं है क्योंकि आप एक रेग्क्स से मेल खाते हैं (इसलिए "अगला" मैच नहीं है)। यदि आपको वास्तव में इसे स्वचालित करने की आवश्यकता है, तो XSLT आपकी यहाँ मदद कर सकता है।

@ एम्बर नोटपैड ++ में एक सीमित रेगेक्स कार्यक्षमता है।
करोलिस

@Karolis मैं बहुत जागरूक हूँ। मैं बस कह रहा था कि न तो regex (सहज रूप से) और न ही Notepad ++ ने खोज का कार्यान्वयन और उस regex का उपयोग करके प्रतिस्थापित करने के लिए गणित का समर्थन किया है।
अंबर

1
यद्यपि रेगेक्स का उल्लेख (और टैग किया गया) संभव विधि के रूप में किया गया था, लेकिन ओपी विशेष रूप से यह जानने की तुलना में विशेष विधि से कम चिंतित था कि क्या नोटपैड ++ कार्य कर सकता है .... जो कि ध्वनि के उत्तर को पूरी तरह से संबोधित करता है।
jbobbins

जवाबों:


156

रेगेक्स के बारे में निश्चित नहीं है, लेकिन नोटपैड ++ में आपको ऐसा करने का एक तरीका है, हालांकि यह बहुत लचीला नहीं है।

आपके द्वारा दिए गए उदाहरण में, उन Altसंख्याओं के कॉलम को पकड़ें और चुनें, जिन्हें आप बदलना चाहते हैं। फिर दिखाई देने वाली विंडो में रेडियो बटन पर जाएं Edit->Column Editorऔर चुनें Number to Insert। फिर अपनी प्रारंभिक संख्या और वेतन वृद्धि निर्दिष्ट करें, और ठीक पर क्लिक करें। यह बढ़े हुए नंबरों को लिखना चाहिए।

नोट: यह भी Multi-editingसुविधा के साथ काम करता है ( Ctrlकुंजी दबाए रखते हुए कई स्थानों का चयन )।

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


4
+1 अस्पष्ट स्तंभ सुविधा के लिए, और यह देखते हुए कि विम एक अधिक शक्तिशाली संपादक है। ;)
स्पेंसर रथबून

नोटपैड ++ कमाल का है, यह बहुत अच्छा होगा अगर हमारे पास ऑनलाइन टेक्स्ट एडिटर उतना ही शक्तिशाली है जितना कि यह है।
लुइज़ फ़िजाओ वेरोनी

1
मेरे लिए: Alt + Shift के साथ कॉलम चुनें और फिर नंबर डालें। पूरी तरह से काम करता है
Rombus

धन्यवाद! यह सुविधा महान है। इसके अलावा, मैं डबल क्लिक करके कॉलम का चयन करने में सक्षम था।
रहीम खोजा

बस कमाल! बस 300 डालने के बयान तैयार करने के लिए मेरी जान बचाई,
DoNuT

14

मैं आज उसी फीचर की तलाश में था लेकिन नोटपैड ++ में ऐसा नहीं कर सका। हालांकि, हमारे पास हमारे बचाव के लिए टेक्स्टपैड है। इसने मेरे लिए काम किया।

टेक्स्टपैड के बदले हुए संवाद में, रेगेक्स चालू करें; तब आप प्रतिस्थापित करने का प्रयास कर सकते हैं

<row id="1"/>

द्वारा

<row id="\i"/>

इस लिंक पर एक नज़र डालते हैं, टेक्स्टपैड के अद्भुत अद्भुत फीचर्स के लिए - http://sublimetext.userecho.com/topic/106519-generate-a-fterence-of-numbers-increment-replace/


1
मुझे लगता है कि यह मदद करता है अगर मैं वास्तव में ध्यान देता हूं। SublimeText स्थापित करने का अंत किया। :) धन्यवाद।
आरटीएफ

1
लेकिन सुनिश्चित करें कि आपने "सभी बदलें" बटन को हिट किया है। "अगला बदलें" काउंटर को नहीं बढ़ाएगा। यह पता लगाने में घंटों लग गए। \ i 1 से शुरू होने वाले नंबरों से बदलें। 1. irementing से 1. \ i (10) 10 से शुरू होने वाले नंबरों से बदलें। 1. ire (0,10) से बढ़ाकर, 0 से शुरू होने वाले नंबरों से बदलें। 10. i से बढ़ें 100, -10) 100 से शुरू होने वाली संख्याओं के साथ बदलें, -10 की गिरावट।
वेंकटेश मुनियांदी

8

मैं 250 से अधिक लाइनों के साथ एक ही समस्या थी और यहाँ है कि मैं यह कैसे किया:

उदाहरण के लिए :

<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />

आप कर्सर को "1" के ठीक बाद रखते हैं और आप alt + shiftनीचे के तीर पर उतरते हैं और तब तक नीचे उतरना शुरू करते हैं जब तक कि नीचे की रेखा तक नहीं पहुंच जाते, अब आप देखते हैं कि चयनों का एक समूह प्रत्येक पंक्ति पर नंबर 1 को मिटाने के लिए एक साथ क्लिक करता है और जाकर Edit -> Column Editorचयन करता है Number to Insertफिर 1आरंभिक संख्या क्षेत्र में और 1क्षेत्र द्वारा बढ़ाई गई और शून्य संख्या की जाँच करें और क्लिक करेंok

बधाई आपने दी :)


5

चूंकि सीमित वास्तविक उत्तर हैं, इसलिए मैं इस समाधान को साझा करूंगा। के लिए वास्तव में अपने उदाहरण की तरह साधारण मामलों में आप इसे पीछे की ओर कर ...

इस से

1
2
3
4
5

के \r\nसाथ बदलें " />\r\n<row id="और आपको वहां 90% रास्ता मिल जाएगा

1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5

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

|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |

स्पष्ट सामान लेकिन यह कुछ प्रमुख स्ट्रोक को बचाने के लिए किसी को भी एक अजीब हैक कार्य करने में मदद कर सकता है।


5
बिना रेगेक्स मोड के (.*)साथ बदलने पर आपको वहां 100% रास्ता मिल जाएगा। <row id="\1" />. matches newline
satibel

4

http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text

नोटपैड ++ एक एडिट -> कॉलम "ऑल्ट + सी" संपादक से सुसज्जित है, जो दो अलग-अलग तरीकों से आयताकार चयन पर काम कर सकता है: Coledit.png सम्मिलन के स्तंभ पर वर्तमान लाइन सहित और उसके बाद हर लाइन पर कुछ निश्चित पाठ सम्मिलित करना। बिंदु (उर्फ कैरेट)। प्रारंभ में चयनित पाठ अछूता रह गया है। जैसा कि चित्र दिखाता है, संख्याओं की एक रैखिक श्रृंखला उसी तरीके से डाली जा सकती है। प्रारंभिक मूल्य और वेतन वृद्धि प्रदान की जानी है। जीरो के साथ लेफ्ट पैडिंग एक विकल्प है, और संख्या 2, 8, 10 या 16 में दर्ज की जा सकती है - यह है कि गणना किए गए मानों को भी प्रदर्शित किया जाएगा, पैडिंग सबसे बड़ा है।


यदि आप अपने उत्तर को पढ़ने के भ्रम से बचने के लिए पोस्ट में छवि संलग्न करते हैं तो यह बहुत बेहतर होगा
अमिनाह नुरैनी

3


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

स्टैकओवरफ़्लो खोजें / बदलें लेकिन वृद्धि मूल्य


1

(मामले में पोस्टिंग किसी के पास इसका उपयोग हो सकता है)।

मैं ओपी की तुलना में थोड़ा अधिक परिष्कृत समस्या के समाधान की तलाश कर रहा था - हर चीज की संख्या के साथ घटित संख्या के साथ एक ही घटना की जगह

उदाहरण के लिए कुछ इस तरह से:

<row id="1" />
<row id="2" />
<row id="1" />
<row id="3" />
<row id="1" />

इसके द्वारा:

<row id="2" />
<row id="3" />
<row id="2" />
<row id="4" />
<row id="2" />

Cannt ऑनलाइन समाधान नहीं मिल रहा है इसलिए मैंने अपनी स्क्रिप्ट ग्रूवी में लिखी (थोड़ा बदसूरत लेकिन काम करता है):

 /**
 * <p> Finds words that matches template and increases them by 1.
 * '_' in word template represents number.
 *
 * <p> E.g. if template equals 'Row="_"', then:
 * ALL Row=0 will be replaced by Row="1"
 * All Row=1 will be replaced by Row="2"
 * <p> Warning - your find template might not work properly if _ is the last character of it
 * etc.
 * <p> Requirments:
 * - Original text does not contain tepmlate string
 * - Only numbers in non-disrupted sequence are incremented and replaced
 * (i.e. from example below, if Row=4 exists in original text, but Row=3 not, than Row=4 will NOT be 
 * replaced by Row=5)
 */
def replace_inc(String text, int startingIndex, String findTemplate) {
    assert findTemplate.contains('_') : 'search template needs to contain "_" placeholder'
    assert !(findTemplate.replaceFirst('_','').contains('_')) : 'only one "_" placeholder is allowed'
    assert !text.contains('_____') : 'input text should not contain "______" (5 underscores)'
    while (true) {
        findString = findTemplate.replace("_",(startingIndex).toString())
        if (!text.contains(findString)) break;
        replaceString = findTemplate.replace("_", "_____"+(++startingIndex).toString())
        text = text.replaceAll(findString, replaceString)
    }
    return text.replaceAll("_____","") // get rid of '_____' character
}

// input
findTemplate = 'Row="_"'
path = /C:\TEMP\working_copy.txt/
startingIndex = 0

// do stuff
f = new File(path)
outText = replace_inc(f.text,startingIndex,findTemplate)
println "Results \n: " + outText
f.withWriter { out -> out.println outText }
println "Results written to $f"

1

आप इसे regex और foreach पाश के माध्यम से PowerShell का उपयोग, यदि आप फ़ाइल में आपके मान संग्रहीत कर सकते हैं input.txt :

$initialNum=1; $increment=1; $tmp = Get-Content input.txt | foreach {  $n = [regex]::match($_,'id="(\d+)"').groups[1
].value; if ($n) {$_ -replace "$n", ([int32]$initialNum+$increment); $increment=$increment+1;} else {$_}; }

उसके बाद आप $ tmp को फाइल का उपयोग करके स्टोर कर सकते हैं $tmp > result.txt। इसके लिए कॉलम में डेटा की आवश्यकता नहीं है।

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