Modifier variables dans un fichier

Résolu
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   -  
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Pour davantage de clarté, j'ouvre ce nouveau sujet.
Il s'agit donc de modifier les expressions suivantes dans un fichier:
&(x_numbr) par &NUM
&(x_large_caste) par &ESPA
&(x_sms2) par &YEAR

Voici un exemple de fichier (celui peut être composé de n lignes):
ACTION NO='TECH',
INTITULE='TEST DU PROG',
ARMA='CAT',
RADIO='S',
PROG='D:\toto\bateau\import\&(x_numbr).cmd',
FORM='S',
COMPTE='1024',
CRYPTE='B',
RATIO='D:\arborescence\&(x_large_caste)_&(x_sms2).dos',
BLAZON='S',
VALEUR='1024',
NTYPO='B',
ZIPPED='U',
CIBLE='REPLACE'
ACTION NO='RELANCE',
INTITULE='chercher le bon numero',
ARMA='CAT',
RADIO='S',
PROG='D:\tableau\bord\atelier\armure\&(x_numbr).bat',
FORM='S',
COMPTE='1024',
CRYPTE='B',
RATIO='D:\depot\FORUM\label\&(x_sms2).&(x_large_caste)',
ZIPPED='U',
CIBLE='REPLACE'
ACTION NO='COPIER',
INTITULE='Atelier a programmer',
ARMA='CAT',
RADIO='F',
PROG='D:\lieu\rebond\xpr&(x_numbr).bat',
FORM='F',
COMPTE='250',
CRYPTE='A',
RATIO='D:\rue\annonce\tour\&(x_sms2).&(x_large_caste)_ARCHI',
ZIPPED='U',
CIBLE='REPLACE'
etc...


Du coup, on doit aboutir à ce résultat:
ACTION NO='TECH',
INTITULE='TEST DU PROG',
ARMA='CAT',
RADIO='S',
PROG='D:\toto\bateau\import\&NUM.cmd',
FORM='S',
COMPTE='1024',
CRYPTE='B',
RATIO='D:\arborescence\&ESPA_&YEAR.dos',
BLAZON='S',
VALEUR='1024',
etc...


Bon je cherche, je cherche, mais je ne trouve pas comment effectuer cette modification sur un fichier qui compte une centaine de lignes.
SI vous avez une idée, je suis preneur ! :-)
Merci beaucoup pour votre aide
Ka-El
A voir également:

3 réponses

barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
Bonjour,

Ca devrait être quelque chose comme ça :

@echo off
Setlocal EnableExtensions EnableDelayedExpansion

set $fichier=fichier.txt
if exist output.txt (del output.txt)

for /f "tokens=1,* delims==" %%A in (%$fichier%) do (

set ligne=%%B

if "%%~A"=="RATIO" (
set ligne=!ligne:^(x_large_caste^)=ESPA!
set ligne=!ligne:^(x_sms2^)=YEAR!
echo %%A=!ligne!
)

if "%%~A"=="PROG" (
set ligne=!ligne:^(x_numbr^)=NUM!
echo %%A=!ligne!
)

if not "%%~A"=="RATIO" (if not "%%~A"=="PROG" (echo %%A=%%B))

) >>output.txt

pause
exit


0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Salut barnabe0057,
Quel talent ! Ton code fonctionne du tonnerre ! :-)
Merci énormément ! Depuis hier, tu m'as fait gagné au moins 3 jours de travail :-)

Ceci dit, il me reste encore un petit point à corriger.
En fait, parfois j'ai aussi la ligne suivante qui apparait:
RATIO='\',

Est-ce que dans ton code, on peut ajouter une ligne qui va supprimer le "\" ?
et donc, on se retrouvera simplement avec l'expression suivante:
RATIO='',

Merci encore pour ton aide !
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
Monsieur est servi :

@echo off
Setlocal EnableExtensions EnableDelayedExpansion

set $fichier=fichier.txt

if exist output.txt (del output.txt)

for /f "tokens=1,* delims==" %%A in (%$fichier%) do (

set ligne=%%B

if "%%~A"=="RATIO" (if "%%~B"=="'\'," (set ligne='',) else (
set ligne=!ligne:^(x_large_caste^)=ESPA!
set ligne=!ligne:^(x_sms2^)=YEAR!
)
)

if "%%~A"=="PROG" (set ligne=!ligne:^(x_numbr^)=NUM!)

echo %%A=!ligne!

) >>output.txt

pause
exit

J'ai un peu simplifié car j'avais 2-3 ECHO qui se répétait, c'est un peu plus lisible maintenant.
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Salut Barnabe,
Encore une fois, je salut ton efficacité.
Mon script fonctionne mieux que je le pensais !
Encore merci pour ton aide précieuse
@+ ;-)
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
Tant mieux si ça fonctionne comme tu veux.

Bonne continuation et à bientôt peut-être.
0