Difference between revisions of "Command line parameters and environment variables/es"
m (Fixed syntax highlighting) |
|||
(4 intermediate revisions by 3 users not shown) | |||
Line 10: | Line 10: | ||
== Lo esencial de Parámetros de la línea de órdenes == | == Lo esencial de Parámetros de la línea de órdenes == | ||
− | Un programa Pascal accede a los parámetros por medio de ''ParamStr'' y ''ParamCount''. ''ParamStr(0)'' contiene la ruta | + | 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. |
− | < | + | <syntaxhighlight lang=pascal> |
+ | program Project1; | ||
{$mode objfpc}{$H+} | {$mode objfpc}{$H+} | ||
var | var | ||
Line 20: | Line 21: | ||
for i:=1 to ParamCount do | for i:=1 to ParamCount do | ||
writeln('Parámetro ',i,': ',ParamStr(i)); | writeln('Parámetro ',i,': ',ParamStr(i)); | ||
− | end. </ | + | end. </syntaxhighlight> |
Por ejemplo: | Por ejemplo: | ||
Line 39: | Line 40: | ||
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: | 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: | ||
− | < | + | <syntaxhighlight lang=pascal> |
+ | if HasOption('h?','ayuda') then begin | ||
MuestraAyuda; | MuestraAyuda; | ||
Halt; | Halt; | ||
− | end; </ | + | end; </syntaxhighlight> |
Nota: En un formulario de la LCL hay que preceder con ''Application.'' a ''HasOption''. Por ejemplo: | Nota: En un formulario de la LCL hay que preceder con ''Application.'' a ''HasOption''. Por ejemplo: | ||
− | < | + | <syntaxhighlight lang=pascal> |
+ | if Application.HasOption('?','ayuda') then begin | ||
MuestraAyuda; | MuestraAyuda; | ||
Halt; | Halt; | ||
− | end; </ | + | end; </syntaxhighlight> |
− | < | + | <syntaxhighlight lang=pascal> |
+ | // Sí únicamente queremos admitir la opción corta usaremos: | ||
if HasOption('?','') then ... | if HasOption('?','') then ... | ||
// Sí únicamente queremos admitir la opción larga usaremos: | // Sí únicamente queremos admitir la opción larga usaremos: | ||
− | if HasOption('ayuda') then ... </ | + | if HasOption('ayuda') then ... </syntaxhighlight> |
=== Leyendo el valor del parámetro === | === Leyendo el valor del parámetro === | ||
Line 66: | Line 70: | ||
project1 --archivo=nombrefichero | project1 --archivo=nombrefichero | ||
− | < | + | <syntaxhighlight lang=pascal> writeln('archivo = ',GetOptionValue('a','archivo')); </syntaxhighlight> |
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''. | 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''. | ||
+ | |||
+ | Nota: En un formulario de la LCL hay que preceder con ''Application.'' a ''GetOptionValue''. | ||
=== Comprobando la validez de los parámetros === | === Comprobando la validez de los parámetros === | ||
Line 77: | Line 83: | ||
Ejemplos: | Ejemplos: | ||
− | < | + | <syntaxhighlight lang=pascal> ErrorMsg:=CheckOptions('?a:','ayuda archivo:');</syntaxhighlight> |
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. | 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. | ||
− | |||
− |
Latest revision as of 07:05, 11 February 2020
│
English (en) │
español (es) │
suomi (fi) │
français (fr) │
русский (ru) │
Parámetros de la línea de órdenes y variables de entorno
Introducción
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:
fpc -Fudirectory -gh unidad1.pas
Lo esencial de Parámetros de la línea de órdenes
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.
program Project1;
{$mode objfpc}{$H+}
var
i: Integer;
begin
writeln('Programa: ',ParamStr(0));
for i:=1 to ParamCount do
writeln('Parámetro ',i,': ',ParamStr(i));
end.
Por ejemplo:
$ /tmp/proyecto1 -a Programa: /tmp/proyecto1 Parámetro 1: -a
Parámetros de línea de órdenes cómodos
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.
Todas las aplicaciones LCL utilizan esto de forma automática. El objeto Application es un TCustomApplication.
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
Comprobando los parámetros
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:
if HasOption('h?','ayuda') then begin
MuestraAyuda;
Halt;
end;
Nota: En un formulario de la LCL hay que preceder con Application. a HasOption. Por ejemplo:
if Application.HasOption('?','ayuda') then begin
MuestraAyuda;
Halt;
end;
// Sí únicamente queremos admitir la opción corta usaremos:
if HasOption('?','') then ...
// Sí únicamente queremos admitir la opción larga usaremos:
if HasOption('ayuda') then ...
Leyendo el valor del parámetro
Cada parámetro puede tener un valor. Por ejemplo:
proyecto1 -a nombrefichero
o en una forma larga:
project1 --archivo=nombrefichero
writeln('archivo = ',GetOptionValue('a','archivo'));
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.
Nota: En un formulario de la LCL hay que preceder con Application. a GetOptionValue.
Comprobando la validez de los parámetros
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 CheckOptions para ello:
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.
Ejemplos:
ErrorMsg:=CheckOptions('?a:','ayuda archivo:');
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.