elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Sumar números de un .txt en Batch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sumar números de un .txt en Batch  (Leído 3,801 veces)
rafaeljoseyepez

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Sumar números de un .txt en Batch
« en: 5 Junio 2020, 20:06 pm »

Buenas tardes, reciban un cordial saludo.

Tengo una duda, tengo un batch que me da como salida un archivo llamado total.txt y cada línea tiene un número, me gustaría sumar el total de ese archivo y me lo imprimiera en pantalla, es decir si el archivo tiene

5.5
2.5
3
4

que imprima TOTAL: 15


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: Sumar números de un .txt en Batch
« Respuesta #1 en: 5 Junio 2020, 23:03 pm »

Saludos,

- CMD no soporta aritmética con decimales, podrías utilizar métodos complejos extrayendo los decimales para tratarlos por separado ..., o mejor llamar a otra aplicación nativa para que haga el trabajo ya sea parcial o completamente, en este caso PowerShell que ya viene desde Windows 7 o WScript que ya viene desde Windows 98, recomendaría PowerShell ya que es mucho más sencillo y directo:

Citar
C:\Users\EdSon\Desktop>PowerShell "ForEach ($n in Get-Content .\numeros.txt) { [Double]$total += $n }; Write-Host Total: $total"
Total: 15

C:\Users\EdSon\Desktop>

-- Suponiendo que exista el archivo numeros.txt en la carpeta actual


En línea

rafaeljoseyepez

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Sumar números de un .txt en Batch
« Respuesta #2 en: 6 Junio 2020, 00:30 am »

Encontré la forma, así:

Código
  1. for %%F in (
  2.  total.txt
  3.  
  4. ) do (
  5.  set /a DOLARES=0
  6.  for /f "usebackq  delims=," %%a in ("%%F")  do set /a DOLARES+=%%a
  7.  
  8. )
  9.  

pero como dices, me da problema con los decimales...

Encontré la forma con este código de que haga operaciones y me acepte decimales:

Código
  1. :_calc
  2. setlocal enabledelayedexpansion
  3. if "%~1" EQU "add" set "sym=+"
  4. if "%~1" EQU "sub" set "sym=-"
  5. set "add_str=%~2"
  6. set "add_str=!add_str:%sym%= !"
  7. set/a hst=0,cnt=0,add=0
  8. for %%_ in (%add_str%) do (
  9.   set/a dec[!cnt!]=0
  10.   for /f "tokens=2 delims=." %%. in ("%%_") do (
  11.      call :_strlen "%%."
  12.      set/a dec[!cnt!]=!errorlevel!
  13.      if !errorlevel! GTR !hst! set/a hst=!errorlevel!
  14.   )
  15.   set/a cnt+=1
  16. )
  17. set/a cnt=0
  18. if "%sym%" EQU "-" for %%_ in (%add_str:.=%) do (
  19.   set/a pow=%hst%-%dec[0]%,n_b=%%_
  20.   for /l %%. in (1,1,!pow!) do set "n_b=!n_b!0"
  21.   set/a add+=!n_b!*2
  22.   goto :__op
  23. )
  24. :__op
  25. for %%_ in (%add_str:.=%) do (
  26.   call set/a pow=%hst%-%%dec[!cnt!]%%,n_b=%%_
  27.   for /l %%. in (1,1,!pow!) do set "n_b=!n_b!0"
  28.   set/a add%sym%=!n_b!,cnt+=1
  29. )
  30. set "res=!add:~0,-%hst%!.!add:~-%hst%!"
  31. if %hst% EQU 0 set "res=%res:~1%"
  32. endlocal & set "%~3=%res%" & exit /b
  33. :_strlen
  34.   setlocal
  35.   set/a cnt=0
  36.   for /f "tokens=* eol=" %%_ in (
  37.      '"cmd /u /c echo:%~1|more"'
  38.   ) do set/a cnt+=1
  39.   endlocal & exit /b %cnt%

y dentro del batch para invocar el código para hacer cualquier operación se llamaría de la siguiente manera:

Código
  1. call:_calc add 2.3658+8.4102+14.61 var
  2. echo:%var%

Lo que no sé es como incorporar eso el resultado del conteo de líneas...



Pero no sé como hacer el llamado para que me funcione con la sumatoria de las líneas...

Intenté esto, pero NO funciona, no logro comprender la lógica del código...
Código
  1. ) do (
  2.  set /a DOLARES=0
  3.  for /f "usebackq  delims=," %%a in ("%%F") do call:_calc add DOLARES+=%%a
  4.  
  5. )

« Última modificación: 6 Junio 2020, 20:23 pm por rafaeljoseyepez » En línea

rafaeljoseyepez

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Sumar números de un .txt en Batch
« Respuesta #3 en: 8 Junio 2020, 06:26 am »

Saludos,

- CMD no soporta aritmética con decimales, podrías utilizar métodos complejos extrayendo los decimales para tratarlos por separado ..., o mejor llamar a otra aplicación nativa para que haga el trabajo ya sea parcial o completamente, en este caso PowerShell que ya viene desde Windows 7 o WScript que ya viene desde Windows 98, recomendaría PowerShell ya que es mucho más sencillo y directo:

-- Suponiendo que exista el archivo numeros.txt en la carpeta actual

Terminé solucionando tomando tu idea, seguí haciendo todo en batch, pero con un truquito....

Dentro de mi batch creé el archivo ps1 así:

Código
  1. Echo . |set /p="ForEach ($n in Get-Content .\total.txt) { [Double]$total += $n }; Write-Host $total">>total.ps1 2>&1

dentro del mismo batch ejecuto el comando powershell siguiente:

Código
  1. Powershell.exe -executionpolicy remotesigned -File  total.ps1>>f.txt 2>&1
Ese comando me genera un archivo de texto f.txt que contiene el total

Luego leo el archivo f.txt y el contenido le asigno la variable DOLARES
Código
  1. (
  2. set /p DOLARES=
  3. )<f.txt

Luego elimino los dos archivos f.txt y total.ps1

Código
  1. del "f.txt" /s /f /q
  2. del "total.ps1" /s /f /q
  3.  

y %DOLARES% imprime la cantidad con decimales, y todo dentro de batch, quien lo ejecuta ni cuenta se da que pasa por powershell :D

Gracias por darme esa idea amigo!





En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al sumar 2 numeros en visual basic. « 1 2 »
Programación Visual Basic
El_Marine 10 5,187 Último mensaje 4 Agosto 2006, 23:47 pm
por Robokop
Sumar todos los numeros comprendidos entre 1 y 100 (C++)
Programación C/C++
Danyel_Casvill 2 13,667 Último mensaje 28 Abril 2011, 03:49 am
por Danyel_Casvill
Java, sumar los numeros elegidos por el usuario
Java
juanhsc 5 3,112 Último mensaje 11 Marzo 2015, 19:55 pm
por Usuario Invitado
Sumar y multiplicar una serie de números
Programación C/C++
SebaC 6 2,979 Último mensaje 9 Mayo 2016, 20:26 pm
por geeke
sumar numeros en un texto
Programación General
daniel7885 6 4,912 Último mensaje 22 Septiembre 2016, 18:28 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines