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

Résolu
vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   -  
vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

2 réponses

barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne comprend pas bien quelle partie tu veux récupérer, un vrai échantillon de fichier txt serait le bienvenu.
0
vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   16 > barnabe0057 Messages postés 14455 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
vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   16 > barnabe0057 Messages postés 14455 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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention  
 
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
vayleme Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   16 > barnabe0057 Messages postés 14455 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