martes, 8 de octubre de 2013

Receta C# No. 1-5: Cómo Acceder a los Argumetos de Línea de Comandos

Tabla de Contenido

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código C#
5. Conclusiones
6. Glosario
7. Referencias

0. Introducción

Es típico de las aplicaciones que carecen de interfaz gráfica de usuario exponer su funcionalidad por medio de comandos que son ejecutados desde la línea de comandos (símbolo de sistema o shell). Estos comandos requerirán (a excepción de casos específicos) de datos de entrada para operar. Esta receta se centra en la elaboración de una aplicación de línea de comandos para demostrar cómo pueden ser leídos desde código fuente C#.

1. Problema

Se necesita leer y acceder a los argumentos pasados desde la línea de comandos a una aplicación que se ejecute en ese ambiente de sólo texto.

2. Solución

De las 4 versiones sobrecargadas del método Main, existen dos que permiten capturar datos o especificar argumentos desde la línea de comandos, a saber:
  • public static void Main(string[] args)
  • public static int Main(string[] args)
También vale anotar que la biblioteca de clases .NET provee la clase System.Environment que también permite realizar la tarea de acceso a argumentos por medio de dos miembros propios.

3. Discusión de la Solución

Hay dos firmas que permiten capturar los argumentos desde la línea de comandos; además, de la clase Environment (namespace System). En los ejemplos que se presentan en el punto 4 se demuestra en la implementación con los dos enfoques recién mencionados.

La firma de Main:

public static void Main(string[] args)

Recibe como argumento un arreglo de objetos stringstring[] args. Cada objeto en el arreglo corresponde con cada uno de los argumentos pasados desde la línea de comandos. Por ejemplo:


Calculadora.exe corresponde con el nombre del programa, 5 y 3 son los argumentos.

Archivo C# Calculadora.cs [enlace alternativo]:
► Prueba de ejecución.

[Nota: Ideone posibilita la sección para ingresar los argumentos. Ver Figura 1]
Input de IDEONE
Figura 1. Input para argumentos en Ideone [1].

La clase System.Environment

Alternativamente podemos recurrir a la clase System.Environment la cual nos provee dos miembros para manipular argumentos en lugar de Main:
  • public static string CommandLine { get; } [2]
  • public static string[] GetCommandLineArgs() [3]

4. Práctica: Código C#

Voy a crear dos ejemplos para demostrar el uso de la línea de comandos para capturar los argumentos de una aplicación de sólo texto.

Archivo C# Familia.cs [enlace alternativo]:
El método Main de esta clase se encarga de mostrar en pantalla los nombres de los miembros de una familia como argumentos:



Cuando compilemos y ejecutemos la aplicación desde la línea de comandos en pantalla se mostrará:
Demostración de uso argumentos desde la línea de comandos.
Figura 2. Uso de la línea de comandos para pasar argumentos.

En la Figura 2 se muestra resaltado en amarillo la salida de la ejecución de la aplicación Familia.exe.

¿Qué pasa ahora si queremos pasar el primer nombre y apellido de dos de los miembros de la familia? Muy sencillo, encerramos entre comillas dobles el nombre y el apellido. Así:



En ejecución:
Demostración de uso argumentos desde la línea de comandos.
Figura 3. Pasando argumentos como cadenas de caracteres.

Usando los miembros CommandLine y GetCommandLineArgs de la clase Environment

Ahora les presento el segundo ejemplo, pero esta vez utilizando los miembros CommandLine y GetCommandLineArgs de la clase Environment [4].

El ejemplo consiste en la clase Suma que se encarga de sumar todos los números (double) pasados como argumentos:

Archivo C# Suma.cs [enlace alternativo]:
Obsérvese que estamos utilizando esta firma de Main:

public static void Main()

Es evidente que no es necesario especificar el parámetro de arreglo de cadena de caracteres gracias al uso de los miembros arriba mencionados.

Prueba de ejecución en la Figura 4.
Uso del método GetCommandLineArgs.
Figura 4. Demostración de al ejecución de la aplicación Suma.

6. Conclusiones

Ha quedado demostrado que el uso de los argumentos desde la línea es un conocimiento y práctica que como programadores debemos poseer cuando nos enfrentemos a proyectos que requieran o demandan la creación de utilidades que se ejecuten desde una terminal de comandos. La razón de este artículo consistió en demostrar las técnicas básicas de manipulación de argumentos desde la línea de comandos: usando los argumentos de cadenas de caracteres del método Main y los dos miembros de la clase Environment: CommandLine y GetCommandLineArgs.

7. Glosario

  • Línea de comandos
  • Shell

8. Referencias

[1]: Ideone.com - Online Compiler and IDE >> C/C++, Java, PHP, Python, Perl and 40+ other compilers and interpreters - http://ideone.com/
[2]: Environment.CommandLine Property (System) - http://msdn.microsoft.com/en-us/library/system.environment.commandline.aspx
[3]: Environment.GetCommandLineArgs Method (System) - http://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs.aspx
[4]: Environment Class (System) - http://msdn.microsoft.com/en-us/library/system.environment.aspx
[5]: C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
[6]: Shell (computing) - Wikipedia, the free encyclopedia - http://en.wikipedia.org/wiki/Shell_(computing)
[7]: Visual C# 2010 Recibes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.