Notepad ++は段階的に置き換えます


83

10行のデータが必要であるが、行またはデータの一部ごとに値をインクリメントしたいとします。その値をインクリメントするにはどうすればよいですか?

たとえば....これらの行がある場合、id値を置き換えてインクリメントする正規表現の方法はありますか?

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

---これが私がそれをどのように見せたいかです...(最初の行のIDが上がれば大丈夫です)

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

Notepad ++の置換は、計算も正規表現も行いません。
琥珀色

可能であれば、それは信じられないほど難しいです。正規表現には数値の概念がなく(したがって+1はありません)、正規表現に一致するときにデータを蓄積する簡単な方法はありません(したがって、「次の」一致はありません)。本当にこれを自動化する必要がある場合は、XSLTがここで役立つ可能性があります。

@Amber Notepad ++には、制限された正規表現機能があります。
カロリス2011

@Karolis私はそれをよく知っています。私は単に、正規表現(本質的に)もNotepad ++の検索と置換の実装も、その正規表現を使用して、置換の数学をサポートしていないと言っていました。
琥珀色

1
可能な方法として正規表現が言及(およびタグ付け)されましたが、OPは、Notepad ++がタスクを実行できるかどうかを知るよりも、特定の方法にあまり関心がないようでした。
jbobbins 2015

回答:


155

正規表現についてはよくわかりませんが、柔軟性はあまりありませんが、Notepad ++でこれを行う方法があります。

与えた例では、Alt変更したい番号の列を押したまま選択します。次にEdit->Column EditorNumber to Insert表示されるウィンドウのラジオボタンに移動して選択します。次に、最初の数と増分を指定して、[OK]をクリックします。インクリメントされた数値を書き出す必要があります。

注:これはこのMulti-editing機能でも機能します(Ctrlキーを押したままで複数の場所を選択します)。

ただし、これは、ほとんどの人が役立つと思われる柔軟性にはほど遠いものです。Notepad ++は素晴らしいですが、このようなことを簡単に実行できる本当に強力なエディターが必要な場合は、Vimを使用すると思います。


4
あいまいな列機能と、vimがより強力なエディターであることに注意してください。;)
スペンサーラスブン2011

Notepad ++は素晴らしいです、これと同じくらい強力なオンラインテキストエディタがあれば素晴らしいでしょう。
ルイスFeijãoVeronesi

1
私にとっては、Alt + Shiftで列を選択し、挿入する数値を実行します。完全に機能
Rombus 2015

ありがとう!この機能は素晴らしいです。また、ダブルクリックして列を選択することができました。
Rahim Khoja 2016

ただすごい!300個の挿入ステートメントを準備する必要があるときに私の命を救った
DoNuT 2018年

14

今日は同じ機能を探していましたが、Notepad ++ではこれを行うことができませんでした。ただし、TextPadが役に立ちます。それは私のために働いた。

TextPadの置換ダイアログで、正規表現をオンにします。その後、交換してみてください

<row id="1"/>

沿って

<row id="\i"/>

TextPadのさらに驚くべき置換機能については、このリンクをご覧ください-http //sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/


1
実際に注意を払えば助かると思います。SublimeTextをインストールすることになりました。:)ありがとう。
rtf 2013年

1
ただし、必ず「すべて置換」ボタンを押してください。「次を置換」はカウンターをインクリメントしません。これを理解するのに何時間もかかりました。\ i 1から始まり、1ずつ増加する数値に置き換えます。\ i(10)10から始まり、1ずつ増加する数値に置き換えます。\ i(0,10)0から始まり、10ずつ増加する数値に置き換えます。\ i( 100、-10)100から始まり、-10ずつ減少する数値に置き換えます。
Venkatesh Muniyandi 2017

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

または、Excel /スプレッドシートを使用してデータについてハッキングできる同様の方法です。元のデータを列に分割し、必要に応じて値を操作するだけです。

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

明らかなことですが、それは誰かが奇妙な1回限りのハックジョブを実行していくつかのキーストロークを節約するのに役立つかもしれません。


5
なしで正規表現モードで置き換える(.*)<row id="\1" />. matches newline100%そこに到達します。
satibel 2016

4

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

Notepad ++には、編集->列「Alt + C」エディターが装備されており、2つの異なる方法で長方形の選択を処理できます。Coledit.pngは、現在の行を含むすべての行に、挿入の列に固定テキストを挿入します。ポイント(別名キャレット)。最初に選択されたテキストは変更されません。写真が示すように、線形の一連の数字を同じ方法で挿入できます。開始値と増分が提供されます。ゼロを使​​用した左パディングはオプションであり、数値は基数2、8、10、または16で入力できます。これは、計算値も表示される方法であり、パディングは最大値に基づいています。


あなたの答えを読んで混乱を避けるために投稿に画像を添付するとはるかに良いでしょう
Aminah Nuraini 2016


1

(誰かがそれを使用する可能性がある場合の投稿)。

私はOPよりも少し洗練された問題の解決策を探していました-何かのすべての出現を番号で置き換え、番号を増やした同じもので置き換えます

例:次のようなものを置き換える:

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

オンラインで解決策を見つけることができなかったので、私はgroovyで独自のスクリプトを作成しました(少し醜いですが、仕事をします):

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

値をファイルinput.txtに保存すると、Powershellを使用して正規表現とforeachループを介して実行できます。

$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。これは、データが列にある必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.