Изменить строку за строкой .txt, используя .bat - PullRequest
0 голосов
/ 04 июня 2018

У меня есть .txt файл:

Previsto:  R$ 9.766,53  
Previsto:  R$ 423,65  
Previsto:  R$ 514,51  
Previsto:  R$ 492,63  

Так что мне нужно изменить слово «Previsto» на другое слово, например:

Visa: R$ 9.766,53

Elo: R$ 423,65

Hipercard: R$ 514,51

Sorocred: R$ 492,63

Я сделал это .bat скрипт:

@echo off 
    setlocal enableextensions disabledelayedexpansion
    set "search=%Previsto"
    set "replace=%Visa"
    set "textFile=extract.txt"

    for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
        set "line=%i"
        setlocal enabledelayedexpansion
        >>"%textFile%" echo(!line:%search%=%replace%!
        endlocal
    )

Но все строки заменяют «Previsto» на «Visa». Я не знаю, как настроить его, чтобы изменить только первую строку на «Visa»вторая строка "Эло", три "Хиперкард" и т. д.

Как я могу это сделать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

У меня была идея, подобная SachaDee, но другой подход к созданию массива без подпрограммы

:: Q:\Test\2018\06\04\SO_50684988.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion

Rem Set replace[0..3] to cards
Set i=-1&Set "replace= Visa Elo Hipercard Sorocred"
Set "replace=%replace: ="&Set /a i+=1&Set "replace[!i!]=%"

set "search=Previsto"
set "textFile=extract.txt"
set /A "cnt=pnt=0,i+=1"

(for /f "tokens=1* delims=:" %%A in ('type "%textFile%" ') do (
  if /i "%%A" equ "%search%" call Echo=%%replace[!pnt!]%%:%%B
  if !pnt!==0 Echo=
  Set /A "cnt+=1,pnt=cnt %% i"
) ) >"New_%textFile%

type "New_%textFile%"

Пример вывода с пустой строкой после визы:

>SO_50684988.cmd
Visa:  R$ 9.766,53

Elo:  R$ 423,65
Hipercard:  R$ 514,51
Sorocred:  R$ 492,63

партия заменяет любое количество Previsto по очереди заменой.

0 голосов
/ 04 июня 2018

Попробуйте так:

@echo off
setlocal enabledelayedexpansion

set "$file=extract.txt"
set "$search=Previsto"

set $repl[1]=Visa
set $repl[2]=Elo
set $repl[3]=Hipercard
set $repl[4]=Sorocred

set $count=1

(for /f "delims=" %%a in (%$file%) do (
   call:replace "%%a" !$count!
   set/a $count+=1
   )
)>out.txt

echo done..
exit/b

:replace

set "$line=%~1"
set $repl=!$repl[%2]!
set "$line=!$line:%$search%=%$repl%!"
echo !$line!

Выходной файл: out.txt

Редактировать 2

для пустой строки после строки 1

:replace

set "$line=%~1"
set $repl=!$repl[%2]!
set "$line=!$line:%$search%=%$repl%!"
echo !$line!
if "%2"=="1" echo.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...