Войти

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


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

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

Iska
08-02-2014, 05:22
CMD/BAT - Замена динамической строки по номеру »
WSH/PoSH+DOM.

Georgio
08-02-2014, 06:20
Почти как здесь: 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
Georgio, к сожалению то что вы написали удаляло много лишнего из файла.

В итоге нашел решение через sed.exe "56,57 d" results.html 1>results_wo_time.html

Sed.exe взял отсюда (http://gnuwin32.sourceforge.net/packages/sed.htm)
Скачал там Binaries и Dependencies. В итоге для работы sed.exe понадобилось 4 файла
libiconv2.dll, libintl3.dll, regex2.dll, sed.exe

Georgio
08-02-2014, 16:16
<...> удаляло много лишнего из файла .»

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

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

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

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

Iska
08-02-2014, 16:27
Что же такое может удаляться при применении данного кода, если это самый безопасный вариант для пакетных файлов? »
Georgio, перенаправление ввода/вывода!?

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

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

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




© OSzone.net 2001-2012