What about creating a <loadfile> task with a few <filtersets>?
Loadfile places the content of a file into a property. The
<filterchain> acts on the contents of that file. I load the file
input.sql into the property ${sql.line}. But, I add three filter
chains. The first filters out all lines except the one I am looking
for. The second transforms that line by removing the beginning and
trailing ends of the line, leaving only the middle you want.  I also
had to add one more to strip out the linefeed on the end of the line.

<project name="test" default="test" basedir=".">
    <target name="test">
        <loadfile
            srcfile="input.sql"
            property="sql.line">
            <filterchain>
                <linecontainsregexp>
                    <regexp pattern="where keyp_clientid in .*--Second Wave"/>
                </linecontainsregexp>
                <tokenfilter>
                    <filetokenizer/>
                        <replaceregex pattern="^where keyp_clientid in
.*(\(.*\)).*$" replace="\1"/>
                </tokenfilter>
                <striplinebreaks/>
            </filterchain>
        </loadfile>
        <echo message="Line is &quot;${sql.line}&quot;"/>
    </target>
</project>

What's nice about this is that it depends upon no operating specific
<exec> tasks, or outside ant tasks.

On Jan 9, 2008 5:00 PM, Chun Ji <[EMAIL PROTECTED]> wrote:
>
> Hi all,
>
> I have a file: "input.sql" which contans a line as:
> "
> ...
> where keyp_clientid in (7,32,113,33) --Second Wave
> ..
> ",
>
> And I need this " (7, 32, 113, 33)" as an input string to excute a java 
> class, and that is command line I use on my linux box, and it works,
> "
> java Test `grep "^where keyp_clientid in" input.sql | awk '{print $4}'`
>
> ".
>
>
>
> Now the question is how can I use this command line in an Ant Makefile to get 
> the same results? Here is what I did in my "build.xml" and it fails:
> "
> ...
>    <target name="migration">
>       <exec executable="java" dir=".">
>             <arg line="..."/>
>           <arg line="Test `grep "^where keyp_clientid in" input.sql | awk 
> '{print $4}'` "/>
>       </exec>
>       <xslt .../>
>    </target>
> ...
> "
> The error msg is: Element type "arg" must be followed by either attribute 
> specifications, ">" or "/>"
>
>
>
> So what should I do to solve this issue ? Any comments is welcome!
>
>
>
> thanks a lot,
>
>
>
> Chun
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>



-- 
--
David Weintraub
[EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to