@echo off
setlocal enabledelayedexpansion
set "$file=futuroscielotan.txt"
set "$search=Previsto"
set "output=Futuros Cielo Tan.txt"
set "$repl[2]=TOTAL "
set "$repl[3]=Visa "
set "$repl[4]=Mastercard "
set "$repl[5]=Amex "
set "$repl[6]=Sorocred "
set "$repl[7]=Elo "
set "$repl[8]=Diners "
set "$repl[9]=Agiplan "
set "$repl[10]=Banescard "
set "$repl[11]=Cabal "
set "$repl[12]=Credsystem "
set "$repl[13]=Hipercard "
set "$repl[14]=Credz "
set "$repl[15]=Hiper "
set "$count=1"
set "total=0"
:: Empty output file.
2> "%output%" echo.
:: Process input file and sum the currency.
for /f "usebackq delims=" %%A in ("%$file%") do (
call :replace "%%A" !$count! >> "%output%"
set /a $count+=1
for /f "tokens=1-4" %%B in ("%%~A") do (
if /i not "%%~B" == "total" if /i "%%~D" == "R$" (
call :sum "%%~E"
)
)
)
:: Modifies total to european currency notation.
call :digits2currency "%total%"
(
echo.
echo TOTAL CARD VALUES CHECKED: R$ %total%
echo.
echo --- FUTUROS CIELO TAN ---
) >> "%output%"
@rem mkdir "C:\Users\lojas\Desktop\Extratos Banco"
@rem move "Futuros Cielo Tan.txt" "C:\Users\lojas\Desktop\Extratos Banco\Futuros Cielo Tan.txt"
exit/b
:replace
set "$line=%~1"
set $repl=!$repl[%2]!
set "$line=!$line:%$search%=%$repl%!"
echo !$line!
if "%2"=="1" echo.
if "%2"=="2" echo.
exit /b
:sum
setlocal
set "string=%~1"
if not defined string exit /b 0
:: Remove separators.
set "digits=%string:,=%"
set "digits=%digits:.=%"
:: Remove a leading 0 so not treated as octal notation.
if "%digits:~0,1%" == "0" set "digits=%digits:~1%"
if "%digits:~0,1%" == "0" set "digits=%digits:~1%"
if not defined string set "string=0"
endlocal & set /a "total+=%digits%"
exit /b 0
:digits2currency
setlocal
set "digits=%~1"
:: Set decimal digits.
set "subtotal=,%digits:~-2%"
set "digits=%digits:~0,-2%"
if defined digits goto :loop
:: Trim 1st separator.
set "subtotal=%subtotal:~1%"
:: Add leading zeros.
if "%subtotal:~0,-1%" == "" (
set "subtotal=0,0%subtotal%"
) else (
set "subtotal=0,%subtotal%"
)
endlocal & set "total=%subtotal%"
exit /b
:: Set thousandths digits.
:loop
set "subtotal=.%digits:~-3%%subtotal%"
set "digits=%digits:~0,-3%"
if defined digits goto :loop
:: Trim 1st separator.
set "subtotal=%subtotal:~1%"
endlocal & set "total=%subtotal%"
exit /b 0
На основании 1-го кода и метки :replace
не изменено.Прокомментированные строки mkdir
и move
для тестирования.
Используется как вход, который определяет настройку токенов в цикле for
:
01/06/2018 à 20/03/2019
TOTAL : R$ 22.250,74
Visa : R$ 1.086,51
Mastercard : R$ 492,63
Amex : R$ 0,00
Sorocred : R$ 20.109,98
Elo : R$ 0,00
Diners : R$ 0,00
Agiplan : R$ 0,00
Banescard : R$ 0,00
Cabal : R$ 0,00
Credsystem : R$ 0,00
Hipercard : R$ 0,00
Credz : R$ 0,00
Вызванная метка :sum
удаляет начальный ноль, запятая и десятичная точка из каждой пройденной строки валюты.Он добавляет оставшееся целое число к итоговой переменной с помощью set /a
.
Вызванная метка :digits2currency
форматирует целочисленное значение total
для обозначения валюты.Если только десятичное число, оно завершится рано с обновлением отформатированной строки, в противном случае - тысячные.Переменная total
повторно используется из целочисленной строки в строку валюты.
Также попробуйте ввести:
01/06/2018 à 20/03/2019
TOTAL : R$ 0,00
Visa : R$ 0,09
Mastercard : R$ 0,00
Amex : R$ 0,00
Sorocred : R$ 0,00
Elo : R$ 0,00
Diners : R$ 0,00
Agiplan : R$ 0,00
Banescard : R$ 0,00
Cabal : R$ 0,00
Credsystem : R$ 0,00
Hipercard : R$ 0,00
Credz : R$ 0,00
, так как сумма должна составлять 0,09
.