Remplacer chaînes de caractères dans un .txt

Hello,

J’ai un grand nombre de fichiers textes (des fichiers de sous-titres). Dans ces fichiers textes, certains termes sont systématiquement mal orthographiés (exemple : les noms de famille manquent toujours d’une majuscule, etc.). Ce sont toujours les mêmes termes à chaque fois, quel que soit le fichier texte, et la mauvaise orthographe est toujours la même. Je chercherais donc un outil qui me permettrait de définir une liste de couples

(terme à enlever ; terme à mettre à la place)

Chaque 1er terme d’un couple serait donc systématiquement remplacé par le 2ème terme de ce couple.

En gros, si vous connaissez la capacité correspondante de AntRenamer, ben je cherche à faire exactement la même chose, mais pour le contenu même des fichiers, pas leur nom.

(et pour les gros malins qui me diraient de faire notepad puis ctrl+H, merci, je connais déjà, et j’ai pas envie de passer dix minutes à faire l’opération pour chaque fichier :wink: )

Ah oui et donc bien sûr le but serait que la liste en question, il puisse aussi la garder en mémoire pour l’appliquer à chaque nouveau fichier que je pourrais lui balancer sans que j’ai à la retaper à chaque fois, sinon on est un peu de retour à la case notepad :wink:

Merci pour votre aide : )
Edité le 28/10/2008 à 22:18

tu as essayé en te faisant un dico perso dans word?

Avec les txt, tu n’as que l’embarras du choix …

Si tu veux garder ta liste pour la réappliquer sur de nouveaux fichiers, il faut que tu t’orientes vers deux programmes :

  • un qui transformera le fichier texte en fonction de ta liste
  • un qui détectera l’ensemble des fichiers à traiter et appliquera le premier à chacun d’eux

Ca se fait très facilement sous “Dos” (windows en mode commande) :
une boucle for pour la détection des fichiers
une commande SED (commande externe) à appliquer pour chaque changement à modifier.
Le tout dans un fichier .bat pour pouvoir le réutiliser
L’inconvénient, c’est lorsque la liste des modifications commence à s’allonger, et également si la liste nécessite d’être modifiée.

Sinon, à partir d’un tableau word ou excel, tu peux arriver à un résultat équivalent par une macro.
Ce sera un peu plus lent, mais bon …
L’avantage cette fois-ci est que ta liste est directement accessible pour modification, tu peux même envisager de créer plusieurs listes et de choisir celle qui convient au moment de l’exécution.

Merci pour les réponses.

@alain77310 : Pour le dico personnel dans Word, si je veux lui faire tout corriger sans avoir à intervenir, est-ce qu’il va pas non plus corriger d’autres trucs au passage (notammment, en se trompant) ?

@gcc : Pour le .bat… jamais fait de boucle for en .bat (bon, j’imagine que ça doit pas être la mort…) ni lu de fichier (ça doit pas être la mort non plus…) ni écrit dedans (idem)… ni fait de liste (…) individuellement rien n’a l’air énorme mais en simultané ça commence à faire beaucoup (étant donné la doc relativement pauvre sur l’implémentation concrète des fonctions du dos…) ; )

après je sais pas, si tu es capable de me donner rapidement le “coeur” du truc avec la bonne syntaxe, j’imagine que j’arriverai à me débrouiller après…

merci beaucoup en tout cas
Edité le 29/10/2008 à 18:19

Pour la doc DOS, quand tu as ouvert ta fenêtre en, mode commande, tu tapes HELP, tu vas avoir la liste des commandes disponibles.
Elles ne sont pas nombreuses, mais il faut faire avec
Ensuite, pour chacune d’elles, tu as une aide détaillée en la faisant suivre de /?
ex : DIR /? (espace avant le /)

Pour le for : FOR /? va déjà te guider un peu, mais c’est assez confus. heureusement, il y a pas mal d’exemples sur le net.
En plus, pour toi, ce sera un usage simple :
Tu peux déjà essayer de taper directement
for %i in (*.txt) do echo %i
pour te donner une idée

