Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Замена строк в файле, содержащем пустые строки (http://forum.oszone.net/showthread.php?t=296256)

SharkyEXE 02-03-2015 00:50 2477640

Замена строк в файле, содержащем пустые строки
 
Всем здравствуйте.

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

Задача: нужно в файле 2015-03-02.txt при помощи *.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 должна сохраниться (см. пункт 2))

Спасибо.

Iska 02-03-2015 02:06 2477649

Уберите:
Цитата:

Цитата SharkyEXE
при помощи *.bat или *.cmd файла »

и будет Вам счастье.

Georgio 02-03-2015 04:32 2477660

Код:

@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 2477685

Цитата:

Цитата Iska
будет Вам счастье. »

Извините меня, пожалуйста, я Вас не понимаю.
Не хочу ни кого обидеть, извините меня, пожалуйста, локально для меня счастье - это 100%но рабочий код :-)

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

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

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

Спасибо.

Georgio 02-03-2015 14:38 2477813

SharkyEXE, здравствуйте.





Цитата:

Цитата 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 2477825

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

Пожалуйста, если у Вас есть время, возможность, желание - при написания Вами этого кода Вы на какие кодировки для файла 2015-03-02.txt ориентировались?

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

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

Спасибо.

Georgio 02-03-2015 15:42 2477838

Цитата:

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


Это!



Цитата:

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


Цитата:

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



Время: 14:55.

Время: 14:55.
© OSzone.net 2001-