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

Fermé
TABTOB81 Messages postés 2 Date d'inscription jeudi 7 mai 2015 Statut Membre Dernière intervention 7 mai 2015 - Modifié par baladur13 le 7/05/2015 à 13:36
jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015 - 7 mai 2015 à 18:22
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 jeudi 7 mai 2015 Statut Membre Dernière intervention 7 mai 2015
7 mai 2015 à 16:42
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 dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015
7 mai 2015 à 17:03
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 dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015
7 mai 2015 à 18:22
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 18728 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 29 mai 2024 5 615
7 mai 2015 à 15:10
hello
essayer avec des " autour de %%R
for ... call :cmd "%%R") 
-1