[batch DOS] Parcourir un fichier et chaines vides

Parcourir un fichier et chaines vides [batch DOS] - Shell/Batch - Programmation

Marsh Posté le 19-11-2004 à 08:24:19    

J'ai un petit problème coté batch, et je suis pas très fort la dedans, donc au secours :(
 
J'ai un fichier de ce type 1 :
 
Nom1 Valeur1
Nom2 Valeur2
Nom3 Valeur3
...
 
Je dois faire un batch qui renvoie le premier nom trouvé sans valeur
 
Et la, au secours :( Je ne sais pas comment exprimer la chaine vide sous windows, et bon... comment renvoyer juste la première valeur ?
 
Je pensais faire un truc style :


for /f "tokens=1,2 delims= " %%A in ('type site1.txt') do "Si variable "nom_trouve" est pas vide alors si la valeur est vide alors assigner le nom à la variabe "nom_trouve"


 
Mais euh... autant le début ca va, autant savoir que %%A contient le nom et %%B la valeur ca va, autant exprimer le reste après le do... je sais pas. Comment on modélise la chaine vide dans ce cas ?
 
Si quelqu'un peut m'aider...
 
Merci !

Reply

Marsh Posté le 19-11-2004 à 08:24:19   

Reply

Marsh Posté le 19-11-2004 à 12:44:36    

si tu fais

FOR /F "tokens=1,2*" %%i in (liste.txt) do echo %%i %%j


tu vas lister les valeurs, par contre comme le délimitateurs est un espace, tu auras des pb avec les retours à la ligne
l'idéal serait de modifier dans ta liste les délimitateurs en les remplacant par des virgules par exemples
 
le shell dos ca pu

Reply

Marsh Posté le 19-11-2004 à 12:47:39    

FOR/?

pour apprendre

Reply

Marsh Posté le 19-11-2004 à 14:08:27    

sinon je te propose de tester ce petit code ca dervait t'aider  
@echo off
cls
 
for /f "tokens=1,2 delims= " %%A in (c:\site1.txt) do (
 
echo %%A%  
echo %%B% | FIND "echo"  
if errorlevel 1 goto suite
 
:suite  
set nom_trouve="%%a%"
 
 
 
)
 
 
 
pause

Reply

Marsh Posté le 19-11-2004 à 15:32:22    

couak a écrit :

si tu fais

FOR /F "tokens=1,2*" %%i in (liste.txt) do echo %%i %%j


tu vas lister les valeurs, par contre comme le délimitateurs est un espace, tu auras des pb avec les retours à la ligne
l'idéal serait de modifier dans ta liste les délimitateurs en les remplacant par des virgules par exemples
 
le shell dos ca pu


 
Mon problème se situe pas au niveau du for, mais au niveau de la détection des valeurs vides...
 
Je veux juste retourner le premier nom dont la valeur est vide :(
 

Reply

Marsh Posté le 19-11-2004 à 15:41:50    

Tetedeiench a écrit :

Mon problème se situe pas au niveau du for, mais au niveau de la détection des valeurs vides...
 
Je veux juste retourner le premier nom dont la valeur est vide :(


tu peux tester une valeur vide en la comparant avec "" mais le problème avec le FOR c'est que le retour à la ligne, les espaces et les tab sont considérés comme les délimiteurs

Reply

Marsh Posté le 19-11-2004 à 15:48:26    

couak a écrit :

tu peux tester une valeur vide en la comparant avec "" mais le problème avec le FOR c'est que le retour à la ligne, les espaces et les tab sont considérés comme les délimiteurs


Je viens de réussir :) c'était tout bête... c'est un peu grâce à toi ;)
 
Le code en question :
 


for /f "tokens=1,2 delims=;" %%A in ('type site1.txt') do  if "%%B"=="" (
set libre=%%A
goto fin_boucle
)
 
:fin_boucle
echo libre=%libre%
 


 
Marche parfaitement. J'ai mis le ; comme delimiteur pour avoir un truc au format csv, mais globalement, c'était pas necessaire.
 
:hello:

Reply

Marsh Posté le 19-11-2004 à 16:45:11    

Tetedeiench a écrit :

Je viens de réussir :) c'était tout bête... c'est un peu grâce à toi ;)
 
Le code en question :
 


for /f "tokens=1,2 delims=;" %%A in ('type site1.txt') do  if "%%B"=="" (
set libre=%%A
goto fin_boucle
)
 
:fin_boucle
echo libre=%libre%
 


 
Marche parfaitement. J'ai mis le ; comme delimiteur pour avoir un truc au format csv, mais globalement, c'était pas necessaire.
 
:hello:


c'était bien ce que je disais : il fallait un délimiteur différent de l'espace sinon c'était ca devenait un peu plus touchy
 
je le répète encore une fois : le dos shell ca pue

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed