Probleme de variables et de boucle (DOS) - Perl - Programmation
MarshPosté le 22-02-2006 à 08:52:52
Bonjour,
Je debute -faut bien un jour- en dos_shell et j'ai un gros Pb avec la prise en compte de variables dans les boucles. Je maitrise les shells Unix, mais ici je suis perdu.
Voila ce que je veux faire, par ordre de difficulté:
1° test: "Pour i parmi 1 5 8 seter une variable avec la valeur de i et l'afficher" Ca a l'air tres simple mais ca marche pas comme je le souhaite:
=>Voila ce que je fais dans une fenetre de commande (dans un fichier .bat il faut rajouter des % si j'ai bien compris..)
for %i in ( 1 5 8 ) do ( set var=%i echo %var% )
En laissant le mode echo a on, je vois bien qu'il assigne bien la valeur voulue a "var" mais le echo me donne %var% et non 1 2 ou 3 comme attendu.
Resultat ) set var=1 echo %var% ) %var% ( set var=5 echo %var% ) %var% ( set var=8 echo %var% ) %var%
En remplacant le echo "%var%" par "echo %var" j'obtiens bien le résultat attendu avec les echo .
Question: Quand faut-il utiliser %var ? %var% ? difference?
2eme test plus compliqué je cree un fichier testfic.txt avec des lignes du style valeur_lettre (1_A 4_B 9_C ...) je veux faire une boucle dans ce fichier et parser le resultat en deux variables valeur et lettre que j'affiche :
Voila ce que je fais (toujours avec echo a on )
set PARSEARG="eol= tokens=1,2 delims=_" for /f %PARSEARG% %a in ('type testfic.txt') do ( set valeur=%a set lettre=%b echo %lettre echo %valeur )
Resultat: ( set valeur=1 set lettre=A echo %lettre echo %valeur ) %lettre <== Pourquoi n'affiche-t-il pas A ? %valeur <== Pourquoi n'affiche-t-il pas 1 ?
( set valeur=5 set lettre=B echo %lettre echo %valeur ) %lettre %valeur
( set valeur=9 set lettre=D echo %lettre echo %valeur ) %lettre %valeur
Si je remplace echo "%valeur" et "%lettre" par "%valeur%" et "%lettre%" pour les commandes echo, voici ce que j'obtiens curieusement:
( set valeur=1 set lettre=A echo D <==Pourquoi affiche-t-il ces valeurs? est-ce un "reliquat" du test précédent? echo 9 ) D 9
( set valeur=5 set lettre=B echo D echo 9 ) D 9
( set valeur=9 set lettre=D echo D echo 9 ) D 9
Merci a tous ceux qui pourront m'eclairer sur la question et me tuyauter sur un bon tutorial dos-shell
Marsh Posté le 22-02-2006 à 08:52:52
Bonjour,
Je debute -faut bien un jour- en dos_shell et j'ai un gros Pb avec la prise en compte de variables dans les boucles.
Je maitrise les shells Unix, mais ici je suis perdu.
Voila ce que je veux faire, par ordre de difficulté:
1° test:
"Pour i parmi 1 5 8 seter une variable avec la valeur de i et l'afficher"
Ca a l'air tres simple mais ca marche pas comme je le souhaite:
=>Voila ce que je fais dans une fenetre de commande (dans un fichier .bat il faut rajouter des % si j'ai bien compris..)
for %i in ( 1 5 8 ) do (
set var=%i
echo %var%
)
En laissant le mode echo a on, je vois bien qu'il assigne bien la valeur voulue a "var" mais le echo me donne %var% et non 1 2 ou 3 comme attendu.
Resultat
)
set var=1
echo %var%
)
%var%
(
set var=5
echo %var%
)
%var%
(
set var=8
echo %var%
)
%var%
En remplacant le echo "%var%" par "echo %var" j'obtiens bien le résultat attendu avec les echo .
Question: Quand faut-il utiliser %var ? %var% ? difference?
2eme test plus compliqué je cree un fichier testfic.txt avec des lignes du style valeur_lettre (1_A 4_B 9_C ...)
je veux faire une boucle dans ce fichier et parser le resultat en deux variables valeur et lettre que j'affiche :
Voila ce que je fais (toujours avec echo a on )
set PARSEARG="eol= tokens=1,2 delims=_"
for /f %PARSEARG% %a in ('type testfic.txt') do (
set valeur=%a
set lettre=%b
echo %lettre
echo %valeur
)
Resultat:
(
set valeur=1
set lettre=A
echo %lettre
echo %valeur
)
%lettre <== Pourquoi n'affiche-t-il pas A ?
%valeur <== Pourquoi n'affiche-t-il pas 1 ?
(
set valeur=5
set lettre=B
echo %lettre
echo %valeur
)
%lettre
%valeur
(
set valeur=9
set lettre=D
echo %lettre
echo %valeur
)
%lettre
%valeur
Si je remplace echo "%valeur" et "%lettre" par "%valeur%" et "%lettre%" pour les commandes echo,
voici ce que j'obtiens curieusement:
(
set valeur=1
set lettre=A
echo D <==Pourquoi affiche-t-il ces valeurs? est-ce un "reliquat" du test précédent?
echo 9
)
D
9
(
set valeur=5
set lettre=B
echo D
echo 9
)
D
9
(
set valeur=9
set lettre=D
echo D
echo 9
)
D
9
Merci a tous ceux qui pourront m'eclairer sur la question et me tuyauter sur un bon tutorial dos-shell
D'avance merci.