Sign in Join
Wiki copytemporary

Console Mode Pascal/es: what changed

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

OldNewLine
1-## Contents
2-
3- * 1 Programación con Pascal en modo consola
4- * 1.1 Iniciando el trabajo
5- * 1.1.1 Programar en modo consola sin Lazarus
6- * 1.1.2 Programar en modo consola con Lazarus
7- * 1.1.3 Programa personalizado
8- * 1.1.4 Programa
9- * 1.1.5 Aplicación de consola
10- * 1.2 Compilar
11- * 1.3 Ejecutar
12- * 1.4 Ejecutar desde el IDE
13- * 1.4.1 Ejecutar en el IDE con redirección de la salida
14- * 1.5 Salida en Unicode (UTF8)
15- * 1.6 Ejemplos
16- * 1.6.1 Ejecutando ordenes del _shell_
17- * 1.6.2 Ejemplo: actualizar FPC y Lazarus
18- * 1.7 Parámetros de la línea de órdenes
19-
201# Programación con Pascal en modo consola
212
223por [User:Kirkpatc](</User:Kirkpatc> "User:Kirkpatc")
234
245## Iniciando el trabajo
256
267Muchos 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.
278
289### Programar en modo consola sin Lazarus
2910
3011A 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:
3112```
3213fpc ejemplo.pas
3314```
3415
3516Ademá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.
3617
3718### Programar en modo consola con Lazarus
3819
3920Lazarus 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.
4021
4122Para 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.
4223```
4324**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.
4425```
4526
4627### Programa personalizado
4728
4829Un 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.
4930
5031### Programa
5132
5233Parecido 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.
5334
5435Un ejemplo para principiantes:
5536```
5637program Proyecto1;
5738 {$mode objfpc}{$H+}
5839 uses
5940 {$IFDEF UNIX}{$IFDEF UseCThreads}
6041 cthreads,
6142 {$ENDIF}{$ENDIF}
6243 Classes
6344 { puedes añadir unidades trás esto};
6445 begin
6546 writeln('¡Hola Mundo!');
6647 readln;
6748 end.
6849```
6950
7051### Aplicación de consola
7152
7253Esta 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.
7354
7455## Compilar
7556
7657Una 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:
7758```
7859El proyecto "project1" se ha construido correctamente. :)
7960```
8061
8162## Ejecutar
8263
8364¡Pero! ¿dónde está el programa?
8465
8566Si **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).
8667
8768Si hemos guardado el proyecto, el programa se creará en el mismo directorio donde hayamos guardado el archivo _lpi_ del proyecto.
8869
8970Podemos 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).
9071
9172Ir 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.
9273
9374## Ejecutar desde el IDE
9475
9576Desde 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
9677```
9778"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".
9879```
9980
10081Si 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
10182
10283Una 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'.
10384
10485Desafortunadamente,este método no nos permite utilizar el depurador integrado.
10586
10687#### Ejecutar en el IDE con redirección de la salida
10788
10889Si 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:
10990```
11091uses
11192 baseunix;
11293
11394 var
11495 ArchivoSalida: text;
11596 Resultado : integer;
11697
11798 begin
11899 Assign(ArchivoSalida, 'ArchivoSalida.txt');
119100 if FileExists('ArchivoSalida.txt') then
120101 begin
121102 Append(ArchivoSalida);
122103 end
123104 else
124105 begin
125106 Rewrite(ArchivoSalida); { abrir archivo para escritura, destruir contenido, en su caso }
126107 end;
127108
128109 Resultado := fpdup(ArchivoSalida, output);
129110
130111 if Resultado < 0 then
131112 begin
132113 raise Exception.CreateFmt('duplicación fallida: %s', [Resultado]);
133114 end;
134115
135116 Close( ArchivoSalida );
136117```
137118
138119ArchivoSalida.txt se puede ver con 'tail -f ArchivoSalida.txt" o con un editor si 'tail' no está disponible en tu SO.
139120
140121Por 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_.
141122
142123## Salida en Unicode (UTF8)
143124
144125Si 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.
145126
146127[![Note-icon.png](/wiki-images/b/be/Note-icon.png)](</File:Note-icon.png>)
147128
148129**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](</User:BigChimp> "User:BigChimp") 17:15, 28 June 2012 (UTC)
149130
150131[![Note-icon.png](/wiki-images/b/be/Note-icon.png)](</File:Note-icon.png>)
151132
152133**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)..
153134
154135[![Note-icon.png](/wiki-images/b/be/Note-icon.png)](</File:Note-icon.png>)
155136
156137**Nota:** necesitas incluir la unidad Windows.
157138
158139
159140Ver [[LCL Unicode Support/es|Soporte Unicode en la LCL]] para más detalles sobre soporte Unicode en Lazarus y FPC.
160141
161142Programa de ejemplo:
162143```
163144program uniconsole;
164145
165146 {$mode objfpc}{$H+}
166147 {$APPTYPE CONSOLE}
167148
168149 uses
169150 {$IFDEF UNIX}
170151 {$IFDEF UseCThreads}
171152 cthreads,
172153 {$ENDIF}
173154 {Widestring manager needed for widestring support}
174155 cwstring,
175156 {$ENDIF}
176157 {$IFDEF WINDOWS}
177158 Windows, {for setconsoleoutputcp}
178159 {$ENDIF}
179160 Classes
180161 ;
181162
182163 var
183164 UTF8TestString: string;
184165
185166 begin
186167 {$IFDEF WINDOWS}
187168 SetConsoleOutputCP(CP_UTF8);
188169 {$ENDIF}
189170 UTF8TestString:= 'rosé, водка and ούζο';
190171 writeln ('plain: ' + UTF8TestString);
191172 {Apparently we don't need UTF8ToConsole for this
192173 UTF8ToConsole did not do anything for me in fact.}
193174 end.
194175```
195176
196177## Ejemplos
197178
198179Podemos 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_)
199180
200181### Ejecutando ordenes del _shell_
201182
202183Este es un ejemplo para un _programa_ o un _programa personalizado_ :
203184```
204185Program ProbarShell;
205186 uses classes, unix;
206187 var S: longint;
207188 begin
208189 S := fpsystem ('/bin/ls -la *.p*'); //lista los archivos .pp, .pas, .php, .png, etc. en el directorio actual
209190 writeln ('Programa terminado con estado: ', S)
210191 end.
211192```
212193
213194### Ejemplo: actualizar FPC y Lazarus
214195
215196Podemos ejecutar ordenes algo más complejas. Por ejemplo, si usted ha comprobado los repositorios de SVN para FPC y Lazarus (ver [construyendo FPC](<http://www.stack.nl/~marcov/buildfaq.pdf>)) 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:
216197```
217198Program LazUpdate;
218199 uses classes, unix;
219200 var S : longint;
220201 begin
221202 S := fpsystem ('cd /usr/local/src/fpc/devel/fpc ; make clean');
222203 S := fpsystem ('cd /usr/local/src/fpc/devel/lazarus ; make clean');
223204 S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
224205 S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log');
225206 end.
226207```
227208
228209Nota: la ejecución de la orden
229210```
230211fpsystem ('cd /un_direcorio')
231212```
232213
233214seguida de
234215```
235216fpsystem ('hacer algo en ese directorio')
236217```
237218
238219no 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.
239220
240221Por 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_](<http://www.stack.nl/~marcov/buildfaq.pdf>)):
241222```
242223#!/bin/sh
243224 cd /usr/local/src/fpc/devel
244225 cd fpc
245226 make clean
246227 cd ..
247228 cd lazarus
248229 make clean
249230 cd ..
250231 svn up fpc >& ~/cvscheckout.log
251232 svn up lazarus >& ~/cvslaz.log
252233```
253234
254235Lo llamaremos _actualizarlaz.sh_ , y lo llamaremos desde el programa Pascal así:
255236```
256237Program LazUpdate1;
257238 uses classes, unix;
258239 var S : longint;
259240 begin
260241 S := fpsystem ('updatelaz.sh')
261242 end.
262243```
263244
264245## Parámetros de la línea de órdenes
265246
266247Ver [[Command line parameters and environment variables/es|Parámetros de la línea de órdenes y variables de entorno]].
267248
268249* * *
269250
270251[[Executing External Programs|Ejecutando programas externos]]
271252
272253---
273254*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](/wiki-contact).*

Back to history