Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R] Problème de reset de variable
Auteur Message
Répondre en citant
Message [R] Problème de reset de variable 
Bonjour,

J'ai trouvé un code sur internet qui peut effectuer une multiplication sans problème de limite 32bits. Le truc c'est que ce serait bien de pouvoir le réutiliser ce code c'est a dire que je fais un <code>call:multiplication nbr1 nbr2 variable_de_sortie </code> le soucis c'est que ça foire et je ne voit qu'un problème possible: des variables non réinitialisées (vu que le premier appel marche).

J'ai cherché à les réinitialiser toutes mais ca ne marche quand meme pas donc peut être que j'en ai oublié quelque unes...

Voici le code:
Code:
@echo off
setlocal enableextensions
setlocal enabledelayedexpansion
call:multiplication 1000 1000 hello
echo %hello%
call:multiplication 5203216584 165503216 hello
echo %hello%
call:multiplication 5203216544 165504416 hello
echo %hello%
call:multiplication 520554216584 165545403216 hellow
echo %hellow%
call:multiplication 1000 100 bonjour
echo %bonjour%
pause>nul
:multiplication
set numero1ctn=
set numero2ctn=
set tmp=
set ctn=
set qolctn=
set plus=
set qo=
set spc=
set spc1=
set zero=
set co=
set numero6=
set numero1=
set numero2=
set numero4=
   set numero1=%1
   set numero2=%2
   for /l %%a in (1,1,2) do (
      for /l %%b in (0,1,9) do (
         set numero%%a=!numero%%a:%%b=%%b !
         )
      )
   for %%a in (!numero1!) do set /a numero1ctn+=1 & set !numero1ctn!numero1=%%a
   for %%a in (!numero2!) do set /a numero2ctn+=1 & set !numero2ctn!numero2=%%a
   if !numero1ctn! EQU 1 if !numero2ctn! EQU 1 (
      set /a %3=!numero1! * !numero2!
      goto:eof
      )
   for /l %%b in (!numero2ctn!,-1,1) do (
      for /l %%a in (!numero1ctn!,-1,1) do (
         set /a tmp=!%%bnumero2! * !%%anumero1! !plus! !qo!
         set qo=
         set plus=
         if !tmp! GTR 9 set qo=!tmp:~0,1!& set tmp=!tmp:~-1!& set plus=+
         set numero3_%%b=!numero3_%%b!!spc!!tmp!
         set spc=
         set tmp=
         )
      if defined qo set numero3_%%b=!numero3_%%b! !qo!& set qo=& set plus=
      set numero3_%%b=!zero!!numero3_%%b!
      set zero=0!spc1!!zero!
      set spc1=
      for %%a in (!numero3_%%b!) do (
        set /a ctn+=1
        for %%c in (!ctn!) do set numero4_%%c=!numero4_%%c!%%a+
        )
      set ctn=
      )
   for /f %%a in ('set numero4') do set /a qolctn+=1
   for /l %%a in (1,1,!qolctn!) do (
   set /a numero5_%%a=!numero4_%%a:~0,-1!
   echo %%a>> num4reset.txt
   set maxnum4=%%a
   )
   for /f "tokens=1-%maxnum4% delims= " %%a in (num4reset.txt) do set "numero4_%%a="
   del num4reset.txt
   for /l %%a in (1,1,!qolctn!) do (
      if defined qo set /a numero5_%%a=!numero5_%%a! + !qo!
     echo %%a>> num5reset.txt
     set maxnum5=%%a
      set qo=
      if !numero5_%%a! GTR 9 (
         set qo=!numero5_%%a:~0,-1!
         set numero6=!numero5_%%a:~-1!!numero6!
         ) else (
         set numero6=!numero5_%%a!!numero6!
         )
      set %3=!qo!!numero6!
      )
   for /f "tokens=1-%maxnum5% delims= " %%a in (num5reset.txt) do set "numero5_%%a="
   del num5reset.txt
   goto:eof


Si un œil externe pouvait regarder...

Merci d'avance,



Dernière édition par programme le Mar 24 Avr 2018 - 18:04; édité 1 fois

