Sign in Join
Wiki copytemporary

Console Mode Pascal/es

Deutsch · English · Español · Magyar · Slovenčina · Suomi · Русский · 日本語

Contents

Programación con Pascal en modo consola

por User:Kirkpatc

Iniciando el trabajo

Muchos de nosotros escribíamos programas en Pascal mucho antes de que los interfaces gráficos de usuario (GUIs) y los entornos de desarrollo integrados (IDEs) se pusieran de moda. Muchos otros son principiantes en programación en Pascal y necesitan poder probar las herramientas básicas del lenguaje. Otros necesitan escribir aplicaciones de consola o en modo de texto para realizar tareas complejas de control del sistema.

Programar en modo consola sin Lazarus

A pesar de que muchos prefieren usar el IDE de Lazarus para escribir programas en modo consola, también podemos escribirlos con cualquier editor de texto y compilarlos llamando nosotros al compilador FPC, por ejemplo para el programa ejemplo.pas:

pascal
fpc ejemplo.pas

Además disponemos del IDE en modo de texto' 'fp (que se parece bastante al viejo IDE de Turbo Pascal). En las secciones siguientes nos centraremos en la programación con Lazarus.

Programar en modo consola con Lazarus

Lazarus dispone de un entorno ideal para aprender Pascal, y para desarrollar programas en modo texto. Todas las funcionalidades del IDE se pueden utilizar, incluyendo el editor de código con su resaltado de sintaxis, acceso a las librerías, búsquedas complejas y herramientas de completado de código y comprobación de sintaxis. Si no se quiere un formulario con componentes visuales no es necesario tenerlo, pero el editor de Lazarus es un gran entorno para desarrollar programas. Puedes compilar y ejecutar programas durante el desarrollo, sin abandonar el Editor.

Para dar inicio a un programa en modo consola, hay que ir al Menú principal y en la opción Proyecto seleccionar Nuevo Proyecto ... y en la ventana que aparece seleccionar Programa , Aplicación de consola o Programa personalizado. El IDE no generará todos los ficheros que están asociados con una aplicación gráfica completa, tampoco abrirá la ventana del Inspector de objetos y sí abrirá el Editor de código con el esqueleto del programa, a a la espera de que introduzcamos nuestro código.

pascal
**Nota** : En windows una aplicaci??n g??afica no dispone de consola y por tanto no podemos utilizar **writeln** ni **readln** , ya que obtendremos el error _File not open_. Desmarca en _Proyecto / Opciones de Proyecto... / Opciones del Compilador / Enlazado / Opciones espec??ficas del SO objetivo /Aplicaci??n gr??fica Win32 (-WG)_ para crear una aplicaci??n de consola.

Programa personalizado

Un programa Pascal muy sencillo. Seleccionaremos esta opción si queremos hacerlo todo nosotros o para realizar algunas pruebas rápidas y eliminar los ficheros a continuación.

Programa

Parecido al anterior, pero el IDE nos ayudará más. Por ejemplo cuándo añadimos un unidad el IDE automáticamente añade el nombre de la unidad en la sección uses. Este comportamiento está definido en las opciones de proyecto. Así podemos alternar entre los tipos Programa y Programa personalizado en cualquier momento.

Un ejemplo para principiantes:

pascal
program Proyecto1;
     {$mode objfpc}{$H+}
     uses
       {$IFDEF UNIX}{$IFDEF UseCThreads}
       cthreads,
       {$ENDIF}{$ENDIF}
       Classes
       { puedes añadir unidades trás esto};
     begin
       writeln('¡Hola Mundo!');
       readln;
     end.

Aplicación de consola

Esta opción creará un programa con una nueva clase derivada de TCustomApplication, la cual proporciona gran parte de la funcionalidad común y convierte la programación en línea de comando en algo muy fácil. Por ejemplo comprobando los parámetros pasados en la línea de comando, escribiendo ayudas, comprobando las variables de entorno y gestionado las excepciones. Todos los programas de la LCL utilizan esta funcionalidad automáticamente.

Compilar

