Commande for /f : récupération d'une donnée dans un fichier [Résolu/Fermé]

Signaler
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020
-
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020
-
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.

2 réponses

Messages postés
13510
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
10 juin 2021
4 383
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.”
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020
14
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".
Messages postés
13510
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
10 juin 2021
4 383 >
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020

Je ne comprend pas bien quelle partie tu veux récupérer, un vrai échantillon de fichier txt serait le bienvenu.
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020
14 >
Messages postés
13510
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
10 juin 2021

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.
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020
14
@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
Messages postés
13510
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
10 juin 2021
4 383
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.
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020
14 >
Messages postés
13510
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
10 juin 2021

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.
Messages postés
13510
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
10 juin 2021
4 383 >
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020

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))
Messages postés
86
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
11 novembre 2020
14 >
Messages postés
13510
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
10 juin 2021

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.