Changer lignes et expressions dans un fichier.txt
Résolu
Ka-El
Messages postés
260
Date d'inscription
Statut
Membre
Dernière intervention
-
Ka-El Messages postés 260 Date d'inscription Statut Membre Dernière intervention -
Ka-El Messages postés 260 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Changer lignes et expressions dans un fichier.txt
- Changer dns - Guide
- Changer carte graphique - Guide
- Changer wifi chromecast - Guide
- Changer extension fichier - Guide
- Changer clavier qwerty en azerty - Guide
5 réponses
De mon côté, je parviens au résultat ci-dessous avec le programme suivant:
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 ? :-)
@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 ? :-)
Bonjour,
Voilà pour la première partie de ton problème :
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
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
Bonjour et merci barnabe0057 pour ta contribution.
Ton code fonctionne plutôt pas mal.
Mais il y a néanmoins un petit bémol, en effet dans le fichier output.txt pour la ligne "TSEXE=M", je retrouve deux lignes:
"TSEXE=M, " et "TSEXE=MASCULIN"
alors que normalement, je ne devrais retrouver que "TSEXE=MASCULIN,"
Ce qui est bizarre, c'est que pour "TSEXE=F, ", je me retrouve bien qu'avec une seule ligne correctement modifiée:
"TSEXE=FEMININ,"
As-tu une idée pourquoi on obtient ce résultat ?
Ceci dit, on est pas loin de ce que j'attends et je t'en remercie déjà :-)
Ka-El
Ton code fonctionne plutôt pas mal.
Mais il y a néanmoins un petit bémol, en effet dans le fichier output.txt pour la ligne "TSEXE=M", je retrouve deux lignes:
"TSEXE=M, " et "TSEXE=MASCULIN"
alors que normalement, je ne devrais retrouver que "TSEXE=MASCULIN,"
Ce qui est bizarre, c'est que pour "TSEXE=F, ", je me retrouve bien qu'avec une seule ligne correctement modifiée:
"TSEXE=FEMININ,"
As-tu une idée pourquoi on obtient ce résultat ?
Ceci dit, on est pas loin de ce que j'attends et je t'en remercie déjà :-)
Ka-El
Avec la correction fournie par Barnabe0057 (merci encore !), je n'ai plus le problème évoqué précédemment.
Voici le code:
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question