______________________________________________________

Programme
Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] Problème de reset de variable 
Il suffit de jouer un peu avec les setlocal Okay

Petit code pour se faire un aperçu du fonctionnement de setlocal et de endlocal :
Code:
@echo off

set ma_variable_global=Bonjour

rem On définit un local
setlocal

  set ma_variable_local=Salut

rem On ferme le local, toutes les variables qu'on a déclaré dans ce local sont supprimés
endlocal

echo;%ma_variable_global%

rem erreur la variable n'existe plus
echo;%ma_variable_local%

pause>nul&exit


Donc en partant de ce principe, voilà ton code fonctionnel :
Lien Pastebin : https://pastebin.com/raw/CXuP12Jm




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] Problème de reset de variable 
Flammrock a écrit:
Il suffit de jouer un peu avec les setlocal Okay

Petit code pour se faire un aperçu du fonctionnement de setlocal et de endlocal :
Code:
@echo off

set ma_variable_global=Bonjour

rem On définit un local
setlocal

  set ma_variable_local=Salut

rem On ferme le local, toutes les variables qu'on a déclaré dans ce local sont supprimés
endlocal

echo;%ma_variable_global%

rem erreur la variable n'existe plus
echo;%ma_variable_local%

pause>nul&exit


Donc en partant de ce principe, voilà ton code fonctionnel :
Lien Pastebin : https://pastebin.com/raw/CXuP12Jm


merciiiiiiiiii
J'en apprends tous les jours c'est cool. Pourquoi as tu ajouté la variable 'aa' dans le code ?

Un simple endlocal ne suffirait-il pas au lieu d'en mettre 3?
Pourquoi mettre 'exit /b' si il n'y a rien derrière?

Est ce que ces deux programmes sont stables au niveau reset de variables ?

@echo off
setlocal enableextensions
setlocal enabledelayedexpansion

call:add 1 2 hello
echo %hello%
call:add -3 -4 hellohe
echo %hellohe%
pause


:add
set num1=%1
set num2=%2
if not defined num1 set num1=0
if not defined num2 set num2=0
for /l %%a in (1,1,2) do (
for /l %%b in (0,1,9) do (
set _NUM%%a=!_NUM%%a:%%b=%%b !
)
)
for %%a in (%num1%) do set /a num1cnt+=1 & set _!num1cnt!num1=%%a
for %%a in (%num2%) do set /a num2cnt+=1 & set _!num2cnt!num2=%%a
set num1=%num1: =%
set num2=%num2: =%
set /a digits=%num1cnt% + %num2cnt%
if %digits% LEQ 8 (
set /a result=%num1% + %num2%
)
if defined result (ENDLOCAL & set %3=%result%& goto :eof)
if %num1cnt% GEQ %num2cnt% (set maxops=%num1cnt%) else (set maxops=%num2cnt%)
set /a maxops=%maxops% - 1
if %num1cnt% GTR %num2cnt% (
set /a zeros=%num1cnt% - %num2cnt%
for /l %%a in (1,1,!zeros!) do set zero=!zero!0
set num2=!zero!!num2!
)

if %num2cnt% GTR %num1cnt% (
set /a zeros=%num2cnt% - %num1cnt%
for /l %%a in (1,1,!zeros!) do set zero=!zero!0
set num1=!zero!!num1!
)

for /l %%a in (!maxops!,-1,0) do (
set /a tmp=!num1:~%%a,1! + !num2:~%%a,1! !plus! !co!
set co=
set plus=
if !tmp! GTR 9 set co=!tmp:~0,1!& set tmp=!tmp:~-1!& set plus=+
set return=!tmp!!return!
set tmp=
)
if defined co set return=%co%%return%
set result=%return%
if defined result (ENDLOCAL&set %3=%result%)
goto:eof

@echo off
call:islarger 1700 1600 if
echo %if%
call:islarger 1500 -1600 if
echo %if%
pause

:islarger
setlocal enableextensions
setlocal enabledelayedexpansion
set num1=%1
set num2=%2
for /l %%a in (1,1,2) do (
for /l %%b in (0,1,9) do (
set num%%a=!num%%a:%%b=%%b !
)
)
for %%a in (!num1!) do set /a num1cnt+=1 & set _!num1cnt!num1=%%a
for %%a in (!num2!) do set /a num2cnt+=1 & set _!num2cnt!num2=%%a
if !num1cnt! NEQ !num2cnt! (
if !num1cnt! GTR !num2cnt! (
set %3=TRUE
endlocal
endlocal
goto:eof
) else (
set %3=FALSE
endlocal
endlocal
goto:eof
)
)
for /l %%a in (1,1,!num1cnt!) do (
if !_%%anum1! NEQ !_%%anum2! (
if !_%%anum1! GTR !_%%anum2! (
set %3=TRUE
endlocal
endlocal
goto:eof
) else (
set %3=FALSE
endlocal
endlocal
goto:eof
)
)
)
set %3=EQUAL
endlocal
endlocal
goto:eof


PS: pour l'addition je suis sur que c'est pas bon mais le truc c'est que quand je mets mes setlocal apres :add ça ne marche pas donc je suis obligé de les mettre derrière

Merci d'avance pour ton aide!




______________________________________________________

Programme
Skype
Répondre en citant
Message [R] Problème de reset de variable 
programme a écrit:
Pourquoi as tu ajouté la variable 'aa' dans le code ?


Pour rediriger vers le exit /b une fois le résultat obtenu



programme a écrit:
Un simple endlocal ne suffirait-il pas au lieu d'en mettre 3?

En fait, je me suis basé sur ta fonction et tu ouvrais 3 local donc quand je l'ai modifié j'ai rajouté 3 endlocal pour fermer les 3 locals

Pour mieux comprendre l'imbrication des locals :
Code:
@echo off
 
set ma_variable_global=Bonjour
 
rem On définit un local
setlocal
 

  set ma_variable_local=Salut

  rem On définit un 2ème local
  setlocal
   
    set ma_variable_du_local_2=Guten Tag

  rem On ferme le local, toutes les variables qu'on a déclaré dans ce local sont supprimés
  endlocal


  rem erreur la variable n'existe plus
  echo;%ma_variable_du_local_2%

rem On ferme le local, toutes les variables qu'on a déclaré dans ce local sont supprimés
endlocal
 
echo;%ma_variable_global%
 
rem erreur la variable n'existe plus
echo;%ma_variable_local%
 
pause>nul&exit



programme a écrit:
Pourquoi mettre 'exit /b' si il n'y a rien derrière?

Un exit /b c'est comme un goto :eof mais en mieux
Il permet d'envoyer un code exit qui peut s'utiliser de cette façon :

Code:
@echo off


call :ma_fonction
if %errorlevel%==0 (
  echo;Success!
) else (
  echo;Error
)


pause>nul&exit


:ma_fonction
  rem le code 1 est généralement utilisé pour dire qu'il y a une erreur
  set code=1
exit /b %code%

De plus, le exit /b est beaucoup + rapide dans des programmes volumineux


Pour addition, on peut faire comme ça : https://pastebin.com/raw/rSEuG17w
Pour condition il faut procéder de la même manière



Et si on regroupe toutes les fonctions dans une seule fonction, ça donne ça :
https://pastebin.com/raw/DnA7RFGe



Dernière édition par Flammrock le Sam 26 Mai 2018 - 23:50; édité 1 fois

______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] Problème de reset de variable 
Flammrock a écrit:
programme a écrit:
Pourquoi as tu ajouté la variable 'aa' dans le code ?


Pour rediriger vers le exit /b une fois le résultat obtenu



programme a écrit:
Un simple endlocal ne suffirait-il pas au lieu d'en mettre 3?

En fait, je me suis basé sur ta fonction et tu ouvrais 3 local donc quand je l'ai modifié j'ai rajouté 3 endlocal pour fermer les 3 locals

Pour mieux comprendre l'imbrication des locals :
Code:
@echo off
 
set ma_variable_global=Bonjour
 
