<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://wiki.rodrigogml.eng.br/index.php?action=history&amp;feed=atom&amp;title=CommandParser</id>
	<title>CommandParser - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rodrigogml.eng.br/index.php?action=history&amp;feed=atom&amp;title=CommandParser"/>
	<link rel="alternate" type="text/html" href="https://wiki.rodrigogml.eng.br/index.php?title=CommandParser&amp;action=history"/>
	<updated>2026-05-06T13:22:32Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://wiki.rodrigogml.eng.br/index.php?title=CommandParser&amp;diff=282&amp;oldid=prev</id>
		<title>Rodrigogml: Criou página com &#039;A classe &lt;code&gt;CommandParser&lt;/code&gt; foi desenvolvida para realizar o parser de linhas de comando complexas. Ela é capaz de interpretar e separar corretamente argumentos e parâmetros, além de lidar com aspas simples e duplas, escapando os caracteres quando necessário. Seu objetivo é fornecer uma maneira eficiente de processar entradas em formato de linha de comando, separando os componentes e permitindo a fácil recuperação de argumentos e parâmetros com ou sem va...&#039;</title>
		<link rel="alternate" type="text/html" href="https://wiki.rodrigogml.eng.br/index.php?title=CommandParser&amp;diff=282&amp;oldid=prev"/>
		<updated>2024-09-08T20:20:57Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;A classe &amp;lt;code&amp;gt;CommandParser&amp;lt;/code&amp;gt; foi desenvolvida para realizar o parser de linhas de comando complexas. Ela é capaz de interpretar e separar corretamente argumentos e parâmetros, além de lidar com aspas simples e duplas, escapando os caracteres quando necessário. Seu objetivo é fornecer uma maneira eficiente de processar entradas em formato de linha de comando, separando os componentes e permitindo a fácil recuperação de argumentos e parâmetros com ou sem va...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;A classe &amp;lt;code&amp;gt;CommandParser&amp;lt;/code&amp;gt; foi desenvolvida para realizar o parser de linhas de comando complexas. Ela é capaz de interpretar e separar corretamente argumentos e parâmetros, além de lidar com aspas simples e duplas, escapando os caracteres quando necessário. Seu objetivo é fornecer uma maneira eficiente de processar entradas em formato de linha de comando, separando os componentes e permitindo a fácil recuperação de argumentos e parâmetros com ou sem valores atribuídos.&lt;br /&gt;
&lt;br /&gt;
= Formatos de Argumentos, Parâmetros e Valores =&lt;br /&gt;
&lt;br /&gt;
== Argumentos ==&lt;br /&gt;
Os argumentos são definidos como partes da linha de comando que não são precedidas por `-` ou `--`. Eles podem ser colocados livremente na linha de comando e são capturados pela classe como uma lista simples de strings. Além disso, os argumentos podem ser delimitados por aspas (simples ou duplas), permitindo a inclusão de espaços dentro de um único argumento.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemplo de argumentos&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
arg1 arg2 &amp;quot;Um argumento extra com espaços!&amp;quot; arg3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neste exemplo, os argumentos seriam separados como:&lt;br /&gt;
&lt;br /&gt;
* `arg1`&lt;br /&gt;
* `arg2`&lt;br /&gt;
* `&amp;quot;Um argumento extra com espaços!&amp;quot;`&lt;br /&gt;
* `arg3`&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
== Parâmetros ==&lt;br /&gt;
Os parâmetros são precedidos por `-` ou `--` e podem ou não ter valores atribuídos. Caso um valor seja atribuído, ele deve ser separado do parâmetro pelo caractere `=`. Parâmetros sem valores são interpretados como `null`.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemplo de parâmetros&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
-param1 -param2=valor --param3=&amp;quot;Valor com espaços&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neste exemplo, a classe captura os seguintes parâmetros:&lt;br /&gt;
&lt;br /&gt;
* `-param1` sem valor presente&lt;br /&gt;
* `-param2` com o valor `&amp;quot;valor&amp;quot;`&lt;br /&gt;
* `--param3` com o valor `&amp;quot;Valor com espaços&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota|Parâmetros sem Valor|Quando nenhum valor é definido explicitamente para o parâmetro, o parser atribui o valor &amp;quot;true&amp;quot; (em String), como se estivesse sendo habilitado somente pela presença na linha de comando.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aspas e Caracteres Escapados ==&lt;br /&gt;
Aspas simples (`&amp;#039;`) ou duplas (`&amp;quot;`) são usadas para delimitar valores de parâmetros que contenham espaços ou outros caracteres especiais. Dentro dessas aspas, é possível usar o caractere de escape (`\`) para incluir o próprio delimitador de aspas no valor.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemplo com aspas e escape&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
--param=&amp;quot;Este é um \&amp;quot;Valor\&amp;quot; com aspas internas&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neste caso, o valor do parâmetro será: `Este é um &amp;quot;Valor&amp;quot; com aspas internas`.&lt;br /&gt;
&lt;br /&gt;
== Erros de Sintaxe ==&lt;br /&gt;
O parser lança uma exceção &amp;lt;code&amp;gt;[[RFWValidationException]]&amp;lt;/code&amp;gt; quando há um erro de estrutura na linha de comando, como aspas desbalanceadas ou parâmetros malformados.&lt;br /&gt;
&lt;br /&gt;
= Como Usar =&lt;br /&gt;
&lt;br /&gt;
A seguir, um exemplo de como utilizar a classe `CommandParser` para fazer o parser de uma linha de comando fictícia. O código abaixo demonstra como capturar e processar argumentos e parâmetros de uma linha de comando complexa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Main {&lt;br /&gt;
    public static void main(String[] args) throws RFWException {&lt;br /&gt;
        String cmd = &amp;quot;arg1 arg2 \&amp;quot;Um argumento extra com espaços!\&amp;quot; arg3 -param1 -param2=valor --param3 = \&amp;quot;Esse é um \\\&amp;quot;Valor\\\&amp;quot; do param3\&amp;quot; arg4 -param5= &amp;#039;Este é outro \\&amp;#039;tipo de valor com Scape\\&amp;#039; de aspas e outras \&amp;quot; no conteúdo interno do texto&amp;#039;&amp;quot;;&lt;br /&gt;
        CommandParser.ParsedCommand result = CommandParser.parse(cmd);&lt;br /&gt;
&lt;br /&gt;
        // Imprime os argumentos&lt;br /&gt;
        for (String arg : result.arguments) {&lt;br /&gt;
            System.out.println(&amp;quot;Arg: &amp;quot; + arg);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Imprime os parâmetros e valores&lt;br /&gt;
        for (Map.Entry&amp;lt;String, String&amp;gt; entry : result.parameters.entrySet()) {&lt;br /&gt;
            System.out.println(&amp;quot;Param: &amp;quot; + entry.getKey() + &amp;quot; / Value: &amp;quot; + entry.getValue());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Resultado esperado no console:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Arg: arg1&lt;br /&gt;
Arg: arg2&lt;br /&gt;
Arg: Um argumento extra com espaços!&lt;br /&gt;
Arg: arg3&lt;br /&gt;
Arg: arg4&lt;br /&gt;
Param: -param1 / Value: null&lt;br /&gt;
Param: -param2 / Value: valor&lt;br /&gt;
Param: --param3 / Value: Esse é um &amp;quot;Valor&amp;quot; do param3&lt;br /&gt;
Param: -param5 / Value: Este é outro &amp;#039;tipo de valor com Scape&amp;#039; de aspas e outras &amp;quot; no conteúdo interno do texto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
</feed>