Sign in Join
Wiki copytemporary

Command line parameters and environment variables/es: what changed

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

OldNewLine
11Parámetros de la línea de órdenes y variables de entorno
22
33## Introducción
44
55   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:
66
7-` fpc -Fudirectory -gh unidad1.pas`
7+```text
8+ fpc -Fudirectory -gh unidad1.pas
9+```
810
911## Lo esencial de Parámetros de la línea de órdenes
1012
1113    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.
1214
1315``` pascal
1416 program Project1;
1517{$mode objfpc}{$H+}
1618 var
1719 i: Integer;
1820 begin
1921 writeln('Programa: ',ParamStr(0));
2022 for i:=1 to ParamCount do
2123 writeln('Parámetro ',i,': ',ParamStr(i));
2224 end.
2325```
2426
2527    Por ejemplo:
2628
2729 $ /tmp/proyecto1 -a
2830 Programa: /tmp/proyecto1
2931 Parámetro 1: -a
3032
3133## Parámetros de línea de órdenes cómodos
3234
3335    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.
3436
3537    Todas las aplicaciones LCL utilizan esto de forma automática. El objeto *Application* es un *TCustomApplication*.
3638
3739   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
3840
3941### Comprobando los parámetros
4042
4143    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:
4244
4345``` pascal
4446 if HasOption('h?','ayuda') then begin
4547 MuestraAyuda;
4648 Halt;
4749 end;
4850```
4951
5052    Nota: En un formulario de la LCL hay que preceder con *Application.* a *HasOption*. Por ejemplo:
5153
5254``` pascal
5355 if Application.HasOption('?','ayuda') then begin
5456 MuestraAyuda;
5557 Halt;
5658 end;
5759```
5860
5961``` pascal
6062 // Sí únicamente queremos admitir la opción corta usaremos:
6163 if HasOption('?','') then ...
6264 // Sí únicamente queremos admitir la opción larga usaremos:
6365 if HasOption('ayuda') then ...
6466```
6567
6668### Leyendo el valor del parámetro
6769
6870    Cada parámetro puede tener un valor. Por ejemplo:
6971
70-` proyecto1 -a nombrefichero`
72+```text
73+ proyecto1 -a nombrefichero
74+```
7175
7276    o en una forma larga:
7377
74-` project1 --archivo=nombrefichero`
78+```text
79+ project1 --archivo=nombrefichero
80+```
7581
7682``` pascal
7783 writeln('archivo = ',GetOptionValue('a','archivo'));
7884```
7985
8086    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*.
8187
8288    Nota: En un formulario de la LCL hay que preceder con *Application.* a *GetOptionValue*.
8389
8490### Comprobando la validez de los parámetros
8591
8692   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:
8793
8894   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.
8995
9096    Ejemplos:
9197
9298``` pascal
9399 ErrorMsg:=CheckOptions('?a:','ayuda archivo:');
94100```
95101
96102   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.
97103
98104---
99105*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).*
100106Category: Castellano
101107Category: Español

Back to history