rem On définit un local
setlocal
 

  set ma_variable_local=Salut

  rem On définit un 2ème local
  setlocal
   
    set ma_variable_du_local_2=Guten Tag

  rem On ferme le local, toutes les variables qu'on a déclaré dans ce local sont supprimés
  endlocal


  rem erreur la variable n'existe plus
  echo;%ma_variable_du_local_2%

rem On ferme le local, toutes les variables qu'on a déclaré dans ce local sont supprimés
endlocal
 
echo;%ma_variable_global%
 
rem erreur la variable n'existe plus
echo;%ma_variable_local%
 
pause>nul&exit



programme a écrit:
Pourquoi mettre 'exit /b' si il n'y a rien derrière?

Un exit /b c'est comme un goto :eof mais en mieux
Il permet d'envoyer un code exit qui peut s'utiliser de cette façon :

Code:
@echo off


call :ma_fonction
if %errorlevel%==0 (
  echo;Success!
) else (
  echo;Error
)


pause>nul&exit


:ma_fonction
  rem le code 1 est généralement utilisé pour dire qu'il y a une erreur
  set code=1
exit /b %code%

De plus, le exit /b est beaucoup + rapide dans des programmes volumineux


Pour addition, on peut faire comme ça : https://pastebin.com/raw/rSEuG17w
Pour condition il faut procéder de la même manière



Et si on regroupe toutes les fonctions dans une seule fonction, ça donne ça :
https://pastebin.com/raw/pbhUKn8M


Excellent! Merci pour tout ! Okay Okay Okay Cela va beaucoup m'aider dans mon programme et changer ma façon de programmer (c'est vrmt bien pensé les .sub,...)

Encore merci ! Sujet résolut !




______________________________________________________

Programme
Skype
Répondre en citant
Message [R] Problème de reset de variable 
Flammrock a écrit:
programme a écrit:
Pourquoi as tu ajouté la variable 'aa' dans le code ?


Pour rediriger vers le exit /b une fois le résultat obtenu



programme a écrit:
Un simple endlocal ne suffirait-il pas au lieu d'en mettre 3?

En fait, je me suis basé sur ta fonction et tu ouvrais 3 local donc quand je l'ai modifié j'ai rajouté 3 endlocal pour fermer les 3 locals

Pour mieux comprendre l'imbrication des locals :
Code:
@echo off
 
set ma_variable_global=Bonjour
 
rem On définit un local
setlocal
 

  set ma_variable_local=Salut

  rem On définit un 2ème local
  setlocal
   
    set ma_variable_du_local_2=Guten Tag

  rem On ferme le local, toutes les variables qu'on a déclaré dans ce local sont supprimés
  endlocal


  rem erreur la variable n'existe plus
  echo;%ma_variable_du_local_2%

rem On ferme le local, toutes les variables qu'on a déclaré dans ce local sont supprimés
endlocal
 
echo;%ma_variable_global%
 
rem erreur la variable n'existe plus
echo;%ma_variable_local%
 
pause>nul&exit



programme a écrit:
Pourquoi mettre 'exit /b' si il n'y a rien derrière?

Un exit /b c'est comme un goto :eof mais en mieux
Il permet d'envoyer un code exit qui peut s'utiliser de cette façon :

Code:
@echo off


call :ma_fonction
if %errorlevel%==0 (
  echo;Success!
) else (
  echo;Error
)


pause>nul&exit


:ma_fonction
  rem le code 1 est généralement utilisé pour dire qu'il y a une erreur
  set code=1
exit /b %code%

De plus, le exit /b est beaucoup + rapide dans des programmes volumineux


Pour addition, on peut faire comme ça : https://pastebin.com/raw/rSEuG17w
Pour condition il faut procéder de la même manière



Et si on regroupe toutes les fonctions dans une seule fonction, ça donne ça :
https://pastebin.com/raw/pbhUKn8M


J ai relevé un bug et une faute de frappe. Le lss affiche true quand les nombres sont egaux et il y a un setn=false quelque part
Saurais tu y regarder ?




______________________________________________________