Una vez finalizado el programa (o una parte del mismo) lo podemos compilar y ejecutar con la opción Ejecutar > Ejecutar del menú principal, pulsando sobre el triangulo verde del panel de botones o con la tecla F9. Todos los mensajes de compilación ( avisos, informes de progreso o errores) aparecerán en la ventana de Mensajes, y con suerte eventualmente veremos un único mensaje que diga:

pascal
El proyecto "project1" se ha construido correctamente.??:)

Ejecutar

¡Pero! ¿dónde está el programa?

Si no hemos guardado el proyecto, el IDE lo pone el el directorio temporal del sistema (/tmp en linux, C:\temp en windows, ver Entorno > Opciones del Entorno > Directorio para construir proyectos de prueba).

Si hemos guardado el proyecto, el programa se creará en el mismo directorio donde hayamos guardado el archivo lpi del proyecto.

Podemos ejecutar el programa desde una consola (terminal), utilizando un cd para cambiar al directorio deseado y escribir el nombre del programa. En *nix probablemente tengamos que escribir ./Nombredelprograma , ya que no se encuentra en la ruta por defecto (PATH).

Ir de la consola al IDE y viceversa puede ser un poco tedioso. Por suerte hay una forma de abrir la ventana del terminal directamente desde el IDE de Lazarus.

Ejecutar desde el IDE

Desde el menú principal seleccionar Ejecutar > Parámetros de ejecución ..., y en el cuadro de diálogo, marcar "Usar al lanzar la aplicación". La primera vez que se lanza un programa, con la secuencia compilar/ejecutar, es probable que obtengamos este mensaje

pascal
"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".

Si sucede esto, necesitaremos cambiar los permisos en el archivo apropiado (por ejemplo usando chmod +x nombredelejecutable, o usar la utilidad de Windows para cambiar los permisos); es probable que tengamos que hacer esta operación como administrador. Tras esto cada vez que lancemos nuestro programa aparecerá una ventana de consola y toda la entrada/salida de programa se mostrará en ella

Una vez terminada la ejecución de nuestro programa, aparecerá un mensaje de "Press enter" en la consola. Así toda la salida generada por el programa permanecerá en la pantalla para tener la posibilidad de leerla; la ventana de la consola se cerrará tras pulsar 'enter'.

Desafortunadamente,este método no nos permite utilizar el depurador integrado.

Ejecutar en el IDE con redirección de la salida

Si quieres ver lo que se escribe en la salida estándar y deseas utilizar el depurador integrado, stdout se puede redirigir a un archivo con el siguiente código:

pascal
uses
     baseunix; 
    
     var
     ArchivoSalida: text;
     Resultado : integer;
    
     begin 
      Assign(ArchivoSalida, 'ArchivoSalida.txt');
      if FileExists('ArchivoSalida.txt') then
       begin
        Append(ArchivoSalida);
       end
      else
       begin
        Rewrite(ArchivoSalida); { abrir archivo para escritura, destruir contenido, en su caso }
       end;
    
     Resultado := fpdup(ArchivoSalida, output);
    
     if Resultado < 0 then
      begin
       raise Exception.CreateFmt('duplicación fallida: %s', [Resultado]);
      end;
     
     Close( ArchivoSalida );

ArchivoSalida.txt se puede ver con 'tail -f ArchivoSalida.txt" o con un editor si 'tail' no está disponible en tu SO.

Por otra parte, utilizando Lazarus 0.9.31 o superior (sólo en Linux): En el menú "Ver", en "Debug Windows" hay una entrada para "Salida de la consola" para ver la salida stdout.

Salida en Unicode (UTF8)

Si quieres que tu programa en modo consola muestre la salida en Unicode (UTF-8) en Windows Vista y superior (y tal vez en las versiones anteriores), puedes utilizar el comando SetConsoleOutputCP para activar en la consola el juego de caracteres UTF-8.

Note-icon.png

Nota: Trás la ejcución del programa, la consola se comporta extrañamente en mi sistema: la introducción de comandos y la escritura no muestran resultados: ningún comando ejecutado, ningún error, nada. ¿Tal vez la consola necesita ser cambiada de nuevo? Lo he intentado también, pero parecía dar el mismo resultado. --BigChimp 17:15, 28 June 2012 (UTC)

