2011-04-10 68 views
1

我需要去掉文本文件的一部分并将其写入另一个文本文件。剥离的文本文件也应该保存。批量查找和复制行

前:

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

您必须对文件内容更精确。一个例子是最好的。 – Mat 2011-04-10 16:19:08

+0

您能更清楚地说明您要使用哪种编程语言或脚本语言吗?并在哪个操作系统上? – 2011-04-10 16:41:04

+0

这应该尽可能通用。我有win7 64bit。应该是dos类型的批处理脚本。 更新OP! – user700994 2011-04-10 20:08:27

回答

1

我认为带CLI的XSLT处理器是最合适的工具。 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这样看,它只是复制整个原始文件,但省去了所有内容个元素(已分别提取):

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

您可以选择保留或删除后的备份文件。

+0

嗨..感谢您的答案。 – user700994 2011-04-11 13:25:34

+0

我在o-thread中发表了评论 – user700994 2011-04-11 13:47:01