IF Condicional archivos por lotes

Resuelto
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

3 respuestas

  1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    hola
    poner un espacio entre 10 y (
    IF !val! LSS 10 ( 
    0
  2. ismail.bensikali
     
    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.
    0
  3. ismail.bensikali
     
    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.
    0