Note-icon.png

Nota: tendrás que asegurarte de que la fuente de la consola puede mostrar las letras que desea en la salida (por ejemplo, griego, cirílico, coreano)..

Note-icon.png

Nota: necesitas incluir la unidad Windows.

Ver Soporte Unicode en la LCL para más detalles sobre soporte Unicode en Lazarus y FPC.

Programa de ejemplo:

pascal
program uniconsole;
    
     {$mode objfpc}{$H+}
     {$APPTYPE CONSOLE}
    
     uses
       {$IFDEF UNIX}
         {$IFDEF UseCThreads}
         cthreads,
         {$ENDIF}
       {Widestring manager needed for widestring support}
       cwstring,
       {$ENDIF}
       {$IFDEF WINDOWS}
       Windows, {for setconsoleoutputcp}
       {$ENDIF}
       Classes
       ;
    
     var
     UTF8TestString: string;
    
     begin
     {$IFDEF WINDOWS}
     SetConsoleOutputCP(CP_UTF8);
     {$ENDIF}
     UTF8TestString:= 'rosé, водка and ούζο';
     writeln ('plain: ' + UTF8TestString);
     {Apparently we don't need UTF8ToConsole for this
     UTF8ToConsole did not do anything for me in fact.}
     end.

Ejemplos

Podemos utilizar Lazarus para probar todos los ejemplos que encontremos en libros de Pascal estándar, o podemos escribirlos de nuestra cosecha. Muchos de los procedimientos más útiles son aquellos que nos permiten ejecutar ordenes del sistema o lanzar la ejecución de otros programas, que pueden estar escritos en Pascal, C o Perl , o incluso pueden ser shell o rutinas de proceso por lotes (batch scripts)

Ejecutando ordenes del shell

Este es un ejemplo para un programa o un programa personalizado :

pascal
Program ProbarShell;
     uses classes, unix;
     var S: longint;
     begin
       S := fpsystem ('/bin/ls -la *.p*'); //lista los archivos .pp, .pas, .php, .png,  etc. en el directorio actual
       writeln ('Programa terminado con estado:  ', S)
     end.

Ejemplo: actualizar FPC y Lazarus

Podemos ejecutar ordenes algo más complejas. Por ejemplo, si usted ha comprobado los repositorios de SVN para FPC y Lazarus (ver construyendo FPC) podemos mantener los archivos fuente de FPC y de Lazarus actualizados mediante la recuperación desde el repositorio de SVN con la siguiente secuencia de ordenes:

pascal
Program LazUpdate;
     uses classes, unix;
     var S : longint;
     begin 
       S := fpsystem ('cd /usr/local/src/fpc/devel/fpc ; make clean');
       S := fpsystem ('cd /usr/local/src/fpc/devel/lazarus ; make clean');
       S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
       S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log');
     end.

Nota: la ejecución de la orden

pascal
fpsystem ('cd /un_direcorio')

seguida de

pascal
fpsystem ('hacer algo en ese directorio')

no funcionará según queremos, ya que tras la llamada a la función fpsystem el programa sigue en el directorio en que se encontraba previamente a la misma; será necesario incluir múltiples órdenes en cada línea de llamada al sistema.

Por supuesto, no hay que poner cada orden como una línea separada, podemos crear un archivo de proceso por loets como este (de fpc buildfaq):

pascal
#!/bin/sh
     cd /usr/local/src/fpc/devel
     cd fpc
     make clean
     cd ..
     cd lazarus
     make clean
     cd ..
     svn up fpc >& ~/cvscheckout.log
     svn up lazarus >& ~/cvslaz.log

Lo llamaremos actualizarlaz.sh , y lo llamaremos desde el programa Pascal así:

pascal
Program LazUpdate1;
     uses classes, unix;
     var S : longint; 
     begin
       S := fpsystem ('updatelaz.sh')
     end.

Parámetros de la línea de órdenes

Ver Parámetros de la línea de órdenes y variables de entorno.


Ejecutando programas externos


From the Free Pascal wiki, page "Console Mode Pascal/es", as the Internet Archive kept it on 2025-02-19, last changed on 2020-02-12. 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.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.