Sign in Join
Wiki copytemporary

Command line parameters and environment variables/es: what changed

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

Title: Command line parameters and environment variables/es

OldNewLine
1+<h1>
2+
3+Parámetros de la línea de órdenes y variables de entorno
4+
5+</h1>
6+
7+## Introducción
8+
9+   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:
10+
11+` fpc -Fudirectory -gh unidad1.pas`
12+
13+## Lo esencial de Parámetros de la línea de órdenes
14+
15+    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.
16+
17+``` pascal
18+ program Project1;
19+{$mode objfpc}{$H+}
20+ var
21+ i: Integer;
22+ begin
23+ writeln('Programa: ',ParamStr(0));
24+ for i:=1 to ParamCount do
25+ writeln('Parámetro ',i,': ',ParamStr(i));
26+ end.
27+```
28+
29+    Por ejemplo:
30+
31+ $ /tmp/proyecto1 -a
32+ Programa: /tmp/proyecto1
33+ Parámetro 1: -a
34+
35+## Parámetros de línea de órdenes cómodos
36+
37+    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.
38+
39+    Todas las aplicaciones LCL utilizan esto de forma automática. El objeto *Application* es un *TCustomApplication*.
40+
41+   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
42+
43+### Comprobando los parámetros
44+
45+    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:
46+
47+``` pascal
48+ if HasOption('h?','ayuda') then begin
49+ MuestraAyuda;
50+ Halt;
51+ end;
52+```
53+
54+    Nota: En un formulario de la LCL hay que preceder con *Application.* a *HasOption*. Por ejemplo:
55+
56+``` pascal
57+ if Application.HasOption('?','ayuda') then begin
58+ MuestraAyuda;
59+ Halt;
60+ end;
61+```
62+
63+``` pascal
64+ // Sí únicamente queremos admitir la opción corta usaremos:
65+ if HasOption('?','') then ...
66+ // Sí únicamente queremos admitir la opción larga usaremos:
67+ if HasOption('ayuda') then ...
68+```
69+
70+### Leyendo el valor del parámetro
71+
72+    Cada parámetro puede tener un valor. Por ejemplo:
73+
74+` proyecto1 -a nombrefichero`
75+
76+    o en una forma larga:
77+
78+` project1 --archivo=nombrefichero`
79+
80+``` pascal
81+ writeln('archivo = ',GetOptionValue('a','archivo'));
82+```
83+
84+    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*.
85+
86+    Nota: En un formulario de la LCL hay que preceder con *Application.* a *GetOptionValue*.
87+
88+### Comprobando la validez de los parámetros
89+
90+   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:
91+
92+   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.
93+
94+    Ejemplos:
95+
96+``` pascal
97+ ErrorMsg:=CheckOptions('?a:','ayuda archivo:');
98+```
99+
100+   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.
101+
102+---
103+*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).*
104+Category: Castellano
105+Category: Español

Back to history