Войти

Показать полную графическую версию : [решено] Замена строк в файле, содержащем пустые строки


SharkyEXE
02-03-2015, 00:50
Всем здравствуйте.

1) есть файл 2015-03-02.txt (https://yadi.sk/i/xTVJSLnNexmBu)
2) по поводу кодировки файла 2015-03-02.txt (https://yadi.sk/i/xTVJSLnNexmBu):
2-1) запускаем программу AkelPad
2-2) в окно программы AkelPad перетаскиваем файл 2015-03-02.txt (https://yadi.sk/i/xTVJSLnNexmBu)
2-3) в строке состояния программы AkelPad пишется: Win 1200 (UTF-16LE)
2-4) в программе AkelPad, делаем Файл -> Сохранить как...
2-5) появляется окно с заголовком Сохранение
2-6) в окне с заголовком Сохранение пишется:
Кодировка: 1200 (UTF-16LE) с галочкой BOM
Вот скриншот: тынц (https://yadi.sk/i/g6t2W1Jpexm8a) (выделено красной линией)

Задача: нужно в файле 2015-03-02.txt (https://yadi.sk/i/xTVJSLnNexmBu) при помощи *.bat или *.cmd файла заменить строки Alt Line Fill=, после знака = может быть что угодно, на Alt Line Fill=0
Было

{пустая строка}
{пустая строка}
{пустая строка}
{пустая строка}
{пустая строка}
[TempFile]
{пустая строка}
DialogType=1
DockAutoload=1
Alt Line Fill=28
SaveRelative=1
Alt Line FillSaveOnExitEnable=1
SaveSessions=1
WindowAlt Line FillRect=52010000270100005C0200008A010000
ModalDialogEnable=0
SaveDataAlt Line Fill=2039
{пустая строка}
{пустая строка}
[6498]
{пустая строка}
{пустая строка}
{пустая строка}
{пустая строка}
DialogType=1
DockAutoload=1
Alt Line Fill=28
SaveRelative=1
SaveOnExitEnable=1
SaveSessions=1
WindowRect=52010000270100005C0200008A010000
ModalDialogEnable=0
Alt Line Fill=398
SaveData=2039
{пустая строка}
{пустая строка}
{пустая строка}
Стало

{пустая строка}
{пустая строка}
{пустая строка}
{пустая строка}
{пустая строка}
[TempFile]
{пустая строка}
DialogType=1
DockAutoload=1
Alt Line Fill=0
SaveRelative=1
Alt Line FillSaveOnExitEnable=1
SaveSessions=1
WindowAlt Line FillRect=52010000270100005C0200008A010000
ModalDialogEnable=0
SaveDataAlt Line Fill=2039
{пустая строка}
{пустая строка}
[6498]
{пустая строка}
{пустая строка}
{пустая строка}
{пустая строка}
DialogType=1
DockAutoload=1
Alt Line Fill=0
SaveRelative=1
SaveOnExitEnable=1
SaveSessions=1
WindowRect=52010000270100005C0200008A010000
ModalDialogEnable=0
Alt Line Fill=0
SaveData=2039
{пустая строка}
{пустая строка}
{пустая строка}

Строки, которые должны быть заменены - выделены подчеркиванием.
Строки, которые не должны быть заменены, хотя в содержимом строк имеется Alt Line Fill - выделены жирным с подчеркиванием.

После замены кодировка файла 2015-03-02.txt (https://yadi.sk/i/xTVJSLnNexmBu) должна сохраниться (см. пункт 2))

Спасибо.

Iska
02-03-2015, 02:06
Уберите:
при помощи *.bat или *.cmd файла »
и будет Вам счастье.

Georgio
02-03-2015, 04:32
@echo off& setlocal

set "file=2015-03-02.txt"
set "label=Alt Line Fill"
set "delim=="
set "substitute=0"

>1.tmp (
type "%file%"
echo.
)
for /f %%i in ('^<1.tmp find/c /v ""') do<1.tmp>2.tmp (
for /l %%j in (1 1 %%i) do (
set/p "x="
if defined x (
for /f "delims=%delim%" %%k in ('cmd/v/c echo.!x!') do (
if "%%k" equ "%label%" (
cmd/v/c echo.!label!!delim!!substitute!
) else (
cmd/v/c echo.!x!
)
)
set "x="
) else (
echo.
)
)
)
>nul chcp 1251
<nul>"%file%" (
set/p=яю
cmd/u/c type 2.tmp
)
del 1.tmp 2.tmp

endlocal& exit/b 0


Пакетный файл должен быть в кодировке Win-1251 (ANSI, кириллица)!

SharkyEXE
02-03-2015, 07:33
будет Вам счастье. »
Извините меня, пожалуйста, я Вас не понимаю.
Не хочу ни кого обидеть, извините меня, пожалуйста, локально для меня счастье - это 100%но рабочий код (http://forum.oszone.net/post-2477660-3.html) :-)

Georgio
Здравствуйте.

А нельзя, ли, пожалуйста, Ваш вариант сделать универсальным:
1) если файл 2015-03-02.txt имеет кодировку Win 1251 (ANSI - кириллица), то в Вашем коде (http://forum.oszone.net/post-2477660-3.html) комментируются одни строки, раскомментируются другие строки
2) если файл 2015-03-02.txt имеет кодировку Win 866 (OEM - русская), то в Вашем коде (http://forum.oszone.net/post-2477660-3.html) комментируются одни строки, раскомментируются другие строки

Просто лично мне очень хочется универсальности, чтобы Ваш код (http://forum.oszone.net/post-2477660-3.html) работал с любой кодировкой файла 2015-03-02.txt.
Или такая универсальность не получится?
Так сказать, чтобы для каждой кодировки файла 2015-03-02.txt не писать заново Ваш код (http://forum.oszone.net/post-2477660-3.html)

Спасибо.

Georgio
02-03-2015, 14:38
SharkyEXE, здравствуйте.





Просто лично мне очень хочется универсальности, чтобы Ваш код работал с любой кодировкой файла 2015-03-02.txt.
Или такая универсальность не получится? »




Такую, как Вы описали, универсальность сделать можно. Более того, Вам не придётся ничего "закомментировывать", поскольку пакетный файл будет сам условно определять кодировку текстового файла из перечисленных Вами. Но только не расширяйте Ваш список кодировок:).



SharkyEXE, проверяйте:


@echo off& setlocal

set "file=2015-03-02.txt"
set "label=Alt Line Fill"
set "delim=="
set "substitute=0"

>1.tmp type "%file%"
for /f %%i in ('^<1.tmp find/c /v ""') do<1.tmp>2.tmp (
for /l %%j in (1 1 %%i) do (
set/p "x="
if defined x (
for /f "delims=%delim%" %%k in ('cmd/v/c echo.!x!') do (
if "%%k" equ "%label%" (
cmd/v/c echo.!label!!delim!!substitute!
) else (
cmd/v/c echo.!x!
)
)
set "x="
) else (
echo.
)
)
)
>nul chcp 1251
>>2.tmp echo.
for /f "tokens=1,2 delims=|" %%i in ("%file%|1.tmp") do>"%file%" (
if %%~zi neq %%~zj (
<nul set/p=яю
>nul chcp 866
cmd/u/c type 2.tmp
) else (
type 2.tmp
)
)
del 1.tmp 2.tmp

endlocal& exit/b


.

SharkyEXE
02-03-2015, 15:10
Georgio
Здравствуйте.

Пожалуйста, если у Вас есть время, возможность, желание - при написания Вами этого (http://forum.oszone.net/post-2477813-5.html) кода Вы на какие кодировки для файла 2015-03-02.txt ориентировались?

Это:
1) Win 1200 (UTF-16LE)
2) Win 1251 (ANSI - кириллица)
3) Win 866 (OEM - русская)
или как?

И еще: файл *.bat или *.cmd, содержащий этот (http://forum.oszone.net/post-2477813-5.html) код, в какой должен быть кодировке?

Спасибо.

Georgio
02-03-2015, 15:42
Это:
1) Win 1200 (UTF-16LE)
2) Win 1251 (ANSI - кириллица)
3) Win 866 (OEM - русская)
или как? »


Это!



И еще: файл *.bat или *.cmd, содержащий этот код, в какой должен быть кодировке? »


Пакетный файл должен быть в кодировке Win-1251 (ANSI, кириллица)! »




© OSzone.net 2001-2012