Programme
Skype
Répondre en citant
Message [R] Problème de reset de variable 
programme a écrit:
J ai relevé un bug et une faute de frappe. Le lss affiche true quand les nombres sont egaux et il y a un setn=false quelque part
Saurais tu y regarder ?


Code Complet Corrigé : https://pastebin.com/raw/DnA7RFGe Mr. Green




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] Problème de reset de variable 
Flammrock a écrit:
programme a écrit:
J ai relevé un bug et une faute de frappe. Le lss affiche true quand les nombres sont egaux et il y a un setn=false quelque part
Saurais tu y regarder ?


Code Complet Corrigé : https://pastebin.com/raw/DnA7RFGe Mr. Green


Bonjour, je me permet de revenir ici pour une explication. Donc j'ai ici le même genre de code qui utilise des setlocal.

Pour bien faire je mets mon setlocal dans le code que j'appelle au lieu de le mettre en début de code principal. Ensuite il faut que je mette des endlocal avant le exit /b mais le problème c'est que ma variable de retour (ici hello) est vidée à cause du endlocal. Comment faire en sachant que ici j'ai 3 exit /b qui retournent au code principal?


Code:

@echo off
call:add_sous 25000000 -4500000000 hello
echo %hello%
call:add_sous 250000 -4500000000 hello
echo %hello%
pause
exit
:add_sous
setlocal enableextensions
setlocal enabledelayedexpansion
set num1=%1
set num2=%2
set test_moins_num_un=!num1:~0,+1!
set test_moins_num_deux=!num2:~0,+1!
if "%test_moins_num_un%" NEQ "-" if "%test_moins_num_deux%" EQU "-" (
call:sous %num1% %num2% %3
exit /b
)
if "%test_moins_num_un%" EQU "-" if "%test_moins_num_deux%" NEQ "-" (
call:sous %num1% %num2% %3
exit /b
)
if "%test_moins_num_un%" EQU "-" if "%test_moins_num_deux%" EQU "-" (
set num1=!num1:~1!
set num2=!num2:~1!
)
call:longueur_num %num1% longueur_num1
call:longueur_num %num2% longueur_num2
set max_add=%longueur_num1%
if %longueur_num1% GTR %longueur_num2% (
set max_add=%longueur_num2%
set long_num=num1
)
if %longueur_num1% LSS %longueur_num2% (
set max_add=%longueur_num1%
set long_num=num2
)
set dixaine_a_rajouter=
set nbr=0
set /a a_retirer_debut_num1=%longueur_num1%-1
set /a a_retirer_debut_num2=%longueur_num2%-1
:loop_add
if %max_add% EQU %nbr% (
set a_rajouter=0
if defined dixaine_a_rajouter set /a a_rajouter=!%long_num%:~0,-%nbr%!+%dixaine_a_rajouter%
if defined long_num set %3=!a_rajouter!!%3!
if "%test_moins_num_un%" EQU "-" if "%test_moins_num_deux%" EQU "-" set %3=-!%3!
exit /b
)
if %nbr% EQU 0 (
set chiffre_num1=!num1:~-1!
set chiffre_num2=!num2:~-1!
)
if %nbr% NEQ 0 (
set chiffre_num1=!num1:~%a_retirer_debut_num1%,-%nbr%!
set chiffre_num2=!num2:~%a_retirer_debut_num2%,-%nbr%!
)
if defined dixaine_a_rajouter (
set /a chiffre_num1+=1
set dixaine_a_rajouter=
)
set /a somme=%chiffre_num1%+%chiffre_num2%
if %somme% GTR 9 (
set dixaine_a_rajouter=1
set somme=!somme:~1!
)
set %3=%somme%!%3!
set /a a_retirer_debut_num1-=1
set /a a_retirer_debut_num2-=1
set /a nbr+=1
goto loop_add
:sous
set test_moins_num_un=!num1:~0,+1!
set test_moins_num_deux=!num2:~0,+1!
if "%test_moins_num_un%" EQU "-" (
set num1=!num1:~1!
)
if "%test_moins_num_deux%" EQU "-" (
set num2=!num2:~1!
)
call:islarger %num1% %num2% result
set num1=%1
set num2=%2
set test_moins_num_un=!num1:~0,+1!
set test_moins_num_deux=!num2:~0,+1!
if "%test_moins_num_un%" EQU "-" (
set num1=!num1:~1!
)
if "%test_moins_num_deux%" EQU "-" (
set num2=!num2:~1!
)
if "%result%" EQU "equ" (
set %3=0
exit /b
)
set signe_moins=
set terme_un=%num1%
set terme_deux=%num2%
if "%result%" EQU "lss" (
set signe_moins=-
set terme_un=%num2%
set terme_deux=%num1%
)
set dixaine_a_retirer=0
set nbr=0
call:longueur_num %terme_un% longueur_terme_un
set /a a_retirer_debut_num1=%longueur_terme_un%-1
set /a a_retirer_debut_num2=%longueur_num2%-1
set /a longueur_terme_un-=1
:loop_sous
if %nbr% EQU 0 (
set chiffre_num1=!terme_un:~-1!
set chiffre_num2=!terme_deux:~-1!
)
if %nbr% NEQ 0 (
set chiffre_num1=!terme_un:~%a_retirer_debut_num1%,-%nbr%!
set chiffre_num2=!terme_deux:~%a_retirer_debut_num2%,-%nbr%!
)
if "%chiffre_num2%" EQU "" set chiffre_num2=0
if %dixaine_a_retirer% NEQ 0 (
set /a chiffre_num2+=%dixaine_a_retirer%
set dixaine_a_retirer=0
)
set /a soustraction=%chiffre_num1%-%chiffre_num2%
if "!soustraction:~0,+1!" EQU "-" (
set /a dixaine_a_retirer+=1
set /a soustraction=1%chiffre_num1%-%chiffre_num2%
)
set %3=%soustraction%!%3!
if %nbr% EQU %longueur_terme_un% (
set %3=%signe_moins%!%3!
exit /b
)
set /a a_retirer_debut_num1-=1
set /a a_retirer_debut_num2-=1
set /a nbr+=1
goto loop_sous
:islarger
set num1cnt=
set num2cnt=
   set num1=%1
   set num2=%2
   
set test_moins_num_un=!num1:~0,+1!
set test_moins_num_deux=!num2:~0,+1!
if "%test_moins_num_un%" EQU "-" (
set num1=!num1:~1!
)
if "%test_moins_num_deux%" EQU "-" (
set num2=!num2:~1!
)
   if "%test_moins_num_un%" NEQ "-" if "%test_moins_num_deux%" EQU "-" (
   set %3=gtr
   exit /b
   )
   if "%test_moins_num_un%" EQU "-" if "%test_moins_num_deux%" NEQ "-" (
   set %3=lss
   exit /b
   )
   for /l %%a in (1,1,2) do (
      for /l %%b in (0,1,9) do (
         set num%%a=!num%%a:%%b=%%b !
         )
      )
   for %%a in (!num1!) do set /a num1cnt+=1 & set _!num1cnt!num1=%%a
   for %%a in (!num2!) do set /a num2cnt+=1 & set _!num2cnt!num2=%%a
   if !num1cnt! NEQ !num2cnt! (
      if !num1cnt! GTR !num2cnt! (
         set %3=gtr
   goto traitement_moins
         ) else (
         set %3=lss
   goto traitement_moins
         )
      )
   for /l %%a in (1,1,!num1cnt!) do (
      if !_%%anum1! NEQ !_%%anum2! (
         if !_%%anum1! GTR !_%%anum2! (
            set %3=gtr
   goto traitement_moins
            ) else (
            set %3=lss
   goto traitement_moins
            )
         )
      )
   set %3=equ
   :traitement_moins
   if "%test_moins_num_un%" EQU "-" if "%test_moins_num_deux%" EQU "-" (
   echo  if "!%3!" EQU "gtr" set %3=lss
   if "!%3!" EQU "gtr" (
   set %3=lss
   exit /b
   )
   if "!%3!" EQU "lss" (
   set %3=gtr
   exit /b
   )
   )
   exit /b
:longueur_num
set num=%1
:loop_longueur_num
if "%num%" EQU "" exit /b
set num=!num:~+1!
set /a %2+=1
goto loop_longueur_num


Merci d'avance, Mr. Green




______________________________________________________

Programme
Skype
Répondre en citant
Message [R] Problème de reset de variable 
programme a écrit:
Bonjour, je me permet de revenir ici pour une explication. Donc j'ai ici le même genre de code qui utilise des setlocal.

Pour bien faire je mets mon setlocal dans le code que j'appelle au lieu de le mettre en début de code principal. Ensuite il faut que je mette des endlocal avant le exit /b mais le problème c'est que ma variable de retour (ici hello) est vidée à cause du endlocal. Comment faire en sachant que ici j'ai 3 exit /b qui retournent au code principal?

{{{Code}}}

Merci d'avance, Mr. Green


Dans ce genre de code, vaut mieux avoir un seul point d'entrée et un seul point de sortie Okay

Voilà le code corrigé :
CODE COMPLET : https://pastebin.com/raw/WmWV5P1r

p.s. : j'ai testé tout le code de A à Z
et ce code se comporte anormalement :
Code:
  set num1=%1
  set num2=%2
  set test_moins_num_un=!num1:~0,+1!
  set test_moins_num_deux=!num2:~0,+1!
  if "!num1:~0,1!"=="-" set num1=!num1:~1!
  if "!num2:~0,1!"=="-" set num2=!num2:~1!

  !addSous!.LengthNum %num1% longueur_num1
  !addSous!.LengthNum %num2% longueur_num2

  set max_add=%longueur_num1%
  if %longueur_num1% GTR %longueur_num2% (
    set max_add=%longueur_num2%
    set long_num=num1
  )
  if %longueur_num1% LSS %longueur_num2% (
    set max_add=%longueur_num1%
    set long_num=num2
  )
  set dixaine_a_rajouter=
  set nbr=0
  set /a a_retirer_debut_num1=%longueur_num1%-1
  set /a a_retirer_debut_num2=%longueur_num2%-1
  :loop_add1
    if %max_add% EQU %nbr% (
      set a_rajouter=0
      if defined dixaine_a_rajouter set /a a_rajouter=!%long_num%:~0,-%nbr%!+%dixaine_a_rajouter%
      if defined long_num set %3=!a_rajouter!!%3!
      if "%test_moins_num_un%" EQU "-" if "%test_moins_num_deux%" EQU "-" set %3=-!%3!
      exit /b
    )
    if %nbr% EQU 0 (
      set chiffre_num1=!num1:~-1!
      set chiffre_num2=!num2:~-1!
    )
    if %nbr% NEQ 0 (
      set chiffre_num1=!num1:~%a_retirer_debut_num1%,-%nbr%!
      set chiffre_num2=!num2:~%a_retirer_debut_num2%,-%nbr%!
    )
    if defined dixaine_a_rajouter (
      set /a chiffre_num1+=1
      set dixaine_a_rajouter=
    )
   
    set /a somme=%chiffre_num1%+%chiffre_num2%
    if %somme% GTR 9 (
      set dixaine_a_rajouter=1
      set somme=!somme:~1!
    )
    set %3=%somme%!%3!
    set /a a_retirer_debut_num1-=1
    set /a a_retirer_debut_num2-=1
    set /a nbr+=1
  goto loop_add1
Exit /b





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] Problème de reset de variable 
Merci Okay Désolé de ma réponse tardive Embarassed J'essaye de résoudre des bugs ennuyants sur le programme qui utilise ce code (on dirait pas mais c'est dur ahah) Enfin bref j'ai compris maintenant

En fait pour récupérer une variable il faut faire ainsi c'est ça?
Code:
setlocal
set result=hello
(
endocal
set ma_variable=%result%
)


Donc utiliser des parenthèses ou sinon cela ne marche pas


J'ai revu mes codes j'ai fais des modifications et cela marche maintenant Okay

Merci beaucoup!




______________________________________________________

Programme
Skype
Message [R] Problème de reset de variable 


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