IF Condicional archivos por lotes
Resuelto
ismail.bensikali
-
ismail.bensikali -
ismail.bensikali -
Hola,
Tengo un conjunto de archivos que contienen valores que debo recuperar y calcular la media; el problema es que BATCh no contempla los decimales, así que todo lo que está después de la coma es=0.
Pero todos mis valores tienen la forma 0.xxx..
también estos archivos se generan automáticamente y no puedo multiplicarlos por 10^
Por lo tanto intenté recuperar los valores que están después de (0.).
el problema es que primero debo hacer una prueba sobre los valores recuperados antes de hacer la suma: por ejemplo
0.1234 ===> 1234
0.9 ====> 9 (debo multiplicarlo por 1000 para que sea correcto)
por lo que si sumo directamente el resultado va a ser inaceptable!
Entonces primero hay que probar los valores respecto a 10 , 100 , y 1000
Aquí la parte de código de prueba (de donde surgen los problemas):
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
hace casi tres días que intento hacer funcionar este código pero realmente no funciona!
Creo que el problema está en la estructura de if.
Si tienen ideas no duden en compartir.
Gracias
Tengo un conjunto de archivos que contienen valores que debo recuperar y calcular la media; el problema es que BATCh no contempla los decimales, así que todo lo que está después de la coma es=0.
Pero todos mis valores tienen la forma 0.xxx..
también estos archivos se generan automáticamente y no puedo multiplicarlos por 10^
Por lo tanto intenté recuperar los valores que están después de (0.).
el problema es que primero debo hacer una prueba sobre los valores recuperados antes de hacer la suma: por ejemplo
0.1234 ===> 1234
0.9 ====> 9 (debo multiplicarlo por 1000 para que sea correcto)
por lo que si sumo directamente el resultado va a ser inaceptable!
Entonces primero hay que probar los valores respecto a 10 , 100 , y 1000
Aquí la parte de código de prueba (de donde surgen los problemas):
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
hace casi tres días que intento hacer funcionar este código pero realmente no funciona!
Creo que el problema está en la estructura de if.
Si tienen ideas no duden en compartir.
Gracias
3 respuestas
-
hola
poner un espacio entre 10 y (IF !val! LSS 10 (
-
hola dubcek ;
gracias por tu respuesta sí E s el problema! de hecho batch es muy estricto en la forma de los comandos ; bueno esto es lo que hice (cuento a 7 cifras después de la coma)
FOR /F "tokens=1,2* delims=0." %%i in (xxx.cvs) do (
set /a val=%%j
echo !val!
rem contador de iteraciones
set /a z=!z!+1
if !val!==0 (
rem contar los valores nulos
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 moyenne
set /a avg=!somme!/d
Merci. -
Hola,
para ser más precisos debemos reemplazar:
FOR /F "tokens=1,2* delims=0." %%i in (xxx.cvs) do (
por:
FOR /F "tokens=1,2* delims=." %%i in (xxx.cvs) do (
porque si tienes valores que contienen 0 solo la parte antes de 0 será recuperada, por ejemplo:
0.123456 => 1234
pero
0.120456 => 12
Gracias.