IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Boucle «for» avec un token * [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut Boucle «for» avec un token *
    Bonjour/Bonsoir,

    J'ai un fichier d'entrée tst.log contenant:

    2010-02-04 10:59:06 ----- BIENVENUE ----- ZZZ ah ah super!
    Ensuite, mon code divisant toutes les informations de cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /f "tokens=1,2,4,6* delims= " %%a in (tst.log) do (
    echo %%d TRACE
    CALL :MAIN %%a %%b %%c %%d
    )
    goto FIN
    Alors, c'est le plus simple niveau d'information que je peut vous donner. Alors, mon token 6 devrait contenir ZZZ jusqu'à la fin de la ligne, car il est demandé ainsi : 6*. Seulement %%d = ZZZ seulement.

    Je sais que l'espace est le délimiteur par défaut et ça semble être la raison des ennuis, car j'utilise le n* ailleurs avec un délimiteur différent et ça fonctionne très bien.

    Est-ce que quelqu'un peut me dire comment retrouver la valeur 'ZZZ ah ah super! ' dans mon token 6 (%%d)?

    Merci!

  2. #2
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut Oups :)
    Alors, je me suis fourvoyé, mon erreur. Le restant du message se trouverait dans %%e selon la description HELP FOR:


    Si le dernier caractère de la chaîne tokens= est une astérisque, alors une variable supplémentaire est allouée et reçoit le texte restant dans la ligne
    suivant la dernière partie analysée.


    Merci quand même

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut
    Décidément je n'ai pas de chance. En effet la ligne ne se traite pas comme il faut. Si je passe le message dans un CALL %%e par exemple (%%e étant le message séparé par des espaces), il ne prend que le 1er mot


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for /f "tokens=1,2,4,5* delims= " %%a in (tst.log) do (
    echo %%e (***VALUE IS FINE HERE***)
    pause
    set MESSAGE = %%e
    CALL :ETAPE005 %%a %%b %%c %%e
    )
    goto finN
     
    :ETAPE005
    echo %MESSAGE% (VALUE IS BAD AND == FIRST WORD ONLY)
    Alors que nous devrions retrouver

    ZZZ ah ah super!

    OU du moins 'ah ah super!'

    Meme mon premier set MESSAGE = %%e
    ne fonctionne pas. Pourtant %%e a la bonne valeur.

    J'ai trouvé une solution temporaire qui ne me satisfait pas entièrement: Lorsque l'on appelle l'ETAPE005, en utilisant "%%e" ça permet de passer toute la chaîne de caractère en paramètre, exepté qu'il passe aussi les " ".

    Ainsi, je dois donc aller récupérer la valeur réelle en assignant à une variable VAR la valeur de %%e (%1 dans la fonction) et ensuite la tronquer comme suit:

    set VAR=%VAR:~1,-1% (du caractère 1, à l'avant-dernier caractère.)

  4. #4
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut
    Bon après des heures intensives de recherches et voyant qu'aucune aide ne parvenait ici. J'ai finalement réalisé mon erreur.

    Lorsque l'on fait une boucle for qui sort des tokens %%a,b,c,e......

    Pour pouvoir affecter ces valeurs à des variables, il faut appeller un fonction avec les tokens comme arguments:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CALL :ETAPE006 %%a %%b %%c %%d
    
    :ETAPE006
    set MESSAGE= %1
    set JOUR=%2
    Fait à noter, lorsque l'on fait un
    L'espace après le ELSE est NÉCESSAIRE!.

    Bon bien merci quand même de m'avoir lu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Boucle "For" avec valeurs spécifiques
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 13
    Dernier message: 28/03/2025, 09h10
  2. Boucle for avec saut
    Par michel71 dans le forum Delphi
    Réponses: 3
    Dernier message: 25/02/2007, 16h16
  3. boucle for avec condition
    Par Daniel Magron dans le forum Delphi
    Réponses: 4
    Dernier message: 22/01/2007, 16h18
  4. Réponses: 2
    Dernier message: 28/08/2006, 18h17
  5. [VB6] boucle for avec liste de valeur defini
    Par Morpheus2144 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/04/2006, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo