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

Signaler
Messages postés
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017
-
vayleme
Messages postés
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017
-
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
12517
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 mars 2020
2 826
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.”
vayleme
Messages postés
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017
6
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".
barnabe0057
Messages postés
12517
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 mars 2020
2 826 > vayleme
Messages postés
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017

Je ne comprend pas bien quelle partie tu veux récupérer, un vrai échantillon de fichier txt serait le bienvenu.
vayleme
Messages postés
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017
6 > barnabe0057
Messages postés
12517
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 mars 2020

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
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017
6
@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
barnabe0057
Messages postés
12517
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 mars 2020
2 826
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.
vayleme
Messages postés
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017
6 > barnabe0057
Messages postés
12517
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 mars 2020

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.
barnabe0057
Messages postés
12517
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 mars 2020
2 826 > vayleme
Messages postés
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017

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))
vayleme
Messages postés
64
Date d'inscription
mardi 27 juin 2017
Statut
Membre
Dernière intervention
19 juillet 2017
6 > barnabe0057
Messages postés
12517
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 mars 2020

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.