Changer lignes et expressions dans un fichier.txt

Résolu
Ka-El Messages postés 279 Statut Membre -  
Ka-El Messages postés 279 Statut Membre -
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

5 réponses

  1. Ka-El Messages postés 279 Statut Membre
     
    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 ? :-)
    0
  2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929
     
    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


    0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929
     
    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


    0
    1. Ka-El Messages postés 279 Statut Membre
       
      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
      0
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929 > Ka-El Messages postés 279 Statut Membre
       
      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.
      0
    3. Ka-El Messages postés 279 Statut Membre
       
      J'ai l'impression que j'ai un problème pour envoyer un mp ...
      As-tu reçu quelquechose ?
      0
    4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929 > Ka-El Messages postés 279 Statut Membre
       
      Non
      0
    5. Ka-El Messages postés 279 Statut Membre
       
      Ah ! cette fois, il est parti :-)
      merci pour ton aide
      0
  4. Ka-El Messages postés 279 Statut Membre
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ka-El Messages postés 279 Statut Membre
     
    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é ! :-)
    0