Прежде чем начать, я бы включил эту ссылку на проблему в текстовый документ с выделенными текстами, чтобы проблема была намного понятнее
https://archive.org/download/batfile10112019/bat%20file%2010112019.rar
*0000000000003000345800483854651180013732112019 0
*000000000010004466170000003000083BOUBADJA SAFIA 1
*000000000010010346810000003110730BOUKHEMKHEM NABILA 1
*000000000010010694160000000000806ROUIBAH MESSAOUDA 1
*000000000010014708210000000000999SETILA AFAF 1
*000000000010024010600000003176161ZAITER EP BOUHAROUD SOUAD 1
*000000000010054726551524653176161BOULASSEL NORA 1
Предположим, у меня есть вышеуказанный текстовый файл, который содержит строки, длина каждой строки составляет 62 (комбинация символов и пробелов, вы можете проверить, поместив курсор перед символом «*» и посчитав до последнегохарактер). Я хочу сохранить заголовок как есть, но для других строк мне нужен командный файл (.bat
), который будет делать следующее:
- Сохранить заголовок как есть (как якак указано выше).
Из каждой суммы в строках будет взято 10,00 (денежная единица, будь то евро, доллар и т. д.), сумма каждой строки начинается с позиции «22» допозиция «34», поэтому сумма:
- Вторая строка: 30000.83
- Третья строка: 31107.30
- Четвертая строка: 8.06
- Пятая строка: 9.99
- Шестая строка: 31761.61
- Седьмая строка: 15246531761.61
Мы не можем взять 10,00 (долларов или евро или что-то еще ...) из сумм четвертой и пятой строк, которые равны 8,06 и 9,99 соответственно, поэтому пакетный файл сохранит их такими, какие они есть. Но для сумм второй, третьей, шестой и седьмой строки будут изменены следующие значения:
- Вторая строка: 29990,83
- Третья строка: 31097.30
- Четвёртая строка: 8.06
- Пятая строка: 9.99
- Шестая строка: 31751.61
- Седьмая строка: 15246531751.61
Таким образом, выходной файл будет выглядеть так:
*0000000000003000345800483854651180013732112019 0
*000000000010004466170000002999083BOUBADJA SAFIA 1
*000000000010010346810000003109730BOUKHEMKHEM NABILA 1
*000000000010010694160000000000806ROUIBAH MESSAOUDA 1
*000000000010014708210000000000999SETILA AFAF 1
*000000000010024010600000003175161ZAITER EP BOUHAROUD SOUAD 1
*000000000010054726551524653175161BOULASSEL NORA 1
У меня есть другая проблема, когда я имею дело с большим текстовым файлом (15000 строк)
Мне помог друг, нов коде были некоторые ошибки, поэтому я включил вышеуказанную ссылку в текстовый документ, чтобы увидеть сообщение об ошибке при работе с текстовыми файлами, которые содержат более 10000 строк.
код:
@echo off
setlocal enableextensions enabledelayedexpansion
chcp 28591 >nul
set nouveau=modified.txt
echo. > %nouveau%
for /f "usebackq delims=" %%A in ("original file.txt") do (
set "line=%%A"
set "index=!line:~-1!"
if !index! EQU 1 (
set "account=!line:~0,21!"
set "amount=!line:~21,13!"
set "number=!line:~21,9!"
set "cut=!line:~30,4!"
set "client=!line:~34!
call :zeros amount
if !amount! GEQ 1000 (
set /a cut=!cut!-1000
set cut=000!cut!
set cut=!cut:~-4!
)
echo.!account!!number!!!cut!!client!
) else (echo.!line!)
) >> %nouveau%
exit
:zeros
set "chaine=!%1!"
for /L %%E in (0,1,12) do (
if not "!chaine:~%%E,1!"=="0" (set "%1=!chaine:~%%E!" & goto :eof)
)
goto :eof
Я надеюсь, что я могу взять любую сумму с любой строки (10,00 в этом примере). Если я хочу изменить его на 5,00, можно ли просто изменить значение с 10,00 до 5,00 в предоставленном коде. заранее спасибо за любую помощь от вас, ребята