Batch lecture d'un fichier txt à l'envers

Résolu/Fermé
Gatio77 - Modifié par pijaku le 22/11/2013 à 10:21
bricomachin Messages postés 244 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 6 septembre 2016 - 21 nov. 2013 à 20:30
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 :

@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

bricomachin Messages postés 244 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 6 septembre 2016 133
20 nov. 2013 à 22:03
Salut,

Il y a trois problèmes dans ton code.

Le premier est qu'à voir, la commande
type %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 utilises
tokens=2
alors que ton mot est en 3e position (
Hellles=1 Norbyr=2 Luggemborsel=3 Morgum=4
). Réparation utiliser
for /f "skip=1 tokens=3 delims= "
.

Finalement, si tu
set ta=%%a
à chaque tour de boucle, ce ne sera que la dernière occurrence qui sera utilisée et donc
Ernlegbyrlogurn
. Réparation : initialiser la variable
ta
avec la valeur
x
et ne permettre son affectation à
%%a
que si elle vaut
x
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 le
setlocal 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
3
Un grand merci Bricomachin, ça fonctionne sans problèmes.
Merci aussi pour les explications :)
0
bricomachin Messages postés 244 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 6 septembre 2016 133
21 nov. 2013 à 20:30
De rien, ça fait plaisir.

Pense à mettre ton sujet en résolu...

Bien à toi,


Bricomachin
0