如何通过Ant获取文件中的每个子字符串

时间:2013-05-09 13:28:59

标签: ant

我有一个文件包含由“|”,

分隔的以下字符串行
C:\Temp\demo\AAA.dat   |    C:\test\input\AAA.dat
C:\Temp\build\BBB.bat  |    C:\test\java\BBB.bat
C:\Temp\test\CCC.xml   |    C:\Apps\ftp\CCC.xml

在我读完每一行之后,我希望提取用“|”分隔的每个字符串, 即,在我获得第一线后, 我需要同时获得C:\ Temp \ demo \ AAA.dat和C:\ test \ input \ AAA.dat; 请帮助如何使用ant来做到这一点???

我使用以下代码,我只能得到每一行:

<loadfile property="filelist" srcfile="C:\Temp\file1.txt"/>
<target name="test" depends="chkInput" description="test">

    <for param = "line" list="${filelist}" delimiter="${line.separator}"> 
       <sequential> 
            <echo>@{line}</echo> 
       </sequential> 
    </for> 
</target>

不是每个子串用“|”分隔,请帮助如何将每个子串用“|”分隔?

1 个答案:

答案 0 :(得分:0)

获得该行后,您可以使用<propertyregex>分隔这两行。

<for param = "line" list="${filelist}" delimiter="${line.separator}"> 
   <sequential> 
        <echo>@{line}</echo>
        <var name="first.part" unset="true"/>
        <var name="second.part" unset="true"/>
        <propertyregex
            property="first.part"
            input="@{line}"
            regex="^([^\s]*)"
            select="\1"/>
        <propertyregex
            property="second.part"
            input="@{line}"
            regex="\|\s*([^\s]*).*$"
            select="\1"/>
   </sequential> 
</for>

请注意,您必须使用<var/>任务取消设置属性(或者,您不是要更改属性,或者是新任务以声明该属性是本地的<sequential/>实体。