Компьютерный форум 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=277348)

Itexz@twitter 08-02-2014 03:26 2305270

Замена динамической строки по номеру
 
Всем привет!
Есть у меня файл, в нем есть строка под номером 57, а в ней <td>60</td>, причем цифра там может быть какой угодно.
Надо получить вместо именно 57ой строки просто <td></td>. При этом не затрагивая предыдущие и следующие строки в которых тоже есть <td></td>
Пытался убрать эту строку через findstr, да как-то не получается...
Если это поможет, то в 56ой строке есть уникальный текст <td>totalTime:</td>

Очень нуждаюсь в помощи, спасибо!

Iska 08-02-2014 05:22 2305282

Цитата:

Цитата Itexz@twitter
CMD/BAT - Замена динамической строки по номеру »

WSH/PoSH+DOM.

Georgio 08-02-2014 06:20 2305288

Почти как здесь: http://forum.oszone.net/post-2304237-44.html.

Код:

@echo off
 for /f %%i in ('find /c /v ""^<"YOUR.TXT"') do set n=%%i
(
 for /l %%i in (1 1 %n%) do (
  set string=
  set /p string=
  if %%i==57 (
    set /p="<td></td>"<nul
    echo.
) else (
  if defined string (
    call set /p="%%string%%"<nul
    if %%i==%n% (
    goto:eof
    )
  )
  echo.
  )
 )
)<"YOUR.TXT">"YOUR_NEW.TXT"


Itexz@twitter 08-02-2014 12:37 2305399

Georgio, к сожалению то что вы написали удаляло много лишнего из файла.

В итоге нашел решение через
Код:

sed.exe "56,57 d" results.html 1>results_wo_time.html
Sed.exe взял отсюда
Скачал там Binaries и Dependencies. В итоге для работы sed.exe понадобилось 4 файла
libiconv2.dll, libintl3.dll, regex2.dll, sed.exe

Georgio 08-02-2014 16:16 2305503

Цитата:

Цитата Itexz@twitter
<...> удаляло много лишнего из файла .»

Что же такое может удаляться при применении данного кода, если это самый безопасный вариант для пакетных файлов?

Проблема может существовать, насколько я знаю, только со следующими сочетаниями символов:
1) знаки равенства "=" и их сочетание с пробелами в начале строки
2) непарная двойная кавычка """, находящаяся слева от угловых скобок "<" и ">", амперсанда "&" и вертикальной черты "|" (интересно, что если в коде написать
Код:

set /p string=""
или
Код:

set /p "string="
, то всё будет в точности наоборот: "мешать" будет непарная кавычка, находящаяся справа от перечисленных символов)
3) пробелы, составляющие строку.

Первое и второе довольно редко встречается в HTML- и XML-файлах (хотя с таковыми сталкивался), третье практически несущественно. Все такие "плохие" строки в выходном файле обычно эаменяются на пустую строку, т. е. действительно удаляются.

Т. о., выход пока один: для обрабоки с помощью пакетного файла использовать "правильные" документы.

Iska 08-02-2014 16:27 2305506

Цитата:

Цитата Georgio
Что же такое может удаляться при применении данного кода, если это самый безопасный вариант для пакетных файлов? »

Georgio, перенаправление ввода/вывода!?

Я потому и предпочитаю использовать WSH в виде VBScript+DOM, потому как там в принципе отсутствует такое понятие, как «escape-последовательность», присущее строкам в пакетных файлах, на JScript и в PowerShell. И заранее не знаешь, где и в каком месте это тебе аукнется при обработке произвольного файла.

Georgio 08-02-2014 18:10 2305559

Цитата:

Цитата Iska
Я потому и предпочитаю использовать WSH в виде VBScript+DOM, потому как там в принципе отсутствует такое понятие, как «escape-последовательность», присущее строкам в пакетных файлах, на JScript и в PowerShell. И заранее не знаешь, где и в каком месте это тебе аукнется при обработке произвольного файла. »



Согласен абсолютно, но возможность корректной трансляции содержимого одного текстового файла в другой с помощью пакетных файлов меня интересует именно с теоретической стороны. Что ж, "борьба продолжается"!


Время: 13:06.

Время: 13:06.
© OSzone.net 2001-