Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R] Boucle for
Auteur Message
Répondre en citant
Message [R] Boucle for 
Bonjour à tous,
Je galère vraiment avec les boucles for, alors je fais appel à vous pour essayer de m'aider Mr. Green
Alors voilà mon problème :
J'ai un fichier texte contenant des lignes vides, et j'aimerais, grâce à une boucle for, sélectionner :
- Les lignes à partir de la ligne n°16 ;
- Les lignes qui ne sont pas les 5 dernières;
et retourner tout ça dans une variable.
En sachant que le nombre de lignes entre la 16eme et la 5eme dernière peut varier.
C'est un peu (très) dur à expliquer, si vous n'avez pas compris dites-le moi Laughing
Merci d'avance de votre aide Wink




______________________________________________________
Contacte moi par Twitter ou par mail Smile
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] Boucle for 
tu peux pas mettre plusieurs lignes de texte dans une variable en batch
faut que tu fasses %ligne1% %ligne2% etc...

donc en premier tu comptes le nombres de lignes :
Code:

set $num_ligne_max=0
for /f "delims=" %%i in ('type file.txt') do set /a $num_ligne_max+=1
echo finis ! il y a %$num_ligne_max% lignes &pause


ensuite on y ajoute un qui met dans les variables le texte, on y ajoute un call pour éviter un setenabledelayexpension que j'aime pas utiliser ^^ :
Code:
set $num_ligne_max=0
For /F "Delims=" %%I In ('Type "file.txt"') Do (
set "$ligne_temp=%%I"
CALL :ADD_1
)
echo finis ! il y a %$num_ligne_max% lignes &pause

:ADD_1
set /a $num_ligne_max+=1
set "ligne%$num_ligne_max%==%$ligne_temp%"
goto :eof


ensuite le plus simple : Afficher les lignes de 16 -> %$num_ligne_max%-5
Code:
set /a $num_ligne_max_aff=%num_ligne_max%-5
For /L %%N  in (6,1,%$num_ligne_max_aff%) do echo %ligne%%N%

Ou alors en affichant avec find une plage de ligne (plus simple à mon goût) :
Code:
set /a $num_ligne_max_aff=%num_ligne_max%-5
for /f "tokens=1,* delims=:" %%i in ('findstr /n /r . file.txt') do if %%i geq 6 if %%i leq %$num_ligne_max_aff% echo %%j


Ce qui nous donne :
Code:
set $num_ligne_max=0
For /F "Delims=" %%I In ('Type "file.txt"') Do (
set "$ligne_temp=%%I"
CALL :ADD_1
)
echo finis ! il y a %$num_ligne_max% lignes
set /a $num_ligne_max_aff=%num_ligne_max%-5
echo.
For /L %%N  in (6,1,%$num_ligne_max_aff%) do echo %ligne%%N%
pause
EXIT

:ADD_1
set /a $num_ligne_max+=1
set "ligne%$num_ligne_max%==%$ligne_temp%"
goto :eof


Ou sinon le plus simple je trouve avec "for /f "tokens=1,* delims=:" %%i in ('findstr /n /r . file.txt') do if %%i geq 6 if %%i leq %$num_ligne_max_aff% echo %%j"
Code:
set $num_ligne_max=0
For /F "Delims=" %%I In ('Type "file.txt"') Do (
set "$ligne_temp=%%I"
CALL :ADD_1
)
echo finis ! il y a %$num_ligne_max% lignes
set /a $num_ligne_max_aff=%num_ligne_max%-5
echo.
for /f "tokens=1,* delims=:" %%i in ('findstr /n /r . file.txt') do if %%i geq 6 if %%i leq %$num_ligne_max_aff% echo %%j
pause

:ADD_1
set /a $num_ligne_max+=1
set "ligne%$num_ligne_max%==%$ligne_temp%"
goto :eof

Allez a++ Wink


Message edité par AlonsO, Petite correction de code.





______________________________________________________
Visiter le site web du posteur
Message [R] Boucle for 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch