IF Conditionnel Batch files

Résolu/Fermé
ismail.bensikali - 26 mars 2013 à 16:12
 ismail.bensikali - 27 mars 2013 à 17:48
Bonjour,

J'ai un ensemble de fichiers qui contiennent des valeurs que je doit recuperer et chercher la moyenne ; le probleme est que BATCh ne concidere pas les decimaux donc tout ce qui est apres la vergule est=0.
Mais toutes mais valeurs sont de la forme 0.xxx..
aussi ces fichiers sont generer automatiquement et je ne peut pas les multuplier par 10^
Donc j'ai essayer de recuperer les valeurs qui sont apres (0.).
le probleme est que je doit faire dabord un test sur les valeurs recuperes avant de faire la somme : exemple

0.1234 ===>1234
0.9 ====>9 (je doit la multuplier par 1000 pour etre correct)
donc si on fait la somme directement le resultat va etre non tolerable!
Donc dabord il faut tester les valeurs par rapport a 10 , 100 , et 1000
Voila la partir de code de test (d'ou les problemes arrivent):

IF !val! LSS 10(
set /a val=!val!*1000
) ELSE IF !val! LSS 100 (
set /a val= !val!*100
)ELSE IF !val! LSS 1000 (
set /a val = !val!*10
)
echo !val!


pause

ca fait presque tois jour que j'essaye de faire marcher ce code mais vraiment pas de resultats!
Je pense que le probleme est dans la structure de if.


Si vous avez des idees n'hesiter pas.
Merci
A voir également:

3 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
27 mars 2013 à 09:42
hello
mettre un espace entre 10 et (
IF !val! LSS 10 ( 
0
ismail.bensikali
27 mars 2013 à 15:12
hello dubcek ;
merci pour votre reponce oui C est ca le probleme! en effet batch est tres stricte dans la forme des commandes ; bref voila ce que j'ai fait (je compte a 7 chiffres apres la virgule)
FOR /F "tokens=1,2* delims=0." %%i in (xxx.cvs) do (
set /a val=%%j
echo !val!
rem compteur des iterations
set /a z=!z!+1
if !val!==0 (

rem compter les valeurs nulles
set /a x=!x!+1
) else if !val! LSS 10 (
set /a s=!val!*100000
)else if !val! LSS 100 (
set /a s=!val!*10000
)else if !val! LSS 1000 (
set /a s=!val!*1000
) else if !val! LSS 10000 (
set /a s=!val!*100
) else if !val! LSS 100000 (
set /a s=!val!*10
) else if !val! LSS 1000000 (

set /a s=!val!*1

) else (
set /a s=0
set /a x=!x!+1

)
set /a somme=!somme! + !s!
@echo !somme!
)

set /a d=!z!-!x!
rem d=nbr iterations-nbre val nulles
rem avg=moyenne
set /a avg=!somme!/d

Merci.
0
ismail.bensikali
27 mars 2013 à 17:48
Salut,

pour etre plus correcte on doit rempalcer:
FOR /F "tokens=1,2* delims=0." %%i in (xxx.cvs) do (

par:
FOR /F "tokens=1,2* delims=." %%i in (xxx.cvs) do (

car si vous avez des valeurs qui contiennent 0 seulement la partie avant 0 va etre recuperee exemple:
0.123456 ===>1234
mais
0.120456===> 12

Merci.
0