Changer lignes et expressions dans un fichier.txt [Résolu]

Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
- - Dernière réponse : Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
- 30 juil. 2019 à 11:30
Bonjour,
Pour un fois, j'ai un sujet complexe à vous proposer :-)
Voilà je possède un fichier.txt qui est composé de x lignes.
Celui-ci se présente ainsi:
IDENTH ID=BERNARD,
COMMENT='éleveur de chevaux',
TYPE=,
TAGE=25,
TSEXE=M,
TTAILLE=183,
FPOID=85,
OBJET=D:\import\BALLON\&(lieu).&(raison),
NFORME=U
IDENTF ID=CECILE,
COMMENT='chef de projet',
TYPE=,
TAGE=32,
TSEXE=F,
TTAILLE=167,
FPOID=55,
OBJET=,
NFORME=T
etc...

Mon but c'est de changer toutes les lignes suivantes:
TSEXE=M, par TSEXE=MASCULIN,
TSEXE=F, par TSEXE=FEMININ,
Mais aussi (et plus complexe) les expressions:
OBJET=D:\import\BALLON\&(lieu).&(raison),
par
OBJET=D:\import\BALLON\$site.$topo

Je ne vous cache pas que j'ai tenté plein de chose mais sans résultat concluant.
Auriez-vous une idée comment procéder ?
Merci d'avance pour votre aide éventuelle
Ka-El
Afficher la suite 

5 réponses

Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
0
Merci
De mon côté, je parviens au résultat ci-dessous avec le programme suivant:
@echo off&cls
set $fichier=fichier.txt
set $chaine=TSEXE=M
set $remplace=TSEXE=MASCULIN

if exist output.txt del output.txt
setlocal EnableDelayedExpansion
for /f "delims=" %%a in ('type %$fichier%') do (
set $ligne=%%a
set $ligne=!$ligne:%$chaine%=%$remplace%!
echo !$ligne!>>output.txt)
echo OK


je conserve toutes mes lignes, mais au niveau de celles qui sont à remplacer, ça me donne un résultat de ce type:
M=TSEXE=MASCULIN=M

J'imagine que c'est le "=" dans la variable qui est mal interprété...
pour la 1ère partie de mon problème, c'est donc pas très concluant.
Un peu d'aide svp ? :-)
Commenter la réponse de Ka-El
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2140
0
Merci
Bonjour,

Voilà pour la première partie de ton problème :
@echo off
set $fichier=fichier.txt

if exist output.txt (del output.txt)

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

if "%%~A"=="TSEXE" (if "%%~B"=="M," (echo %%A=MASCULIN,))
if "%%~A"=="TSEXE" (if "%%~B"=="F," (echo %%A=FEMININ,)) else (echo %%A=%%B)

) >>output.txt

pause
exit



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Commenter la réponse de barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2140
0
Merci
Voilà pour la première et la deuxième partie du problème :
@echo off
set $fichier=fichier.txt
set $site=Metz
set $topo=Je sais pas

if exist output.txt (del output.txt)

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

if "%%~A"=="OBJET" (if "%%~B"=="D:\import\BALLON\" (echo %%A=%%B%$site%.%$topo%))
if "%%~A"=="TSEXE" (if "%%~B"=="M," (echo %%A=MASCULIN,))
if "%%~A"=="TSEXE" (if "%%~B"=="F," (echo %%A=FEMININ,))
if not "%%~A"=="OBJET" (if not "%%~A"=="TSEXE" (echo %%A=%%B))

) >>output.txt

pause
exit



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2140 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Je n'ai pas ce problème avec mon fichier de test.

Il faudrait que tu me transmettes ton fichier si tu veux que je puisse trouver une solution.
Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
J'ai l'impression que j'ai un problème pour envoyer un mp ...
As-tu reçu quelquechose ?
barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2140 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Non
Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Ah ! cette fois, il est parti :-)
merci pour ton aide
barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2140 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
De rien, je vais regarder ça.
Commenter la réponse de barnabe0057
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
0
Merci
Avec la correction fournie par Barnabe0057 (merci encore !), je n'ai plus le problème évoqué précédemment.

Voici le code:
@echo off
set $fichier=fichier.txt
set $site=Metz
set $topo=Je sais pas

if exist output.txt (del output.txt)

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

if "%%~A"=="FNAME" (if "%%~B"=="D:\import\REFBIP\" (echo %%A=%%B%$site%.%$topo%) else (echo %%A=%%B))
if "%%~A"=="FRECFM" (if "%%~B"=="S," (echo %%A=MASCULIN,))
if "%%~A"=="FRECFM" (if "%%~B"=="F," (echo %%A=FEMININ,))
if not "%%~A"=="FNAME" (if not "%%~A"=="FRECFM" (echo %%A=%%B))

) >>output.txt

pause
exit


En revanche, j'ai omis de précisé que les expressions peuvent être précédées par des arborescences différentes.
par exemple:
OBJET=D:\import\BALLON\&(lieu).&(raison),
OBJET=C:\toto\bateau\avions\&(lieu).&(raison),
OBJET=C:\source\&(lieu).&(raison),
etc...

Et là forcément il n'est plus question de faire une recherche cadrée sur une arborescence précise puisque celle-ci est susceptible de prendre des formes multiples.

Merci d'avance pour votre aide
Commenter la réponse de Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
0
Merci
Je vais clôturer ce dossier, car pour la partie expression, je pense reposer la problématique autrement dans un autre sujet (je vais essayer d'être un peu plus clair)
En tout cas MERCI beaucoup Barbabe, tu m'as vraiment dépanné ! :-)
Commenter la réponse de Ka-El