Compteur de ligne
Résolu/Fermé
BenjaminA2mains
Messages postés
43
Date d'inscription
dimanche 1 août 2021
Statut
Membre
Dernière intervention
5 février 2023
-
Modifié le 3 juil. 2022 à 11:51
brucine Messages postés 18384 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 décembre 2024 - 4 juil. 2022 à 08:32
brucine Messages postés 18384 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 décembre 2024 - 4 juil. 2022 à 08:32
A voir également:
- Compteur de ligne
- Compteur électrique - Guide
- Partage de photos en ligne - Guide
- Site de vente en ligne particulier - Guide
- Comment ralentir un compteur linky forum - Accueil - Objets connectés
- Aller à la ligne excel - Guide
1 réponse
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
3 juil. 2022 à 13:14
3 juil. 2022 à 13:14
Bonjour,
Il ne faut pas mettre de quotes....
ou encore
Idem pour la première instruction
Il ne faut pas mettre de quotes....
SET /A COUNT=%COUNT% + 1
ou encore
SET /A COUNT += 1
Idem pour la première instruction
SET /A COUNT= 1
3 juil. 2022 à 14:37
Le compteur n'est pas dans la boucle.
Utiliser quelque chose du style:
3 juil. 2022 à 14:57
Il faut dans ce cas enlever le tokens qui ne sert à rien: FOR /F "delims="
L'autre manière de procéder est par delayed expansion:
https://stackhowto.com/batch-file-to-read-text-file-line-by-line-into-a-variable/
3 juil. 2022 à 15:23
1: blabla
2: coucou
3 juil. 2022 à 15:47
Ca fonctionne du tonnerre la stratégie de mettre le procédé en dehors de la boucle est super intéressant.
Ca me permettra d'y faire appel même sans boucle, c'est super !
Par contre il y a un truc chelou c'est qu'il copie 2 fois la fois la dernière ligne ????
Plutôt étrange. Je vais y voir à ça et si j'arrive pas, je créerai un nouveau topique XD
Merci encore :D
4 juil. 2022 à 08:32
On oublie souvent les "subtilités" de l'itération FOR parce que, paradoxalement, elle ne nous sert parfois qu'à extraire une seule valeur, mais si on la laisse se dérouler en entier, elle remplace à chaque itération une valeur par la suivante si bien qu'elle ne rend à la fin que la dernière valeur; pour éviter ce comportement, les différentes moutures reposent toujours sur l'interception de chaque valeur, il y a 2 voies différentes:
-la sous-routine CALL dirige chaque sortie vers une étiquette de traitement (ici :PROCESS) d'où elle ressort à chaque fois par EXIT /B qui renvoie là où elle a été écrite: la conséquence en est que les traitements que l'on veut appliquer doivent être écrits dans cette étiquette :PROCESS, et non pas dans la boucle initiale.
-l'utilisation de l'expansion des variables est un peu plus subtile.
Elle n'est pas automatique et doit être appelée avant utilisation par setlocal enabledelayedexpansion (et peut être si la suite du script le nécessite être neutralisée par setlocal disabledelayedexpansion).
La "subtilité" réside dans le fait que la variable doit être définie classiquement dans l'itération dans le format batch %%:
FOR /F "delims=" %%a IN ('type "E:\tmp1.txt"') DO SET TARTEMPION=%%a
que si j'y fais appel à l'intérieur de cette boucle pour chaque valeur je dois utiliser l'expansion de la variable !TARTEMPION!:
FOR /F "tokens=1 delims= " %%g IN ('type "E:\tmp2.txt"') DO SET BIDULE=%%g
COPY "E:\Souvenirs\!TARTEMPION" "E:\Vacances\!BIDULE!\!TARTEMPION!" >nul
mais que si j'ai une bonne raison de faire appel à cette variable hors de la boucle je dois continuer à le faire via %TARTEMPION%
La syntaxe CALL est le plus souvent plus facile à écrire sans risque de confusion bien que moins "élégante".
Pour revenir à nos moutons, si ton script écrit la dernière ligne à la suite de l'ensemble correct des lignes, c'est que la sortie de l'itération est mal faite: une première via CALL ou ce qu'on voudra retourne bien l'ensemble des lignes, mais un deuxième bouclage a lieu en dehors de la sous-routine CALL et il fait son job: il ne retourne que la dernière valeur (la dernière ligne).