Пакетный поиск и копирование строк - PullRequest
1 голос
/ 10 апреля 2011

Мне нужно удалить часть текстового файла и записать его в другой.Разданный текстовый файл также должен быть сохранен.

До:

Original.txt = "<xml><something>values</something><script>TEXT-TO-DELETE</script></xml>"

После:

Original.txt = "<xml><something>values</something><script></script></xml>"

Original_script.txt = "TEXT-TO-DELETE"

.. это многострочный файл, поэтомуРаздел сценария занимает много строк.

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

"@echo off & setlocal 
set "Data=D:\Original.txt" 
set "Bak=%Data%.bak" 
move "%Data%" "%Bak%" 
for /f "usebackq delims=" %%i in ("%Bak%") do set "LINE=%%i" & call :ProcessLine 
REM del "%Bak%" 
goto :eof 
:ProcessLine 
echo %LINE%>>"%Data%"
echo %LINE%|findstr /b "<script>">nul || goto :eof 
goto :eof"

Это должно быть для компьютеров с Windows .. (поддержка более новой ОС)

РЕДАКТИРОВАТЬ: так как я не могу отвечать в своей теме, я делаю это здесь:

Спасибо за ответ.К сожалению, я не хочу использовать условно-бесплатное программное обеспечение для этого.Я занимаюсь разбором на другом языке, мне просто нужно удалить это.

Это нелепый 3-строчный:

file={"p1.txt","p2.txt","p1.txt"}
find={"<search>","</search>,"<xml>"}
count=1
foreachline in file[count] print line to file[count]
if find[count] in line then count++

или похожий.Если бы не было 1000 способов / стилей написания сценариев, я мог бы понять это сам.Просто думал, что какая-то трещина даст ему минуту.

1 Ответ

1 голос
/ 11 апреля 2011

Я думаю, что XSLT-процессор с CLI является наиболее подходящим инструментом здесь. AltovaXML2011 - это та, которую я чаще всего использую сейчас.

Тогда сценарий может быть примерно таким, чтобы извлечь содержимое элементов script в файл Original_script, а затем обновить вашИсходный файл:

@echo off
set orig="D:\Original.txt"
set script="D:\Original_script.txt"
set backup="D:\Original_backup.txt"
set xsltprocessor="D:\AltovaXML.exe"
move %orig% %backup%
::extract scripts
%xsltprocessor% -xslt1 "D:\ExtractScripts.xslt" -in %backup% -out %script%
::update original
%xsltprocessor% -xslt1 "D:\UpdateOriginal.xslt" -in %backup% -out %orig%
::del %backup%

С таким образом ExtractScripts.xslt извлекает содержимое всех script элементов (добавление новых строк):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <xsl:apply-templates select="//script"/>
    </xsl:template>
    <xsl:template match="//script">
        <xsl:apply-templates/>
        <xsl:text>
</xsl:text>
    </xsl:template>
</xsl:stylesheet>

С UpdateOriginal.xslt выглядит такТаким образом, он просто копирует весь исходный файл, но оставляет содержимое всех элементов script (уже извлеченных отдельно):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="//script">
        <xsl:copy/>
    </xsl:template>
</xsl:stylesheet>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...