Commande for /f : récupération d'une donnée dans un fichier

Résolu
vayleme Messages postés 91 Statut Membre -  
vayleme Messages postés 91 Statut Membre -
Bonjour,

Je n'arrive pas à récupérer une donnée contenue dans une ligne d'un fichier texte.
Voici à quoi ressemble le fichier.

donnee : 1
) donnee : 2
- donnee : 3
$ donnee : 4

la valeur en fin de ligne est indéterminée, j'arrive à récupérer la donnée de la dernière ligne et de l'avant-dernière avec ces commandes :

for /f "tokens=2 delims=:" %%a in (fichier.txt) do set a=%%a
for /f "tokens=2 delims=: eol=$" %%b in (fichier.txt) do set b=%%b


Mais je ne trouve pas les commandes pour les deux premières lignes.
J'espère que vous pourrez m'aider.

--
Cordialement,
Vayleme

2 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    Il y a un espace entre le caractère spécial et la donnée, donc ça devrait être simple.

    for /f "eol=: tokens=2 delims= " %%a in (fichier.txt) do set var=%%a



    “L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
    1
    1. vayleme Messages postés 91 Statut Membre 16
       
      Bonjour,
      décidément tu m'aides beaucoup ces derniers jours barnabe ^^ encore merci de ta réponse mais malheureusement ta commande récupère la donnée de la dernière ligne.
      voici le retour de la commande.
      for /f "eol=: tokens=2 delims= " %%a in (fichier.txt) do echo %%a

      renvoie
      1
      2
      3
      4

      et si je fais
      for /f "eol=: tokens=2 delims= " %%a in (fichier.txt) do set var=%%a

      seul le "4" se trouve dans la variable. Je ne souhaite que le "2" et une autre commande pour conserver que le "1".
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > vayleme Messages postés 91 Statut Membre
         
        Je ne comprend pas bien quelle partie tu veux récupérer, un vrai échantillon de fichier txt serait le bienvenu.
        0
      2. vayleme Messages postés 91 Statut Membre 16 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        le fichier txt contient les 4 lignes que j'ai écrites plus haut, le but est de récupérer dans 4 variables différentes les valeurs de la fin de chaque ligne (1, 2, 3, 4) sachant que ces valeurs ne sont pas statiques. Mais finalement, je vien de trouver à l'instant,mais c'est beaucoup du bricolage, je met ma solution dans le poste et je laisse le sujet ouvert une journée au cas ou quelqu'un à une meilleure idée.
        0
  2. vayleme Messages postés 91 Statut Membre 16
     
    @echo off
    cls

    ::récupération dernière ligne
    for /f "tokens=2 delims=:" %%a in (fichier.txt) do set a=%%a

    ::copie du fichier sans la dernière ligne
    for /f "tokens=* delims=: eol=$" %%e in (fichier.txt) do echo %%e >> %cd%\temp.txt

    ::pause création du fichier
    timeout /nobreak /t 003 >nul

    ::récupération de l'avant-dernière ligne
    for /f "tokens=2 delims=:" %%b in (%cd%\temp.txt) do set b=%%b

    ::copie du fichier temp sans la dernière ligne
    for /f "tokens=* delims=: eol=-" %%f in (%cd%\temp.txt) do echo %%f >> %cd%\tempp.txt

    ::pause création du fichier
    timeout /nobreak /t 003 >nul

    ::récupération de la deuxième ligne
    for /f "tokens=2 delims=:" %%c in (%cd%\tempp.txt) do set c=%%c

    ::récupération de la première ligne
    for /f "tokens=2 delims=: eol=)" %%d in (%cd%\tempp.txt) do set d=%%d

    ::pause avant suppresion des fichiers
    timeout /nobreak /t 002 >nul

    ::suppression des fichiers
    erase %cd%\temp.txt %cd%\tempp.txt

    echo appuie sur une touche pour voir les valeurs !
    pause >nul

    echo %a%
    echo %b%
    echo %c%
    echo %d%

    echo.
    echo appuie sur une touche pour quitter.
    pause >nul
    exit


    Cordialement,
    Vayleme
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Je ne suis toujours pas sûr d'avoir bien saisi, est-ce que ça t'aide :
      for /f "eol=$ tokens=1 delims=-)" %%a in (fichier.txt) do echo %%a

      Ca n'affiche pas la dernière ligne.
      0
      1. vayleme Messages postés 91 Statut Membre 16 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        tu as saisi, a un poil près, ta commande récupère la 3ème ligne, (et pas seulement le nombre).
        Je vais essayer de résumer ce que je souhaite faire.

        voici le contenu du fichier :

        donnee : 5
        ) donnee : 18
        - donnee : 72
        $ donnee : 0

        l'objectif est de récupérer les valeurs 5, 18, 72 et 0 dans des variables. tel que
        a=5
        b=18
        c=72
        d=0

        pour récupérer le 0 (dernière ligne) dans la variable d, voici la commande :

        for /f "tokens=2 delims=:" %%d in (fichier.txt) do set d=%%d


        pour récupérer le 72 dans la variable c, voici la commande :

        for /f "tokens=2 delims=: eol=$" %%c in (fichier.txt) do set c=%%c



        L'objectif est de trouver la commande pour récupérer le "18" et la commande pour récupérer le "5".

        Ma solution (affichée plus haut) consiste à récupérer la dernière ligne, puis dupliquer le fichier en supprimant la dernière ligne, puis récupérer la dernière ligne du duplicata ect... pour les 4 lignes.

        Je laisse le poste ouvert pour savoir si il existe une solution pour récupérer ces valeurs sans modifier le fichier.
        0
      2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > vayleme Messages postés 91 Statut Membre
         
        Comme ça peut-être :
        for /f "eol=$ tokens=*" %%a in (fichier.txt) do (for /f "eol=- tokens=1,2 delims=):" %%g in ('echo %%a') do (set var=%%h))
        0
      3. vayleme Messages postés 91 Statut Membre 16 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        yep ca fonctionne, juste deux petites erreurs à corriger :

        for /f "eol=$ tokens=*" %%a in (fichier.txt) do (for /f "eol=- tokens=2 delims=:" %%g in ('echo %%a') do (set var=%%g)


        Merci d'avoir proposé cette solution, j'aurais jamais pensé à imbriquer plusieurs for dans une même commande, tu m'as encore appris quelque chose ^^.
        Merci de ton aide !

        Une solution efficace ayant été trouvée, je clos ce sujet.
        0