<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Parsing</title><link>https://sourceforge.net/p/argument/wiki/Parsing/</link><description>Recent changes to Parsing</description><atom:link href="https://sourceforge.net/p/argument/wiki/Parsing/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 05 Dec 2013 03:10:09 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/argument/wiki/Parsing/feed" rel="self" type="application/rss+xml"/><item><title>Parsing modified by Chris DeGreef</title><link>https://sourceforge.net/p/argument/wiki/Parsing/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;The command-line, entered by the user of your program, needs to be parsed by Argument.  The result of parsing is that the arguments may have their values set according to the contents of the command-line.  The CommandLineParser class handles this parsing.&lt;/p&gt;
&lt;p&gt;But the command line is not the only input that Argument can handle.  It can parse input from files as well, and in three different formats in those files: Command-line, XML, and Properties file.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;CommandLineParser&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The CommandLineParser expects the format of the input to be in the &lt;code&gt;--command value&lt;/code&gt; format.  Even if the input is from a file rather than a command-line.&lt;/p&gt;
&lt;p&gt;The most used, default, simplest way to parse the command line.  To do it this way you would need to be using the &lt;span&gt;[injection of values]&lt;/span&gt; method.  That is because the Argument instance is not saved.  So it is not possible to &lt;span&gt;[obtain the values]&lt;/span&gt; for the arguments otherwise.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;CmdLine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;&amp;quot;--type boolean --key upperCase --variable asUpperCase&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This example assumes that the CommandLineParser is handling the input.  The CommandLineParser can be explicitly specified as well.  This produces the same as the previous convenience method call.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;ICmdLine&lt;/span&gt; &lt;span class="n"&gt;arguments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CmdLine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;&amp;quot;--type boolean --key upperCase --variable asUpperCase&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;CommandLineParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getCommandPrefix&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The input can also be from a file rather than the command-line.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;ICmdLine&lt;/span&gt; &lt;span class="n"&gt;arguments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CmdLine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;&amp;quot;--type boolean --key upperCase --variable asUpperCase&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;myCommandFile.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;CommandLineParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getCommandPrefix&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;XmlParser&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The input can be in an XML format.  The input can be from a File, an InputStream, or a String.  Every XML file must contain the outermost tag of &lt;code&gt;cmdline&lt;/code&gt;.  Unnamed, or positional, arguments must have the attribute of "unnamed".  Multi-value arguments are specified by repeating the tag.  Each argument is a tag.  If it is an embedded parser (group) argument then it MUST be a tag.  It also must be a tag if it is unnamed (positional).  Any other argument can be specified as an attribute or a tag.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;ICmdLine&lt;/span&gt; &lt;span class="n"&gt;arguments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CmdLine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;&amp;quot;--type boolean --key upperCase --variable asUpperCase&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;myCommandFile.xml&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;XmlParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Format of Input&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Single value, named argument&lt;/b&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;cmdline&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;value&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;      
&lt;span class="nt"&gt;&amp;lt;/cmdline&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Boolean argument&lt;/b&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;cmdline&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;myBoolean&amp;gt;&amp;lt;/myBoolean&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/cmdline&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Single value, positional (unnamed) argument&lt;/b&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;cmdline&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;noname&amp;gt;&lt;/span&gt;value&lt;span class="nt"&gt;&amp;lt;/noname&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/cmdline&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Multi-value, named argument&lt;/b&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;cmdline&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;value&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;another value&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/cmdline&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Multi-value, positional (unnamed) argument&lt;/b&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;cmdline&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;noname&amp;gt;&lt;/span&gt;value&lt;span class="nt"&gt;&amp;lt;/noname&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;noname&amp;gt;&lt;/span&gt;another value&lt;span class="nt"&gt;&amp;lt;/noname&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/cmdline&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can also specify multi-value with commas in the same tag by using the delim attribute.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;cmdline&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;noname&lt;/span&gt; &lt;span class="na"&gt;delim=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;value, another value&lt;span class="nt"&gt;&amp;lt;/noname&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/cmdline&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Single value within a named group argument&lt;/b&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;cmdline&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;aGroup&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;aName&amp;gt;&lt;/span&gt;aValue&lt;span class="nt"&gt;&amp;lt;/aName&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/aGroup&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/cmdline&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can also specify the argument as an attribute on a group (embedded parser).&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;cmdline&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;aGroup&lt;/span&gt; &lt;span class="na"&gt;aName=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;aValue&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/aGroup&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/cmdline&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;NameSpaceParser&lt;/b&gt;&lt;br /&gt;
The input can be in a Properties-like format.  The input can be from a File, an InputStream, or a String.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;ICmdLine&lt;/span&gt; &lt;span class="n"&gt;arguments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CmdLine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;&amp;quot;--type boolean --key upperCase --variable asUpperCase&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;myCommandFile.xml&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;NamespaceParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Format of Input&lt;/b&gt;&lt;br /&gt;
Each line in the file is one key=value pair.  The key is the --key of the argument.  If the argument is positional the key is empty.  If the argument is a multi-value argument then it has a bracketed number as part of the key.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Single value, named argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;name=value&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Boolean argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;myBoolean=&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Single value, positional (unnamed) argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;=value&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Multi-value, named argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;name&lt;span&gt;[0]&lt;/span&gt;=value&lt;br /&gt;
name&lt;span&gt;[1]&lt;/span&gt;=another value&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Multi-value, positional (unnamed) argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;&lt;span&gt;[0]&lt;/span&gt;=value&lt;br /&gt;
&lt;span&gt;[1]&lt;/span&gt;=another value&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Single value within a named group argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;aGroup.aName=aValue&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Single value within a positional group argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;.aName=aValue&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Multi-value within a positional multi-value group argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;&lt;span&gt;[0]&lt;/span&gt;.aName&lt;span&gt;[0]&lt;/span&gt;=aValue&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Multi-value within a named multi-value group argument&lt;/b&gt;&lt;br /&gt;
&lt;pre class="java:html:nocontrols" name="code"&gt;aGroup&lt;span&gt;[0]&lt;/span&gt;.aName&lt;span&gt;[0]&lt;/span&gt;=aValue&lt;/pre&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Chris DeGreef</dc:creator><pubDate>Thu, 05 Dec 2013 03:10:09 -0000</pubDate><guid>https://sourceforge.netf29637431ecf33360d1efbb4bd76b9257ec118a9</guid></item></channel></rss>