Je veux récupérer une ligne entière d'un fichier espaces compris

TABTOB81 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
jogadyl Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis entrain de programmer un batch qui récupére les lignes d'un fichier texte (ligne par ligne). il affiche une valeur dans une position donnée :
Le programme :
@echo off 
for /F "delims=" %%R in (MonFichier) do ( call :cmd %%R) 
pause 
:cmd 
if "%1" == "" exit 
SET var=%1 
echo %var:~28,4% 
echo %1


Mon programme marche, mais il ne récupère pas une ligne entière. Il s'arrête là où il trouve un espace.
le fichier texte contient les lignes suivantes :
050019828581300000163771 0531OM. M**** M****RTIN
050024337583900900576259 0761OMMEM**** M****E XXXXX
080021046786900000210436 0761OM. Mxxx Myyy
050027651388100102386081 0851OMMzzzzz M*** kkkkkk
080506679281200000753251 0741OMllllll M**** J*** hhhhh


les valeurs récupérées par ligne :
050019828581300000163771
050024337583900900576259
080021046786900000210436
080506679281200000753251


Merci d'avance pour votre aide
Noms supprimés par la Modération CCM
A voir également:

3 réponses

TABTOB81 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
il faut ajouter la ligne suivante au début du programme :
@Echo off & Setlocal enableextensions enabledelayedexpansion
0
jogadyl Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Le problème c'est le %1 dans ton sous-programme.
Comme ta ligne de commande comporte des blancs, %1 ne représente que le premier mot.
Si tu veux récupérer la ligne entière dans :cmd, il faut rechercher tous les paramètres.
Plutôt que d'utiliser la suite %1 %2 %3 %4 etc.. tu peux utiliser la variable %* qui prend toute la ligne

Ton programme devient
@echo off 
for /F "delims=" %%R in (MonFichier) do ( call :cmd %%R)
pause
goto :eof

:cmd
if "%1" == "" exit
SET var=%*
echo %var:~28,4%
echo %*


Note que le premier test sur %1 est correct. Tu sortiras de la procedure s'il n'y a pas de paramètre, même si la ligne de ton fichier comporte des blancs.

Pour ce programme, la ligne
Setlocal enableextensions enabledelayedexpansion
ne sert à rien. (Mais ça ne peux pas faire de mal)
0
jogadyl Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
En fait, la ligne
if "%1" == "" exit 
est un peu fausse
Il faut mettre
if "%1" == "" exit  /B 
sinon on sort de cmd.exe et pas seulement du batch.
Elle ne sert que si une ligne ne comporte que des blancs mais n'est pas activée si une ligne est vide.
En effet for /F saute les lignes vides.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
hello
essayer avec des " autour de %%R
for ... call :cmd "%%R") 
-1