Difference between revisions of "Command line parameters and environment variables/es"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
 
(13 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
{{Command line parameters and environment variables}}
 
{{Command line parameters and environment variables}}
 
[[category:Castellano|P]][[category:Español|P]]
 
[[category:Castellano|P]][[category:Español|P]]
 
 
<h1>Parámetros de la línea de órdenes y variables de entorno</h1>
 
<h1>Parámetros de la línea de órdenes y variables de entorno</h1>
 
== Introducción ==
 
== Introducción ==
Line 9: Line 8:
 
   fpc -Fudirectory -gh unidad1.pas
 
   fpc -Fudirectory -gh unidad1.pas
  
== La esencia de Parámetros de la línea de órdenes ==
+
== Lo esencial de Parámetros de la línea de órdenes ==
  
&nbsp;&nbsp;&nbsp; Un programa Pascal accede a los parámetros por medio de ''ParamStr'' y ''ParamCount''. ''ParamStr(0)'' contiene la ruta y nombre del programa mismo. ''ParamStr(1)'' es el primer parámetro. ''ParamCount'' es el número de parámetros.
+
&nbsp;&nbsp;&nbsp; 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.
  
<delphi> program Project1;
+
<syntaxhighlight lang=pascal>
 +
program Project1;
 
{$mode objfpc}{$H+}
 
{$mode objfpc}{$H+}
 
  var
 
  var
Line 21: 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. </delphi>
+
  end. </syntaxhighlight>
  
 
&nbsp;&nbsp;&nbsp; Por ejemplo:
 
&nbsp;&nbsp;&nbsp; Por ejemplo:
Line 32: Line 32:
 
&nbsp;&nbsp;&nbsp; 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.  
 
&nbsp;&nbsp;&nbsp; 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.  
  
&nbsp;&nbsp;&nbsp; Every LCL application uses this automatically. The Application object is a TCustomApplication.
+
&nbsp;&nbsp;&nbsp; Todas las aplicaciones LCL utilizan esto de forma automática. El objeto ''Application'' es un ''TCustomApplication''.
  
&nbsp;&nbsp;&nbsp; If you want to write a non LCL program, then create in lazarus a new project of type 'Console Application'. This will create a project1.lpr with some nice goodies, that almost all programs need.
+
&nbsp;&nbsp;&nbsp;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
Go to the DoRun method.
 
  
=== Check for a parameter ===
+
=== Comprobando los parámetros ===
  
&nbsp;&nbsp;&nbsp; With TCustomApplication you can access parameters by name. For example your program should print a help text when the user gave the common help parameter ''-h''. The ''-h'' is a short option. The long form is the ''--help''. To test whether the user called the program with ''-h'' or ''--help'' you can use
+
&nbsp;&nbsp;&nbsp; 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:
<delphi> if HasOption('h','help') then begin
+
 
   WriteHelp;
+
<syntaxhighlight lang=pascal>
 +
if HasOption('h?','ayuda') then begin
 +
   MuestraAyuda;
 
   Halt;
 
   Halt;
  end; </delphi>
+
  end; </syntaxhighlight>
  
&nbsp;&nbsp;&nbsp; Note: In an LCL form you must prepend ''Application.'' in front of HasOption. For example:
+
&nbsp;&nbsp;&nbsp; Nota: En un formulario de la LCL hay que preceder con ''Application.'' a ''HasOption''. Por ejemplo:
  
<delphi> if Application.HasOption('h','help') then begin
+
<syntaxhighlight lang=pascal>
   WriteHelp;
+
if Application.HasOption('?','ayuda') then begin
 +
   MuestraAyuda;
 
   Halt;
 
   Halt;
  end; </delphi>
+
  end; </syntaxhighlight>
 +
 
 +
<syntaxhighlight lang=pascal>
 +
// 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 ... </syntaxhighlight>
  
<delphi> // If you only want to support the short option use:
+
=== Leyendo el valor del parámetro ===
if HasOption('h','') then ...
 
// If you only want to support the long option use:
 
if HasOption('help') then ... </delphi>
 
  
=== Read the parameter value ===
+
&nbsp;&nbsp;&nbsp; Cada parámetro puede tener un valor. Por ejemplo:
  
&nbsp;&nbsp;&nbsp; Each parameter can be given a value. For example:
+
  proyecto1 -a nombrefichero
  
  project1 -f filename
+
&nbsp;&nbsp;&nbsp; o en una forma larga:
  
&nbsp;&nbsp;&nbsp; or with the long form:
+
  project1 --archivo=nombrefichero
  
   project1 --file=filename
+
<syntaxhighlight lang=pascal>   writeln('archivo = ',GetOptionValue('a','archivo')); </syntaxhighlight>
  
<delphi>  writeln('f=',GetOptionValue('f','file')); </delphi>
+
&nbsp;&nbsp;&nbsp; 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''.
  
&nbsp;&nbsp;&nbsp; Note: if you get the error message ''Option at position 1 needs an argument : f.'' then you forgot to add the option in the ''CheckOptions'' call.
+
&nbsp;&nbsp;&nbsp; Nota: En un formulario de la LCL  hay que preceder con ''Application.'' a ''GetOptionValue''.
  
=== Checking parameters for validity ===
+
=== Comprobando la validez de los parámetros ===
  
&nbsp;&nbsp;&nbsp; Command line parameters are free text, so the user can easily do typing errors. Checking the syntax of the parameters is therefore mandatory. You can use the [[doc:fcl/custapp/tcustomapplication.checkoptions.html|CheckOptions]] method for this:
+
&nbsp;&nbsp;&nbsp;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:
  
&nbsp;&nbsp;&nbsp; You can define, what parameters are allowed, which ones ones need a parameter and in case of a syntax error you can get an error message plus the options that were wrong to print helpful and detailed errors.
+
&nbsp;&nbsp;&nbsp;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.
  
&nbsp;&nbsp;&nbsp; Examples:
+
&nbsp;&nbsp;&nbsp; Ejemplos:
<delphi> ErrorMsg:=CheckOptions('hf:','help file:');</delphi>
+
<syntaxhighlight lang=pascal> ErrorMsg:=CheckOptions('?a:','ayuda archivo:');</syntaxhighlight>
  
&nbsp;&nbsp;&nbsp; This allows passing short options ''-f value'' and ''-h''. It allows passing long options ''--help'' or ''--file=filename''. It does not allow ''--help'' with a value, nor ''--file'' without a value.
+
&nbsp;&nbsp;&nbsp;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.