1 (изменено: alexii, 2012-02-10 13:49:48)

Тема: CMD/BAT: Заменить строки в текстовом файле

Доброго времени суток! Есть такая задача: существует некий текстовый документ (card.txt) со следующим содержанием (кол-во строк и содержание меняется)

1045;196,66
1046;301,60
1047;344,45
1048;212,70
1050;-31,40
1052;212,40

Требуется сначала заменить запятые на точки, потом точку с запятой на запятые. После чего проверить, если после запятой значение положительное  то вместо него поставить ноль, если отрицательное то просто убрать минус перед значением.

Реально ли такое сделать?

2

Re: CMD/BAT: Заменить строки в текстовом файле

AOS пишет:

Реально ли такое сделать?

Может можно и короче, но у меня получилось так:

del card.tmp -q
for /F "TOKENS=1,2 DELIMS=- " %%i in (card.txt) do @ECHO %%i ;metka; %%j >> card.tmp

del card.txt -q
for /F "TOKENS=1,2,3,4 DELIMS=; " %%i in (card.tmp) do call :replace  %%i %%j %%k %%l
exit /b

:replace
@ECHO %1 %2 %3 %4
if "%2"=="metka" (
    @ECHO %1,%3.%4 >> card.txt
) else (
    @ECHO %1,0 >> card.txt
)

exit /b

3

Re: CMD/BAT: Заменить строки в текстовом файле

Спасибо, вот так тоже работает, может кому пригодиться!

@Echo On
Set In=card.txt
Set InTmp=%In%.Tmp

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

Move /Y "%In%" "%InTmp%" >Nul

If %ErrorLevel% EQU 0 (
   FOR /F "usebackq tokens=1,2,3 delims=;," %%a IN ("%InTmp%") DO (
      If %%b GEQ 0 Echo %%a,0>>"%In%"
      If %%b LSS 0 Set /A bb=-%%b & Echo %%a,!bb!.%%c>>"%In%"
   )
   Del "%InTmp%" >Nul
)