2011-09-29 17 views
68

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

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

<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" /> 
+0

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

+0

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

+0

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

उत्तर

135

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

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

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

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

+4

दोनों अस्पष्ट कॉलम सुविधा के लिए +1, और यह नोट करते हुए कि विम एक अधिक शक्तिशाली संपादक है। ;) –

+0

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

+1

मेरे लिए था: Alt + Shift के साथ कॉलम का चयन करें और फिर सम्मिलित करने के लिए संख्या करें। पूरी तरह से काम करता है – Rombus

5

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

इस

1 
2 
3 
4 
5 

से " />\r\n<row id=" साथ \r\n बदलें और आपको इस प्रक्रिया

1" /> 
<row id="2" /> 
<row id="3" /> 
<row id="4" /> 
<row id="5 
के 90% मिल जाएगा

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

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

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

+3

'(। *) 'को' ' के बिना regex मोड में बदलकर '। न्यूलाइन से मेल खाता है 'आपको वहां से 100% रास्ता मिल जाएगा। – satibel

12

मैं आज भी वही सुविधा ढूंढ रहा था लेकिन नोटपैड ++ में ऐसा नहीं कर सका। हालांकि, हमारे पास हमारे बचाव के लिए टेक्स्टपैड है। यह मेरे लिए काम किया।

टेक्स्टपैड के प्रतिस्थापन संवाद में, रेगेक्स चालू करें; http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/

+1

मुझे लगता है कि अगर मैं वास्तव में ध्यान देता हूं तो इससे मदद मिलती है। SublimeText स्थापित करना समाप्त हो गया। :) धन्यवाद। –

+0

मेरे लिए सही काम किया धन्यवाद! –

+0

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

3


समाधान ऊपर सुझाव केवल तभी कार्य करेगा डेटा है - तो आप

<row id="1"/> 

जगह

<row id="\i"/> 

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

stackoverflow Find/Replace but Increment Value

2

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

मैं थोड़ा ओपी से अधिक परिष्कृत एक समस्या के लिए एक समाधान के लिए देख रहा था - बढ़ती संख्या

जैसे के साथ एक ही बात से संख्या के साथ कुछ की प्रत्येक पुनरावृत्ति की जगह कुछ इस तरह की जगह:

<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" /> 

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

/** 
* <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" 
3

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

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

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

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

बधाई आप इसे :)

3

012 किया

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

+0

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

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 > result.txt का उपयोग कर फ़ाइल में $ tmp स्टोर कर सकते हैं। इसे कॉलम में होने की आवश्यकता नहीं है।