Remplacer une chaine de caractères dans un fichier texte

Vous avez réalisé un script utile, faites en profiter la communauté !

Modérateur : WIN32-[GG]

Bigfish
Batcheur débutant
Messages : 26
Enregistré le : 08 août 2008 18:46

Remplacer une chaine de caractères dans un fichier texte

Message par Bigfish »

Bonjour,

Voici une methode qui permet de remplacer une chaine de caractères dans un fichier texte

Ce qui suit est globalement une copie d'une reponse que j'ai faite ici : http://www.codes-sources.com/infomsg_RE ... 2.aspx?p=3

pour commencer je cree un fichier texte appelé LeVillageGaulois.txt et qui ce trouve dans c:\temp.

Voici sa structure :

Asterix
Obelix
Milou
Abraracourcix
Panoramix
Agecanonix

ceux qui connaissent la fameuse BD auront rapidement compris que ce fichier contient une erreur que l'on vas corriger

maintenant le batch puis quelques explications :

Code : Tout sélectionner

----------------------------------------------------------------------------

@ echo off
rem -----------------------------------------------
rem remplacer une chaine de caractères dans un fichier texte
rem cree par Bigfish alias Philippe E
rem le 08-08-08
rem -----------------------------------------------

set chemin=c:\temp\

rem si le fichier n'existe pas ou n'a pu etre trouve, on arrete tout
if not exist %chemin%LeVillageGaulois.txt goto fin

rem on cherche le numero de ligne et on l'ecrit dans un fichier tmp.txt
rem cette valeur est sous la forme d'une chaine: [numeros de ligne]valeur recherchee
type %chemin%LeVillageGaulois.txt | find /n /i "milou" > %chemin%tmp.txt

rem on recupere cette valeur pour la mettre dans une variable
for /f %%i in (%chemin%tmp.txt) do set numligne=%%i

rem on en profite pour verifier que quelque chose a bien ete trouve
if "%numligne%" == "" goto rientrouvee

rem on recupere le numero de ligne dans la chaine: [numeros de ligne]valeur recherchee
set numligne=%numligne:~1,1%
set /a numligne=numligne-1

rem creation d'un fichier temporaire a partir du fichier source  mais sans la ligne trouvée
type %chemin%LeVillageGaulois.txt | find /v /i "milou" > %chemin%tmp.txt

rem on efface le fichier source.
del %chemin%LeVillageGaulois.txt

rem on boucle sur toute les lignes du fichier temporaire en passant chaque ligne en parametre a la subroutine (%%i)
set compteur = 1
for /f %%i in (%chemin%tmp.txt) do call :subroutine %%i

rem la boucle est terminee on efface le fichier temporaire
del %chemin%tmp.txt
echo modification terminee
pause
goto fin

:rientrouvee
del %chemin%tmp.txt
echo la ligne recherchee n'a pu etre trouvee
pause
goto fin

:subroutine
rem on recree le fichier source avec chaque ligne du fichier temporaire via le parametre %1
echo %1 >> %chemin%LeVillageGaulois.txt
set /a compteur=compteur+1
rem si compteur est = au numero de ligne qui precede la ligne a remplacer on ajoute la nouvelle ligne
if %compteur% == %numligne% echo Idefix >> %chemin%LeVillageGaulois.txt

:fin
rem @33ddI7IHd
--------------------------------------------------------------
Quelques explications :

Pourquoi : type %chemin%LeVillageGaulois.txt | find /n /i "milou" > %chemin%tmp.txt
et pas directement : find /n /i "milou" %chemin%LeVillageGaulois.txt > %chemin%tmp.txt

et bien la premiere solution renvoi :

[3]Milou

alors que la 2ieme solution renvoi :

---------- C:\TEMP\TEST.TXT
[3]Milou

la premiere solution sera evidemment plus simple a gerer vu qu'elle renvoi directement ce qui nous interesses.

comment ca marche :
la commande type liste le contenu du fichier specifier, puis le signe de redirection | (appele pipe) redirige le resultat de la commande type sur la commande find. Cette commande find va alors chercher ligne par ligne la chaîne qui nous interesses.
Ici la nuance est que la premiere solution fait une recherche ligne par ligne alors que la deuxieme solution fait une recherche sur le fichier.
les options de la commande find utilisées dans ce batch:
/V Affiche toutes les lignes ne contenant pas la chaîne spécifiée.
/N Affiche les numéros de ligne avec les lignes affichées.(les lignes qui contiennent la chaîne recherchée)
/I Ignore la casse lors de la recherche de la chaîne.

A+

33ddI7IHd
Modifié en dernier par Bigfish le 25 nov. 2008 17:14, modifié 1 fois.
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: Remplacer une chaine de caractères dans un fichier text

Message par flox »

Bonjour,

et merci d'avoir partagé votre batch, qui je pense sera utile pour nombre d'entre nous.

Cdl
Cyboulette
Batcheur occasionnel
Messages : 5
Enregistré le : 10 mars 2009 00:48

Re: Remplacer une chaine de caractères dans un fichier texte