Tu n’as pas besoin de lire tes fichiers : la commande SED va se charger de l’ouverture, de la mise à jour et de la réécriture.
Par contre, la commande SED n’existe pas en tant que telle dans windows.
Il faut que tu la télécharges, par ex depuis
http://membres.lycos.fr/dodfr/dodutils_unixlike.htm (UnixDos)
et pour l’aide, ce sera sed -h

Le principe, c’est de lancer autant de fois la commande SED que tu as de modifs élémentaires à faire. C’est pour cela que ce n’est intéressant que si la liste est relativement courte.

Essaie en mode commande direct, et quand tu seras sûr de la syntaxe, il sera temps de regarder la mise en fichier batch.

Oui je connais : ) et c’est ce que je voulais dire par “doc minable”, c’est que l’aide incorporée est ridicule ; )

et que t’en es systématiquement réduit à aller te débrouiller en comparant divers exemples à exhiber toi-même via google : )

En tout cas pour SED, UnixDos / WinXs c’est payant, et je vais pas débourser un centime pour ce truc : ) J’ai cru voir une alternative gratuite, genre Grep, mais après téléchargement, le fichier qui parle de l’installation il fait plus de trente lignes, franchement ça vaut pas la peine :wink:

Bref, la quête continue…
Edité le 29/10/2008 à 21:27

Aide incorporée ridicule ? Certainement pas
Par contre, c’est uniquement de la doc, pas du tutorial …

Si tu bloques sur un point ou l’autre, on peut t’aider, mais difficile dans l’état actuel des choses :
On ne sait même pas sur quelle étendue tu veux appliquer ta modif :
un lecteur entier, plusieurs lecteurs, un répertoire entier, une partie de répertoire, avec ou sans sous-répertoires ?

On est d’accord… :wink:

Houlà non… En gros je veux :
ouvrir fichier
éventuellement ouvrir liste de couples
appliquer modifs…
fermer fichier…

et voilà…

après, s’il peut me faire ça sur plusieurs fichiers à la fois, tant mieux, mais à la rigueur… enfin de toute façon c’est clair que je me satisferai de moins de choses s’il faut que ça s’appuie sur la ligne de commandes plutôt que un log existant avec interface : )
Edité le 29/10/2008 à 21:35

Pas besoin d’ouvrir ni de fermer le fichier
sed -i -e “s/ancientexte/nouveautexte/g” fichierA
va réécrire fichierA en remplaçant toutes les occurences de ancientexte par nouveautexte
pour ta deuxième ligne, tu enchaines
sed -i -e “s/ancientexte2/nouveautexte2/g” fichierA
etc

Si ta liste est un peu longue, tu peux la lire (toujours sans l’ouvrir) avec un FOR /F, tu n’auras besoin comme cela que d’une seule ligne sed.
Mais il faudrait connaître le séparateur de champs que tu utilises dans ce fichier liste.

c’est sur la soluce de gcc est la mieux

mais si tu veux faire simple tu vide le dico de words ensuite ex: dupond dans ton texte remplacé par Dupond dans le dico tu met en correction auto et voilou et avec une macro on peut encor simplifier.

mais c’est sur si dans le dico tu as dupont dupond ou ducon il vat te demander

Ben, c’est parfait alors, je vais revoir pour incorporer sed dans les commandes dos…

Pour la liste, j’imagine que le plus simple (et le plus lisible à l’oeil) serait quelque chose style

mot à supprimer
mot à mettre à la place
[ligne vide]

pour chaque couple.

Voilà, c’est (entre autres) le souci de cette méthode : )

Non, il faut que les deux champs (ancien/nouveau) soient lus en même temps, donc qu’ils figurent sur une seule ligne
et qu’il n’y ait pas de ligne vide dans le fichier.
C’est pour ça qu’au début de te parlais de tableau excel ou word

Dans un fichier texte, cela donne
toto;titi
papa;papy etc

pour le séparateur, ici c’est le point virgule, mais ça peut être n’importe quel autre caractère pourvu qu’il ne risque pas de se rencontrer dans le texte proprement dit