Notepad , Modification en masse
RésoluJack80 -
- Notepad++ recherche plusieurs mots
- Telecharger notepad++ - Télécharger - Édition & Programmation
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Finale notepad - Télécharger - Outils professionnels
- Recherche photo - Guide
- Je recherche une chanson - Guide
5 réponses
Bonjour,
Je ne connais pas assez notepad++ pour te dire si c'est possible ou non, mais à moins de faire une opération de substitution pour chaque ligne, je ne pense pas que ce soit possible.
Le plus simple serait sans doute d'écrire un petit script, dans le langage de ton choix (par exemple en awk, en python, ...), et faire une substitution pouvant s'appliquer plusieurs fois sur la ligne courante (en awk, fonction s'appelle dans beaucoup de langages de programmation gsub ; en python, on utiliserait la méthode replace ou une expression régulière).
Voici à quoi ça ressemblerait en python :
toto.py
import sys filename_input = sys.argv[1] filename_output = sys.argv[2] with open(filename_input, "r") as f_in: with open(filename_output, "w") as f_out: for line in f_in.readlines(): substitut = line[:2] line = line.strip().replace(";;;;", substitut) print(line, file=f_out)
Utilisation :
python toto.py filename_in.csv filename_out.csv
Résultat (contenu dans filename_out.csv) :
75-azer-165-75-btr-axt-12-15-75-qft-
82-qtr-82-18-82-bst-fgt_8285-82-60-82-
12-545-12-ghu-rtb-12-200-uti-12-10-12-82-12-rta-12-25
46-46-pkt-46-654-46-dhe-25-
Bonne chance
j'ai résolu en lançant le "remplacer tout" autant de fois que nécessaire pour arriver à 0 mise à jour.
Merci à vous tous pour vos conseils.
On peut utiliser les expressions régulières directement en Notepad++. J'espère que le lien suivant te sera utile:
https://nliautaud.developpez.com/tutoriels/web/notepadplusplus-guide-pratique/expressions-regulieres/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionSalut,
il faudrait dans ce cas utiliser les références de mémoire des expressions régulières.
J'ai eu fait un truc comme ça il y a très longtemps mais je ne souviens plus où je l'ai mis...
Peut-être en s'inspirant de ceci. En tout cas, il faudra recourir à des opérateurs non standards des expressions régulières (en admettant que ce soit faisable).
Oui, à moins qu'un opérateur non standard le permette, je ne vois pas trop comment tu peux t'en sortir avec juste une expression rationnelle. Car tu peux effectivement en une expression régulière :
- faire un remplacement de masse
- par exemple, sed -i 's/;/!/g' permet de changer tous les ';' en '!') ;
- faire une back reference à une partie de la chaîne de départ pour reconstruire la chaine d'arrivée
- par exemple, sed -i 's/\(..\).*/!\1!/g' permet d'extraire les deux premiers caractères de la chaîne d'entrée (disons 75), puis d'écrire ces deux caractères entre deux points d'exclamation, mais cela suppose de savoir exactement comment réinjecter cette référence dans la chaîne de sortie (ici !75!)
- mais je ne vois pas comment tu peux faire les deux à la fois, car il peut y avoir un nombre arbitraire de ";;;;" à substituer.
Après, il y a des utilisations de sed avancées (voir par exemple ici), mais :
- il n'est pas certain que ça résoudrait le problème,
- il n'est pas garanti que Notepad++ soit capable de supporter plusieurs opérations en une (comme c'est fait dans le lien précédent)
- il est sans doute aussi plus compliqué de trouver comment l'écrire avec une expression régulière tordue que d'écrire un petit script python ou awk
A contrario, il est assez simple d'installer python ou d'utiliser un interpréteur en ligne python (par exemple replit) quitte à adapter un peu le script #1 pour qu'il lise une chaîne de caractère (les fameuses 600 lignes) et écrive le résultat sur la sortie standard.
data = """ 75-azer-165-;;;;-btr-axt-12-15-;;;;-qft- 82-qtr-;;;;-18-;;;;-bst-fgt_;;;;85-;;;;-60-;;;;- 12-545-;;;;-ghu-rtb-;;;;-200-uti-;;;;-10-;;;;-82-;;;;-rta-;;;;-25 46-;;;;-pkt-;;;;-654-;;;;-dhe-25- """ for line in data.splitlines(): if line: substitut = line[:2] line = line.replace(";;;;", substitut) print(line)
Bonne chance