Batch lecture d'un fichier txt à l'envers
Résolu
Gatio77
-
bricomachin Messages postés 245 Date d'inscription Statut Membre Dernière intervention -
bricomachin Messages postés 245 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'appelle à l'aide car je suis bloqué avec mon script batch.
Je souhaite afficher le 3eme mot de la 2eme ligne d'un fichier texte. Le voici :
Morarnligmirlas Mirlashall Liglomnirluscal
Hellles Norbyr Luggemborsel Morgum
Legurn Urnmer
Lashobornor Lomhell Ernlegbyrlogurn
Hebor Thigymthinorha
J'aimerais que mon script m'affiche le mot : Luggemborsel.
Pour cela voici mon script :
Le problème est que mon script m'affiche : Thigymthinorha !! Le dernier mot de la dernière ligne.
Si je change skip=2 ou skip=3 mon script m'affiche toujours le dernier mot.
Quelqu'un a une idée ?
Merci d'avance :)
J'appelle à l'aide car je suis bloqué avec mon script batch.
Je souhaite afficher le 3eme mot de la 2eme ligne d'un fichier texte. Le voici :
Morarnligmirlas Mirlashall Liglomnirluscal
Hellles Norbyr Luggemborsel Morgum
Legurn Urnmer
Lashobornor Lomhell Ernlegbyrlogurn
Hebor Thigymthinorha
J'aimerais que mon script m'affiche le mot : Luggemborsel.
Pour cela voici mon script :
@echo off
set fichier=test.txt
for /f "skip=1 tokens=2 delims= " %%a in ('type "%fichier%"') do (
set ta=%%a
)
echo %ta%
pause
@exit
Le problème est que mon script m'affiche : Thigymthinorha !! Le dernier mot de la dernière ligne.
Si je change skip=2 ou skip=3 mon script m'affiche toujours le dernier mot.
Quelqu'un a une idée ?
Merci d'avance :)
3 réponses
-
Salut,
Il y a trois problèmes dans ton code.
Le premier est qu'à voir, la commandetype %fichier%
ne transmet que la dernière ligne de ton fichier. Réparation : utiliser%%a in (%fichier%) do (
cela permettra d'utiliser réellement toutes les lignes de ton fichier.
Ensuite, tu utilisestokens=2
alors que ton mot est en 3e position (Hellles=1 Norbyr=2 Luggemborsel=3 Morgum=4
). Réparation utiliserfor /f "skip=1 tokens=3 delims= "
.
Finalement, si tuset ta=%%a
à chaque tour de boucle, ce ne sera que la dernière occurrence qui sera utilisée et doncErnlegbyrlogurn
. Réparation : initialiser la variableta
avec la valeurx
et ne permettre son affectation à%%a
que si elle vautx
avant.
Le code final :@echo off setlocal enableDelayedExpansion set fichier=test.txt set ta=x for /f "skip=1 tokens=3 delims= " %%a in (%fichier%) do ( if !ta!==x set ta=%%a ) echo !ta! pause endlocal exit
J'utilise lesetlocal enableDelayedExpansion
avec les!
à la place des%
pour pouvoir tester la variable en temps réél, car autrement je la testes après la boucle for et elle a changé entre-temps.
Bien à toi,
Bricomachin
-
Un grand merci Bricomachin, ça fonctionne sans problèmes.
Merci aussi pour les explications :) -
De rien, ça fait plaisir.
Pense à mettre ton sujet en résolu...
Bien à toi,
Bricomachin