Блокнот ++ постепенно заменяет
Предположим, что я хочу иметь 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" />
Ответы
Ответ 1
Не уверен в регулярном выражении, но есть способ сделать это в Notepad ++, хотя он не очень гибкий.
В приведенном примере удерживайте Alt
и выберите столбец чисел, который вы хотите изменить. Затем перейдите к Edit->Column Editor
и выберите переключатель Number to Insert
в появившемся окне. Затем укажите начальное число и приращение и нажмите "ОК". Он должен выписать инкрементированные числа.
Примечание: это также работает с функцией Multi-editing
(при выборе нескольких позиций при сохранении клавиши Ctrl).
Это, однако, не так близко к гибкости, что большинство людей будет полезно. Notepad ++ отлично, но если вы хотите действительно мощный редактор, который легко справится с такими вещами, я бы сказал, что используйте Vim.
Ответ 2
Я искал одну и ту же функцию сегодня, но не смог сделать это в Notepad ++. Однако у нас есть TextPad для нашего спасения. Это сработало для меня.
В диалоговом окне замены TextPad включите регулярное выражение; то вы можете попробовать заменить
<row id="1"/>
<row id="\i"/>
Взгляните на эту ссылку для дальнейших удивительных функций замены TextPad -
http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/
Ответ 3
Поскольку есть ограниченные реальные ответы, я поделюсь этим обходным решением. Для действительно простых случаев, таких как ваш пример, вы делаете это назад...
Из этого
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/spreadsheet. Просто разделите исходные данные на столбцы и манипулируйте значениями по мере необходимости.
| <row id=" | 1 | " /> |
| <row id=" | 1 | " /> |
| <row id=" | 1 | " /> |
| <row id=" | 1 | " /> |
| <row id=" | 1 | " /> |
Очевидный материал, но он может помочь кому-то сделать нечетную одноразовую работу, чтобы сохранить несколько ключевых штрихов.
Ответ 4
Предлагаемые выше решения будут работать только при выравнивании данных.
См. Решение по ссылке, используя плагин PythonScript Notepad ++, он отлично работает!
fooobar.com/questions/82661/...
Ответ 5
У меня была такая же проблема с более чем 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
Поздравляем, что вы это сделали:)
Ответ 6
http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text
Notepad ++ оснащен редактором Edit → Column "Alt + C", который может работать с прямоугольным выбором двумя способами: Coledit.png
вставляя некоторый фиксированный текст в каждую строку, включая и следуя текущей строке, в столбце точки вставки (aka caret). Первоначально выделенный текст остается нетронутым.
Как показано на рисунке, линейная серия чисел может быть вставлена таким же образом. Должны быть указаны начальное значение и приращение. Левая прокладка с нулями - это опция, и число может быть введено в базу 2, 8, 10 или 16 - так будут отображаться вычисленные значения, а заполнение основано на наибольшем.
Ответ 7
(Проводка в случае, если кто-то может ее использовать).
Я искал решение проблемы, немного более сложное, чем 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" />
Не удалось найти решение в сети, поэтому я написал свой собственный script в 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"
Ответ 8
Вы можете сделать это, используя Powershell через цикл regex и 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
. Это не требует, чтобы данные были в столбцах.