Блокнот++ постепенно заменить
допустим, я хочу иметь 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" />
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++ плагин, он отлично работает!
у меня была такая же проблема с более чем 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