web-dev-qa-db-ja.com

Notepad ++の増分置換

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

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

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

---これは私がそれをどのように見せたいかです...

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

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

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

注:これはMulti-editing機能でも機能します(メンテナンス中に複数の場所を選択します Ctrl キーを押した)

しかし、これは、ほとんどの人が役に立つと感じる柔軟性に近い場所ではありません。 Notepad ++は素晴らしいですが、このようなことを簡単に行える真に強力なエディターが必要な場合は、Vimを使用することをお勧めします。

149
voithos

今日は同じ機能を探していましたが、Notepad ++ではこれができませんでした。しかし、私たちには救助のためのTextPadがあります。それは私のために働いた。

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

<row id="1"/>

沿って

<row id="\i"/>

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

14
Bipin Mangwani

実際の答えは限られているため、この回避策を紹介します。 本当にあなたの例のような単純なケースでは、逆方向に実行します...

これから

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

明らかなものですが、それは誰かがいくつかのキーストロークを節約するために奇妙な一回限りのハックジョブをするのを助けるかもしれません。

5
KCD

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

Notepad ++には、編集->列「Alt + C」エディターが装備されており、2つの異なる方法で長方形の選択範囲を操作できます。ポイント(別名キャレット)。最初に選択されたテキストはそのまま残されます。図が示すように、線形の一連の数値を同じ方法で挿入できます。開始値と増分が提供されます。ゼロの左パディングはオプションであり、数値はベース2、8、10、または16に入力できます-これは計算された値も表示される方法で、パディングは最大に基づいています。

4
Ailson Costa

私は250行以上で同じ問題を抱えていましたが、ここでそれをどのようにしたのですか:

例えば ​​:

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

「1」の直後にカーソルを置き、alt + shiftをクリックし、一番下の行に到達するまで下向き矢印で下降を開始します。選択のグループが表示されます。 Edit -> Column Editorに移動してNumber to Insertを選択し、初期番号フィールドに1を、フィールドごとに1を入力して、ゼロ番号を確認してokをクリックします

おめでとうございます:)

3


上記の解決策は、データが揃っている場合にのみ機能します。
PythonScript Notepad ++プラグインを使用したリンクのソリューションをご覧ください。

stackoverflow Find/Replace but Increment Value

3
user648026

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

私は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"
2
Kranach

値をファイル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 > result.txtを使用してファイルに$ tmpを保存できます。これは、データが列にある必要はありません。

1
Ivan G