Блокнот ++ постепенно заменить - PullRequest
78 голосов
/ 30 сентября 2011

Допустим, я хочу иметь 10 строк данных, но я хочу, чтобы значение увеличивалось для каждой строки или части данных. Как мне увеличить это значение?

Например .... Если у меня есть эти строки, есть ли регулярное выражение для замены значений идентификатора на приращения?

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

Ответы [ 8 ]

148 голосов
/ 30 сентября 2011

Не уверен насчет регулярных выражений, но есть способ сделать это в Notepad ++, хотя он не очень гибкий.

В приведенном вами примере, удерживайте Alt и выберите столбец чисел, который вы хотите изменить. Затем перейдите к Edit->Column Editor и выберите переключатель Number to Insert в появившемся окне. Затем укажите свой начальный номер и приращение и нажмите ОК. Следует записать увеличенные числа.

Примечание: это также работает с функцией Multi-editing (выбор нескольких местоположений при сохранении нажатой клавиши Ctrl ).

Это, однако, далеко не такая гибкость, которую большинство людей сочло бы полезным. Notepad ++ хорош, но если вам нужен действительно мощный редактор, который может с легкостью справляться с подобными вещами, я бы сказал, используйте Vim.

14 голосов
/ 04 февраля 2013

Я искал ту же функцию сегодня, но не смог сделать это в Notepad ++.Тем не менее, у нас есть TextPad для нашего спасения.У меня это сработало.

В диалоге замены TextPad включите регулярное выражение;тогда вы можете попробовать заменить

<row id="1"/>

на

<row id="\i"/>

. Посмотрите на эту ссылку, чтобы узнать о других замечательных возможностях замены TextPad - http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/

5 голосов
/ 12 июля 2012

Поскольку реальных ответов ограничено, я поделюсь этим обходным путем.Для действительно простых случаев, таких как ваш пример, вы делаете это задом наперед ...

С этого

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

Очевидные вещи, но они могут помочь кому-то, выполняющему нечетную одноразовую хакерскую работу, сохранить несколько нажатий клавиш.

4 голосов
/ 13 апреля 2016

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

Notepad ++ оснащен редактором Edit -> Column «Alt + C», который может работать наПрямоугольное выделение двумя различными способами: Coledit.png вставка некоторого фиксированного текста в каждую строку, включая текущую строку и после нее, в столбец точки вставки (также называемой кареткой).Первоначально выделенный текст остается нетронутым.Как показано на рисунке, линейный ряд чисел может быть вставлен таким же образом.Начальное значение и приращение должны быть предоставлены.Опция заполнения слева нулями является опцией, и число может быть введено в основание 2, 8, 10 или 16 - так будут отображаться вычисленные значения, причем заполнение основано на наибольшем.

3 голосов
/ 25 марта 2016

У меня была такая же проблема с более чем 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

Поздравляю, вы сделали это:)

3 голосов
/ 06 марта 2014


Решения, предложенные выше, будут работать, только если данные выровнены.
См. Решение в ссылке с использованием плагина PythonScript Notepad ++, оно прекрасно работает!

stackoverflow Поиск / замена, но увеличениеЗначение

2 голосов
/ 16 мая 2014

(Публикация на случай, если кто-то может ее использовать).

Я искал решение для проблемы, более сложной, чем 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 голос
/ 15 ноября 2016

Вы можете сделать это, используя Powershell через регулярное выражение и цикл foreach, если вы храните свои значения в файле 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. Для этого не нужны данные в столбцах.

...