Блокнот++ постепенно заменить



допустим, я хочу иметь 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" />
667   8  

8 ответов:

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

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

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

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

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

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

<row id="1"/>

by

<row id="\i"/>

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

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

отсюда

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

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


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

stackoverflow найти / заменить, но увеличить значение

у меня была такая же проблема с более чем 250 линий, а вот как я сделал это:

например :

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

вы ставите курсор сразу после "1" и нажимаете на alt + shift и начать спускаться со стрелкой вниз, пока вы не достигнете нижней строки Теперь вы видите группу выбора нажмите на стереть, чтобы стереть число 1 на каждой строке одновременно и перейти к Edit -> Column Editor и выберите поставить 1 в поле начального числа и 1 в увеличенном поле и проверьте нулевые числа и нажмите ok

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

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

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

(проводки в случае, если кто-то может использовать его).

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

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

Comments

    Ничего не найдено.