Message par Cyboulette »

Tiens, tiens, cette subroutine a l'air super intéressante, je crois que je vais enfin pouvoir résoudre mon problème, merci d'avance !
el0ka
Batcheur occasionnel
Messages : 5
Enregistré le : 08 nov. 2009 13:16

Re: Remplacer une chaine de caractères dans un fichier texte

Message par el0ka »

Bonjour, et merci pour ce code qui m'aide bien...

Cependant j'ai du mal a l'adapté a mes besoin, j'explique :

j'ai besoin d'un batch qui me permet d'entrer (et enregistrer dans un .txt) mes horaires de travaille. il est en partie fait, ce que je n'arrive pas a faire, c'est en lui indiquant un horaire dans %var1% (ex: 14h30) si j'ai fini a cette heure, et que j'aurais du finir a 11h30, le batch me calcul automatiquement le nombre d'heure suppl (avec une soustraction), MAIS la commande set /a soustr=%var1%-%var2% ne peut pas se faire si une des deux variable contient mon "H"...

j'ai donc pensé exporter %var1% dans un fichier texte pour remplacer le "H" par une virgule "," (qui je pense doit passer pour la soustraction...) ! seulement, il faudrait découpé %var1% en trois variable (%heur%;%monh%;%min%) sur trois ligne dans le fichier .txt pour qu'il puisse etre utilisé par ton code ...

en esperant m'etre bien fait comprendre .... Voici les modif ke j'ai apporter a ton code pour l'adapté a mes besoins...

Code : Tout sélectionner

set /p h2=Tapez vos horraire de fin:
echo %h2% > vareur.txt

if not exist vareur.txt goto fin
type vareur.txt | find /n /i "h" > tmp.txt
for /f %%i in (tmp.txt) do set numligne=%%i
set numligne=%numligne:~1,1%
set /a numligne=numligne-1
type vareur.txt | find /v /i "h" > tmp.txt
del vareur.txt
set compteur = 1
for /f %%i in (tmp.txt) do call :subroutine %%i
del tmp.txt
goto montrucsuite

:subroutine
echo %1 >> vareur.txt
set /a compteur=compteur+1
if %compteur% == %numligne% echo "," >> vareur.txt
goto fin
 :fin
Il n'y a pas tout mon code, mais je pense que suis la suffis, puisque c'est lui qu'il faut adapté... je sait que ma solution se trouve dans la commande for avec un "delims" ou "token" mais j'avoue avoir toujours eu un probleme avec cette commande...

je ne connais pas du tout la sinthaxe exacte.... Merci d'avance a tous ceux qui pourront m'aider.
Laddy
SuperBatcher
Messages : 190
Enregistré le : 04 juil. 2008 13:40

Re: Remplacer une chaine de caractères dans un fichier texte

Message par Laddy »

bonjour
dans la logique il faut travailler avec des minutes.
Envie de partager vos programmes :
Poster vos codes sur BatchClipboad.info
el0ka
Batcheur occasionnel
Messages : 5
Enregistré le : 08 nov. 2009 13:16

Re: Remplacer une chaine de caractères dans un fichier texte

Message par el0ka »

merci, mais je comprend pas trop se que sa change ? en fait, j'aimerais pouvoir entrer l'heure au formmat 14h30 et que le programme fasse la convertion seul ! (que ce soit en minutes ou chiffres decimal....) mon probleme en très résumé est de viré le "H" entrer par l'utilisateur, automatiquement !!

pouvez vous m'aider...
Merci.
Laddy
SuperBatcher
Messages : 190
Enregistré le : 04 juil. 2008 13:40

Re: Remplacer une chaine de caractères dans un fichier texte

Message par Laddy »

le batch ne prend pas les chiffres à virgule pour les calculs

bon courage
Envie de partager vos programmes :
Poster vos codes sur BatchClipboad.info
el0ka
Batcheur occasionnel
Messages : 5
Enregistré le : 08 nov. 2009 13:16

Re: Remplacer une chaine de caractères dans un fichier texte

Message par el0ka »

Oups, c'est sur !! ben, merci pour l'infos ! je continue donc a chercher une solution.... Si quelqu'un a une idée pour faire se que je veut je suis preneur !!
el0ka
Batcheur occasionnel
Messages : 5
Enregistré le : 08 nov. 2009 13:16

Re: Remplacer une chaine de caractères dans un fichier texte

Message par el0ka »

Rebonjour a tous,

toujours pour mon petit soucis est ce qu'il ya moyen de separer en plusieur variable, la valeur d'une seule variable..... (ex: var=14H30 a transformer en var1=14 var2=H var3=30)....

Merci pour tous debut de solution :( :cry:
el0ka
Batcheur occasionnel
Messages : 5
Enregistré le : 08 nov. 2009 13:16

Re: Remplacer une chaine de caractères dans un fichier texte

Message par el0ka »

un pti UP s'il vous plait !! j'ai vraiment besoin d'aide, c forcement possible a faire mais je ne sait pas comment ........ Please HELP !!!!!!!!!!

Merci !
Répondre