Notepad++ remplacer progressivement

disons que je veux avoir 10 lignes de données mais je veux une valeur à incrémenter pour chaque ligne ou morceau de données. Comment faire pour incrémenter cette valeur?

par exemple....Si j'ai ces lignes, y a-t-il un moyen regex de remplacer les valeurs d'id pour incrémenter?

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

- - - voici à quoi je voudrais que ça ressemble... (si la première ligne de l'id monte d'un des thats ok)

<row id="1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5" />
72
demandé sur dreftymac 2011-09-30 00:07:47

8 réponses

pas sûr de regex, mais il y a un moyen pour vous de le faire dans le bloc-notes++, bien qu'il ne soit pas très flexible.

dans l'exemple que vous avez donné, tenez Alt et sélectionnez la colonne des nombres que vous voulez changer. Puis allez à Edit->Column Editor et sélectionnez le bouton Number to Insert radio dans la fenêtre qui apparaît. Ensuite, spécifiez votre nombre initial et incrément, et appuyez sur OK. Il devrait écrire les nombres incrémentés.

Note: cela fonctionne aussi avec la fonctionnalité Multi-editing (sélection de plusieurs emplacements tout en maintenant la touche Ctrl enfoncée).

ce n'est, cependant, pas du tout la flexibilité que la plupart des gens trouveraient utile. Notepad++ est génial, mais si vous voulez un éditeur vraiment puissant qui peut faire des choses comme ça avec facilité, je dirais utiliser Vim.

143
répondu voithos 2016-08-01 06:32:51

je cherchais la même fonctionnalité aujourd'hui mais je ne pouvais pas le faire dans le bloc-notes++. Cependant, nous avons TextPad à notre secours. Il a travaillé pour moi.

dans la boîte de dialogue Remplacer de TextPad, activez regex; vous pouvez alors essayer de remplacer

<row id="1"/>

par

<row id="\i"/>

Regardez ce lien pour d'autres fonctions étonnantes de remplacement de TextPad - http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/

13
répondu Bipin Mangwani 2013-02-04 09:22:48

Puisqu'il y a des réponses réelles limitées, je vais partager cette solution. Pour vraiment cas simples comme votre exemple vous le faites à l'envers...

de ce

1
2
3
4
5

remplacer \r\n par " />\r\n<row id=" et vous obtiendrez 90% du chemin

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

ou est une façon similaire, vous pouvez hacker sur les données avec excel/tableur. Il suffit de diviser vos données originales en colonnes et de manipuler les valeurs que vous avez besoin.

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

des choses évidentes, mais cela peut aider quelqu'un qui fait un travail de piratage exceptionnel pour sauver quelques touches.

5
répondu KCD 2012-07-12 03:40:54



les Solutions suggérées ci-dessus ne fonctionneront que si les données sont alignées..

voir solution dans le lien En utilisant le plugin Notepad++ de PythonScript, ça marche super!

stackoverflow Rechercher/Remplacer, mais la Valeur d'Incrément

3
répondu user648026 2017-05-23 12:10:30

j'ai eu le même problème avec plus de 250 lignes et voici comment je l'ai fait:

par exemple:

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

vous mettez le curseur juste après le "1" et vous cliquez sur alt + shift et commencez à descendre avec Flèche vers le bas jusqu'à ce que vous atteigniez la ligne de fond maintenant vous voyez un groupe de sélections cliquez sur Effacer pour effacer le numéro 1 sur chaque ligne simultanément et passer à Edit -> Column Editor et sélectionnez Number to Insert puis mettre 1 dans le nombre initial champ et 1 incrémenté par champ et cochez zéro numéros et cliquez sur ok

Félicitations, vous avez réussi :)

3
répondu Mourad El Aomari 2016-03-25 12:43:32

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

Bloc-Notes++ est fourni avec un éditeur de colonne "Alt+C" qui peut travailler sur une sélection rectangulaire de deux façons différentes: Coledit.png insertion d'un texte fixe sur chaque ligne, y compris et en suivant la ligne courante, à la colonne du point d'insertion (aka caret). Le texte initialement sélectionné est laissé intact. Comme l'illustre l'image, une série linéaire de les nombres peuvent être insérés de la même manière. La valeur de départ et d'incrément. Le remplissage à gauche avec des zéros est une option, et le nombre peut être entré en base 2, 8, 10 ou 16 - c'est ainsi que les valeurs calculées seront affichées aussi, le remplissage étant basé sur le plus grand.

3
répondu Ailson Costa 2016-04-13 19:05:50

(affichage dans le cas où quelqu'un pourrait avoir un usage de celui-ci).

je cherchais une solution pour un problème un peu plus sophistiqué que OP-remplacer chaque occurrence de quelque chose avec le nombre par la même chose avec le nombre incrémenté

E. G. En remplaçant quelque chose comme ceci:

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

par ceci:

<row id="2" />
<row id="3" />
<row id="2" />
<row id="4" />
<row id="2" />

n'aurions pas pu trouver la solution en ligne, j'ai donc écrit mon propre script groovy (un peu laid, mais fait le travail):

 /**
 * <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
répondu Kranach 2014-05-19 09:15:01

vous pouvez le faire en utilisant Powershell par l'intermédiaire de regex et foreach boucle, si vous stockez vos valeurs dans le fichier entrée.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 {$_}; }

après cela, vous pouvez stocker $tmp dans le fichier en utilisant $tmp > result.txt . Cela n'a pas besoin de données pour être dans les colonnes.

1
répondu Ivan G 2016-11-14 22:14:51