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 :

Problème opération mathématique [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Problème opération mathématique
    Bonjour à tous,

    Mon soucis vient du code que j'essais de faire.

    Ce code est cencé lire chaque ligne d'un fichier Liste.txt contenant des nombres les uns en dessous des autres, et ensuite me faire une simple addition et écrire les résultat des additions dans un fichier de sortie (Result.out) les uns en dessous des autres.

    Alors mon soucis concerne uniquement l'addition que je n'arrive pas a bien écrire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set /a Var=0
    for /f %%i in (Liste.txt) do (
    set /a Diff=%%i-%Var%
    ECHO %Diff% >> Result.out
    )
    PAUSE
    Je pense que le %%i ne peut pas être introduit directement dans une opération mathématique. Mais comment l'affecter à une autre variable plus traditionnelle ? Genre %variable% = %%i ?

    Merci de votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Par défaut
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    setlocal enabledelayedexpansion
    set var=0
    for /f %%i in (liste.txt) do (
    set /a var=!var!+%%i
    )
    echo !var! >> resultat.txt
    PAUSE
    a+

  3. #3
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par ludo40190 Voir le message
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    setlocal enabledelayedexpansion
    set var=0
    for /f %%i in (liste.txt) do (
    set /a var=!var!+%%i
    )
    echo !var! >> resultat.txt
    PAUSE
    a+
    Merci de ta réponse, mais peux tu me dire pourquoi mettre var avec des point d'exclamations ?

    Et setlocal enabledelayedexpansion à quoi ça sert ?

    Je vais la tester et te dire si cela fonctionne dans mon cas

    Encore merci

  4. #4
    Membre expérimenté
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Par défaut
    re,

    voici ce qui est tiré de l'excellent site www.batcher.fr :

    Comment enregistrer une variable dans une boucle for ?



    Dans un batch il arrive que l'on est à définir une variable dans une boucle for, cependant il est impossible en dos d'affecter une variable dans une boucle for:


    Exemple de problème:

    for /f %%a in (c:\list.cvs) do (

    set var=%%a

    echo %var%

    )

    Solution: Utiliser l'expansion retardée

    setlocal enableDelayedExpansion

    for /f %%a in (c:\list.cvs) do (

    set var=%%a

    echo !var!

    )

    endlocal

    Notons qu'avec cette méthode le rappel de la variable ne se fait pas avec des %var% mais avec !var!

    Autre solution, faire appel à un autre batch via la commande call est y placer le contenu du DO
    Donc en gros setlocal enabledelayedexpasnsion sert à stocker une variable dans une boucle for, et le point d'exclamation dans ce cas remplacent le signe pourcentage pour afficher cette variable...

    Voilou...

  5. #5
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    Citation Envoyé par ludo40190 Voir le message
    Donc en gros setlocal enabledelayedexpasnsion sert à stocker une variable dans une boucle for

    euh, non, EnableDelayedExpansion ne sert pas à stocker une variable dans une boucle FOR mais plutot à retarder l'expansion de variables: sans EnableDelayedExpansion l'expansion de variables se fait en même temps que le parseur de cmd.exe parse la ligne c'est pour cette raison que la variable %var% n'est pas évalué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set var=1
    (
      set var=2
      echo %var%
    )
    quand on acttive l'EnableDelayedExpansion l'expansion de variable se fait après le parsing syntaxique, dans le Runtime:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Setlocal Enabledelayedexpansion
    set var=1
    (
      set var=2
      echo !var!
    )
    en plus, quand l'expansion retardé de variables est désactivé (cas par defaut) le code entre les parenthèses est traiter par le parseur comme étant une seule instruction, même s'il contient une centaines de lignes, donc le parsing se fait en une seule fois, quand on active EnableDelayedExpansion le parsing se fera en deux fois, la première fois il sera un parsing syntaxique et tout de suite suivera une évaluation du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @ECHO OFF
    Setlocal Enabledelayedexpansion
    for /l %%a in (1 1 5) do (
       echo DISBALEDELAYEDEXP %time%
       echo ENABLEDELAYEDEXP  !time!
       Set /p "=-------(%%a)"
    )

    Quand on active l'EnableDelayedExpansion l'interpréteur nous active la nouvelle syntaxe de variables avec le point d'exclamation '!'.
    Quand l'EnableDelayedExpansion est activé le point d'exclamation est traiter comme un caractère reservé, et le parseur va évaluer la chaîne entre les deux '!' et quand l'EnableDelayedExpansion est désactivé (cas par defaut) la chaine entre '!' est traiter littérallement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    
    Setlocal Disabledelayedexpansion
    
    echo(!var! 
    REM sortie: !var! 
    
    Setlocal Enabledelayedexpansion
    
    echo(!var!
    REM sortie: rien 
    
    pause

  6. #6
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Merci pour vos réponses.

    Le code marche très bien et m'a permit de continuer.

    Encore Merci

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

Discussions similaires

  1. Problème de résultat d'une opération mathématique
    Par Porkipic dans le forum Débuter
    Réponses: 12
    Dernier message: 03/03/2014, 15h37
  2. [Conception] Détection d'opérations mathématiques dans un textfield
    Par lynal dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/06/2006, 08h20
  3. [time]Opération mathématique sur heure
    Par Shaika-Dzari dans le forum Général Python
    Réponses: 4
    Dernier message: 28/12/2005, 19h08
  4. problème opérations
    Par marsupilami34 dans le forum Langage
    Réponses: 5
    Dernier message: 02/09/2005, 16h25
  5. Opération mathématique entre deux Threads
    Par rvzip64 dans le forum Langage
    Réponses: 11
    Dernier message: 13/06/2005, 11h58

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