Sign in Join
Wiki copytemporary

Command line parameters and environment variables/es: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-<h1>
2-
31Parámetros de la línea de órdenes y variables de entorno
4-
5-</h1>
62
73## Introducción
84
95   Al arrancar un programa el usuario puede poner en la línea de órdenes parámetros y variables de entorno de la configuración. Por ejemplo, el compilador de FreePascal obtiene la mayoría de sus parámetros por medio de las opciones de la línea de orden:
106
117` fpc -Fudirectory -gh unidad1.pas`
128
139## Lo esencial de Parámetros de la línea de órdenes
1410
1511    Un programa Pascal accede a los parámetros por medio de *ParamStr* y *ParamCount*. *ParamStr(0)* contiene el nombre (y la ruta si el sistema lo permite) del programa mismo. *ParamStr(1)* es el primer parámetro. *ParamCount* es el número de parámetros.
1612
1713``` pascal
1814 program Project1;
1915{$mode objfpc}{$H+}
2016 var
2117 i: Integer;
2218 begin
2319 writeln('Programa: ',ParamStr(0));
2420 for i:=1 to ParamCount do
2521 writeln('Parámetro ',i,': ',ParamStr(i));
2622 end.
2723```
2824
2925    Por ejemplo:
3026
3127 $ /tmp/proyecto1 -a
3228 Programa: /tmp/proyecto1
3329 Parámetro 1: -a
3430
3531## Parámetros de línea de órdenes cómodos
3632
3733    Un buen programa debe dar un mensaje de ayuda cuando es invocado con los parámetros incorrectos y debe seguir una forma consistente de leer los parámetros. La unidad **custapp** que viene con FPC proporciona la clase *TCustomApplication*, que proporciona las funciones que fácilmente comprueba y lee parámetros. Por supuesto se puede tener acceso a los parámetros directamente vía ParamStr y ParamCount.
3834
3935    Todas las aplicaciones LCL utilizan esto de forma automática. El objeto *Application* es un *TCustomApplication*.
4036
4137   Si queremos escribir un programa no LCL, crearemos en Lazarus un proyecto del tipo *Aplicación de consola*. Con esto conseguiremos un proyecto con algunas utilidades que casi todos los programas necesitan. Utilizaremos el método DoRun
4238
4339### Comprobando los parámetros
4440
4541    Con *TCustomApplication* podemos acceder a los parámetros por su nombre. Por ejemplo el programa puede mostrar un texto de ayuda cuándo el usuario solicita el parámetro de ayuda *-?*, o *--ayuda* en su forma larga. Para comprobar cuándo el usuario llama al programa con *-?* or *--ayuda* utilizaremos esto:
4642
4743``` pascal
4844 if HasOption('h?','ayuda') then begin
4945 MuestraAyuda;
5046 Halt;
5147 end;
5248```
5349
5450    Nota: En un formulario de la LCL hay que preceder con *Application.* a *HasOption*. Por ejemplo:
5551
5652``` pascal
5753 if Application.HasOption('?','ayuda') then begin
5854 MuestraAyuda;
5955 Halt;
6056 end;
6157```
6258
6359``` pascal
6460 // Sí únicamente queremos admitir la opción corta usaremos:
6561 if HasOption('?','') then ...
6662 // Sí únicamente queremos admitir la opción larga usaremos:
6763 if HasOption('ayuda') then ...
6864```
6965
7066### Leyendo el valor del parámetro
7167
7268    Cada parámetro puede tener un valor. Por ejemplo:
7369
7470` proyecto1 -a nombrefichero`
7571
7672    o en una forma larga:
7773
7874` project1 --archivo=nombrefichero`
7975
8076``` pascal
8177 writeln('archivo = ',GetOptionValue('a','archivo'));
8278```
8379
8480    Nota: Si se obtiene el mensaje de error *Option at position 1 needs an argument : a.* es que hemos olvidado añadir la opción en la llamada *CheckOptions*.
8581
8682    Nota: En un formulario de la LCL hay que preceder con *Application.* a *GetOptionValue*.
8783
8884### Comprobando la validez de los parámetros
8985
9086   Los parámetros de la línea de órdenas son de texto libre, por lo que el usuario puede fácilmente cometer errores al escribirlos. Comprobar la sintaxis de los parámetros es obligatorio. Podemos utilizar el método [[doc:fcl/custapp/tcustomapplication.checkoptions.html|CheckOptions]] para ello:
9187
9288   Debemos definir que parámetros hay disponibles, cuales necesitan dar un valor, y en caso de error de sintaxis podemos obtener un mensaje que informe de forma detallada y útil las opciones que son incorrectas.
9389
9490    Ejemplos:
9591
9692``` pascal
9793 ErrorMsg:=CheckOptions('?a:','ayuda archivo:');
9894```
9995
10096   Con esto permitimos las opciones cortas *-?* y *-a valor*. Así mismo permitimos las opciones largas '--ayuda*y*--archivo=valor*. No está permitido ni*--ayuda*con un valor, ni* --archivo'' sin un valor.
10197
10298---
10399*From the Free Pascal wiki, page "Command line parameters and environment variables/es", as it stood on 2020-02-11 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
104100Category: Castellano
105101Category: Español

Back to history