Notepad , Modification en masse
Résolu- Notepad++ recherche plusieurs mots
- Telecharger notepad++ - Télécharger - Édition & Programmation
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Notepad++ android - Télécharger - Traitement de texte
- Recherche adresse - Guide
- Recherche musique - Guide
5 réponses
27 févr. 2024 à 04:12
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
Modifié le 27 févr. 2024 à 13:47
Bonjour,
Pour faire simple dans Notepad++ on peut:
Rechercher: ^([0-9][0-9])(.*);;;;
Remplacer par: $1$2$1
Cocher Boucler et Expression régulière
Et faire Remplacer tout autant de fois que ;;;; est contenu le + grand nombre de fois dans une ligne.
Ici 6 fois puisque la ligne 3 contient 6 fois ;;;;
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 question27 févr. 2024 à 09:13
Salut,
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...
27 févr. 2024 à 12:58
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).
27 févr. 2024 à 13:49
Le souci des références de mémoire est que ça ne marche que sur une seule ligne de regex, or dans notepad, on est sur 2 lignes : rechercher, remplacer sans que les deux ne soient liées.
27 févr. 2024 à 14:42
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
27 févr. 2024 à 17:40
Merci Mamiemando pour cet exemple
29 févr. 2024 à 15:04
Est-ce que ton problème est résolu ?