Difference between revisions of "Console Mode Pascal/ru"

From Free Pascal wiki
Jump to navigationJump to search
 
(23 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
{{Console Mode Pascal}}
 
{{Console Mode Pascal}}
  
== Console-Mode Pascal Programming ==
+
== Программирование в консольном режиме Pascal ==
by [[User:Kirkpatc]]
 
  
Many of us were writing Pascal programs long before Graphic User Interfaces (GUIs) and Integrated Development Environments (IDEs) became fashionable. Many others are beginners at Pascal programming and need to be able to try out the basic tools of the language. Still others need to write console- or text-mode applications in order to perform complex system-control tasks.
+
Многие из нас писали [[Program| программы]] на [[Pascal|Паскале]] задолго до того, как вошли  в моду [[Graphical User Interface|Графический интерфейс пользователя]] (GUI) и [[IDE|Интегрированные среды разработки (IDE)]]. Многие другие являются новичками в программировании на Pascal, и им необходимо уметь опробовать основные инструменты языка. Третьим нужны [[Command-line interface|консольные]] приложения или приложения [[Text User Interface|текстового режима]] для выполнения сложных задач управления системой.
  
Lazarus provides an ideal environment for learning Pascal, and for developing text-mode programs. All the functionality of the Integrated Development Environment can be used, including the Source Editor with its syntax highlighting, access to the libraries, complex searching and code completion tools, and syntax checking. If you don't want a Form with its visual components, you don't need one, but the Lazarus Source Editor is still a great environment for program development. You can compile and run your program during development, without ever leaving the Editor.
+
=== Программирование в консольном режиме без Lazarus ===
 +
Хотя многие предпочитают использовать [[Lazarus IDE]] для написания программ в режиме консоли, вы также можете написать их с помощью любого текстового редактора и скомпилировать их самостоятельно, вызвав [[Compiler|компилятор]] [[FPC]], например так для программы в example.pas:
 +
<syntaxhighlight lang="bash">
 +
fpc example.pas
 +
</syntaxhighlight>
  
To start a console-mode program, go to the Main Menu and select Project -> New Project and then select either '''Program'', '''Console Application''' or '''Custom Program'''. The IDE will not generate all the extra files associated with a full graphic application, and will not open an Object Inspector box, but will open the Source Editor with a skeleton program structure and await your programming input.
+
Также доступен текстовый режим IDE ''fp'' (немного похожий на старый [[Turbo Pascal]]).В следующих разделах мы сосредоточимся на программировании с помощью [[Lazarus]].
  
=== Custom Program ===
+
=== Программирование в консольном режиме с помощью Lazarus ===
 +
Lazarus предоставляет идеальную среду для изучения Паскаля и разработки программ в текстовом режиме. Можно использовать все функции интегрированной среды разработки, включая редактор исходного кода с ее [[Syntax highlighting| подсветкой синтаксиса]], доступом к библиотекам, сложными инструментамиы поиска и завершения кода, а также проверкой синтаксиса. Если вам не нужна [[TForm |Form]] с ее визуальными компонентами, можно и без нее, но редактор исходного кода Lazarus по-прежнему остается отличной средой для разработки программ. Вы можете компилировать и запускать свою программу во время разработки, не выходя из редактора.
  
A very minimalistic pascal program. Choose this if you want to do everything yourself or just do some quick tests and delete the files soon.
+
Чтобы запустить программу в режиме консоли, перейдите в главное меню и выберите Project -> New Project(Проект - новый проект), а затем выберите '''Program'''(Программа) или '''Console Application'''(Консольное приложение). Среда IDE не будет генерировать все дополнительные файлы, связанные с полным графическим приложением, и не откроет окно инспектора объектов, но откроет редактор исходного кода со структурой скелетной программы и будет ожидать ввода вашего программирования.
  
=== Program ===
+
{{Note| В Windows приложение с графическим интерфейсом пользователя не имеет консоли и, следовательно, не может выполнить '''writeln''' или '''readln'''. Вы получите ошибку ''File not open''(Файл не открыт). Снимите галочку в разделе ''Project Options / Compiler Options / Linking / Target specific options / Win32 GUI application''(Параметры проекта / Параметры компилятора / Связывание / Частные параметры цели / Приложение Win32 GUI), чтобы создать консольное приложение. Начиная с Lazarus IDE 1.4 она находится в разделе ''Project(menu) / Project Options / Compiler Options / Config and Target / Target specific options / Win32 GUI application''(Проект (меню) / Параметры проекта / Параметры компилятора / Настройка и целевая платформа / Частные параметры цели / Приложение Win32 GUI).}}
  
Same as Custom Program, but the IDE helps you a bit more. For example when you add another unit the IDE will automatically add the unitname to the program uses section. This behavior is defined in the project options. So you can go between 'Program' and 'Custom Program' at any time.
+
{{Note|Lazarus имеет некоторые функции для программ командной строки, такие как [[CopyFile |copyfile]]. Чтобы использовать их, добавьте требование к проекту для LazUtils (Project / Project Inspector / Required Packages --> "Add" --> New Requirement --> choose "LazUtils" --> OK), которое не будет задействовать весь LCL. Затем добавьте соответствующий модуль в раздел uses.}}
  
An example for complete beginners:
+
==== Тип проекта: Console Application (Консольное приложение) ====
<pre>
+
 
 +
Выбор этого типа проекта в Lazarus создает программу с новым классом, производным от TCustomApplication. TCustomApplication предоставляет много всяких штучек и упрощает программирование утилит командной строки. Например, проверка параметров командной строки, написание справки, проверка [[Command_line_parameters_and_environment_variables#Environment_variables| переменных окружения]] и обработка [[Exceptions| исключений]]. Все программы [[LCL]] используют это автоматически.
 +
 
 +
==== Тип проекта: Program (Программа) ====
 +
 
 +
В качестве демо мы напишем очень минималистичную программу на Паскале. В среде IDE выберите тип проекта Program(Программа), и пусть среда IDE вам немного поможет. Например, когда вы добавляете еще один [[Unit |модуль]], IDE автоматически добавит имя модуля в раздел программы [[Uses| uses]]. Это поведение определяется в параметрах проекта. Таким образом, вы можете переключаться между 'Program'(Программой) и 'Custom Program'(Пользовательской программой) в любое время.
 +
 
 +
Пример для начинающих:
 +
<syntaxhighlight  lang="Pascal">
 
program Project1;
 
program Project1;
 
{$mode objfpc}{$H+}
 
{$mode objfpc}{$H+}
Line 26: Line 38:
 
   cthreads,
 
   cthreads,
 
   {$ENDIF}{$ENDIF}
 
   {$ENDIF}{$ENDIF}
   Classes
+
   Classes;
  { you can add units after this };
 
 
begin
 
begin
   writeln('Hello World!');
+
   WriteLn('Hello World!');
   readln;
+
   ReadLn;
end.
+
end.</syntaxhighlight>
</pre>
+
 
 +
=== Pascal scripts ===
 +
Кроме того, можно писать сценарии, которые динамически компилируются с помощью [[InstantFPC]], кроссплатформенного решения для запуска (небольших) программ Pascal в виде сценариев. Шебанг <pre>#!/usr/bin/env instantfpc</pre> позволяет запускать скрипт как отдельную программу.
 +
 
 +
{{Note|Хотя он используется для запуска сценариев Pascal, InstantFPC использует обычный Object Pascal, а не язык сценариев PascalScript. Таким образом, "'''PascalScript'''" и '''Pascal script''' - это не одно и то же.}}
 +
 
 +
== Запуск программы ==
 +
==== Компиляция ====
 +
 
 +
Когда вы закончите свою программу (или фрагмент программы), вы можете скомпилировать и запустить ее, выбрав Run -> Build(Выполнить -> Сборка)(или Quick Compile(Быстрая компиляция)) в главном меню или щелкнув значок зеленого треугольника («Выполнить») [[Image: Start.png]] на панели кнопок. Любые сообщения компилятора (предупреждения, отчеты о ходе выполнения или сообщения об ошибках) появятся в окне сообщения, и, надеюсь, в конечном итоге будет сообщение, которое скажет
 +
 
 +
'Project "Project1" successfully built. (Проект "Project1" успешно собран.) :).
 +
 
 +
А где программа-то ?? !!
 +
 
 +
Если вы еще не сохранили программу, то среда IDE поместит ее во «временный» каталог (например, /tmp в Linux, C:\temp в Windows, см. Environment Options / Files / Directory (Параметры среды / Файлы / Каталог) для собранных тестовых проектов).
 +
 
 +
Если вы уже сохранили проект, значит, программа была создана в том же каталоге, где вы сохранили файл project1.lpi.
 +
 
 +
==== Запуск в консоли ====
 +
Вы можете запустить программу, перейдя в окно консоли (терминала), затем с помощью '''cd''' перейдя в каталог и введя имя программы. В Unix/Linux, если она находится в текущем каталоге, вам придется начать с <code>./</code>, поскольку программа, вероятно, не будет найдена в PATH.
 +
 
 +
Пример для Linux/Unix, где программа хранится в /tmp:
 +
<syntaxhighlight lang="bash">
 +
cd /tmp
 +
./Project1
 +
</syntaxhighlight>
 +
Однако может быть очень неудобно продолжать переходить из редактора Lazarus в окно терминала и обратно. К счастью, есть механизм, позволяющий открывать окно терминала из среды Lazarus.
  
=== Console Application ===
+
==== Запуск в IDE ====
 +
Во внутренней консоли: показывается в окне вывода терминала.
  
This creates a program with a new class derived from TCustomApplication. TCustomApplication provides a lot of the common things and makes programming command line utilities easy. For example checking command line options, writing help, checking environment variables and exception handling. All LCL programs use this automatically.
+
При перенаправлении вывода.
  
== Compile ==
+
В главном меню выберите Run -> Run Parameters(Выполнить -> Параметры запуска), затем установите флажок "Use launching application"(Использовать запускаемое приложение). В первый раз, когда вы сделаете это и попробуете последовательность Compile / Run (Собрать / Запустить), вы, вероятно, получите отлуп:
  
When you have finished your program (or program fragment) you can compile and run it by selecting Run -> Run from the Main Menu or clicking on the Green (Run) triangle symbol in the Button Bar. Any compiler messages (warnings, progress reports or error messages) will appear in the Message Box, and hopefully there will eventually be a message to say
+
'xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied'.
  
'Project "Project1" successfully built.:)'.
+
Если это произошло, вам необходимо изменить права доступа к соответствующему файлу (например, с помощью chmod +x <имя файла> или с помощью утилиты Windows для изменения разрешений); возможно, вам придется сделать это как root. После этого каждый раз, когда вы будете запускать свою программу, будет появляться окно консоли, в котором будут отображаться все ваши текстовые операции ввода-вывода (readln, Writeln и т. Д.).
  
== Run ==
+
После того, как ваша программа завершит выполнение, на экране появится сообщение «Нажмите Enter». Таким образом, любой вывод, сгенерированный вашей программой, останется на экране до тех пор, пока вы не прочтете его; после того, как вы нажмете «Enter», окно консоли закроется.
  
But where is the program??!!
+
К сожалению, этот метод не позволяет использовать встроенный отладчик.
  
If you have ''not'' yet saved the program, then the IDE put it into the ''temporary'' directory (e.g. /tmp under linux, C:\temp under windows, see Environment Options / Files / Directory for building test projects).
+
==== Запуск в IDE с перенаправлением вывода ====
  
If you already saved the project, then the program was created in the same directory, where you saved the project1.lpi file.
+
Если вы хотите увидеть, что написано в stdout, и также хотите использовать встроенный отладчик, stdout можно перенаправить в файл следующим кодом:
 +
<syntaxhighlight  lang="Pascal">
 +
uses
 +
  baseunix;
  
You can execute the program by going to a console (terminal) window, use '''cd''' to change to the directory and typing the name of the program (in Unix/Linux, if it is in the current directory you will probably have to type
+
var
 +
  OutputFile: text;
  
./Project1
+
begin   
 +
  Assign(OutputFile, 'Output.txt');
 +
  if FileExists(Filename) then begin
 +
    Append(OutputFile);
 +
  end
 +
  else begin
 +
    Rewrite(OutputFile);  { открываем файл для записи, уничтожая содержимое, если таковое имеется }
 +
  end;
  
as it won't be found in the standard PATH). However, it can be very inconvenient to keep skipping out of the Lazarus Editor and into a terminal window and back again. Fortunately, there is a mechanism that allows a terminal window to be opened from within the Lazarus environment.
+
  ResultCode := fpdup(OutputFile, output);
  
== Run in IDE ==
+
  if ResultCode < 0 then begin
 +
    raise Exception.CreateFmt('Обман не удался: %s', [ResultCode]);
 +
  end;
 +
  Close(OutputFile);
 +
end.</syntaxhighlight>
 +
Затем файл output.txt можно просмотреть с помощью команды 'tail -f output.txt' или просмотреть с помощью редактора, если 'tail' недоступен в вашей [[Operating System|ОС]].
  
From the Main Menu, select Run -> Run Parameters, then check the box for "Use launching application". The first time you do this and try the Compile/Run sequence, you will probably get a rude message to say
+
В качестве альтернативы, используя Lazarus 0.9.31 или выше (только в Linux): в меню "View"(Вид) в разделе "Debug Windows"(Отладка Windows) есть запись для "console output"(консольный вывод) для просмотра стандартного вывода.
  
"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".
+
== Unicode (UTF8) вывод ==
 +
Если вы хотите, чтобы ваша программа в режиме консоли отображала вывод Unicode ([[UTF-8|UTF8]]) в Windows Vista и более поздних версиях (а также, возможно, в более ранних версиях), вы можете использовать команду '''SetConsoleOutputCP''' для задания консоли набор символов UTF8.
  
If this happens, you need to change the permissions on the appropriate file (for example using chmod +x filename, or using the Windows utility for changing permissions); you might have to do this as root. After this, each time you launch your program, a console box will appear and all your text i/o (readln, writeln etc) will appear in it.
+
{{Note | вам нужно будет убедиться, что шрифт консоли может отображать буквы, которые вы хотите вывести (например, греческий, кириллица, корейский).}}
   
 
After your program has finished execution, a message "Press enter" appears on the screen. Thus any output your program generated will remain on the screen until you have had a chance to read it; after you press 'enter' the console window closes.
 
  
== Examples ==
+
{{Note | вам нужно будет включить модуль Windows.}}
  
You can use the Lazarus editor to try out all the examples in the standard Pascal text-books, or you can write your own. Some of the most useful procedures are those for executing system commands or for running other programs (which may have been written in Pascal, C or Perl, or may be shell or Batch scripts).
+
См. [[Unicode_Support_in_Lazarus/ru|Поддержка Unicode LCL]] для получения более подробной информации о поддержке Unicode в Lazarus и FPC.
  
=== Execute shell command ===
+
Пример программы:
 +
<syntaxhighlight  lang="Pascal">
 +
program uniconsole;
  
Приведен пример для ''Custom Program'' или ''Program'':
+
{$mode objfpc}{$H+}
 +
{$APPTYPE CONSOLE}
 +
 
 +
uses
 +
  {$IFDEF UNIX}
 +
    {$IFDEF UseCThreads}
 +
    cthreads,
 +
    {$ENDIF}
 +
  {Диспетчер широких строк, необходимый для поддержки широких строк}
 +
  cwstring,
 +
  {$ENDIF}
 +
  {$IFDEF WINDOWS}
 +
  Windows, {для setconsoleoutputcp}
 +
  {$ENDIF}
 +
  Classes
 +
  ;
 +
 
 +
var
 +
UTF8TestString: string;
  
<pre>
 
Program TryShell;
 
uses classes, unix;
 
var S: longint;
 
 
begin
 
begin
  S := fpsystem ('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
+
{$IFDEF WINDOWS}
  writeln ('Program exited with status : ', S)
+
SetConsoleOutputCP(CP_UTF8);
 +
{$ENDIF}
 +
UTF8TestString:= 'rosé, водка and ούζο';
 +
writeln ('plain: ' + UTF8TestString);
 +
{Видимо для этого нам не нужен UTF8ToConsole
 +
Фактически, UTF8ToConsole для меня ничего не сделал.}
 
end.
 
end.
</pre>
+
</syntaxhighlight>
  
=== Example: update fpc and lazarus ===
+
== Примеры ==
  
Rather more complex commands can be executed. For example, if you have already checked out the SVN repositories for FPC and Lazarus (see [[buildfaq]]) you could keep your FPC and Lazarus source files up-to-date by retrieval from the SVN repository with the following sequence of calls:
+
Вы можете использовать редактор Lazarus, чтобы опробовать все примеры из стандартных учебников Паскаля, или можете написать свой собственный. Некоторые из наиболее полезных процедур - это процедуры для выполнения системных команд или для запуска других программ (написанных на Паскале, C или Perl, либо в сценариях оболочки или пакетных сценариях).
  
<pre>
+
=== Выполнение команд оболочки ===
Program LazUpdate;
+
<syntaxhighlight lang="Pascal">
uses classes, unix;
+
program TryShell;
var s : longint;
+
uses
 +
  Classes, Unix;
 +
var
 +
  S: LongInt;
 +
begin
 +
  S := fpsystem('/bin/ls -la *.p*'); //отображает .pp, .pas, .php, .png и т.д. в текущем каталоге
 +
  WriteLn('Program exited with status : ', S)
 +
end.</syntaxhighlight>
 +
 
 +
 
 +
==== Пример: обновить FPC и Lazarus ====
 +
 
 +
Могут быть выполнены более сложные команды. Например, если вы уже проверили репозитории SVN для FPC и Lazarus (см. [[Buildfaq]]), вы можете поддерживать свои исходные файлы FPC и Lazarus в актуальном состоянии, извлекая их из репозитория SVN с помощью следующей последовательности вызовов :
 +
 
 +
 
 +
=== Пример: корректировка fpc и lazarus ===
 +
 
 +
Могут выполняться более сложные команды. Например, после посещения хранилища SVN с новейшими версиями FPC и Lazarus (см. [[buildfaq]]) можно иметь исходные версии FPC и Lazarus новейшими, путем взятия из хранилища SVN следующей последовательностью вызовов:
 +
 
 +
<syntaxhighlight lang="Pascal">
 +
program LazUpdate;
 +
uses
 +
  Classes, Unix;
 +
var  
 +
  S: LongInt;
 
begin  
 
begin  
   S := fpsystem ('cd /usr/local/src/fpc/devel/fpc ; make clean');
+
   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/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 fpc       >& ~/cvscheckout.log');
   S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log');
+
   S := fpsystem('cd /usr/local/src/fpc/devel             ; svn update lazarus >& ~/cvslaz.log'       );
end.
+
end.</syntaxhighlight>
</pre>
 
  
Note that issuing the command
+
Обратите внимание, что выдача команды
  
fpsystem ('cd /somedirectory')
+
<syntaxhighlight lang="Pascal">fpsystem('cd /somedirectory');</syntaxhighlight>
followed by
+
с последующим
fpsystem ('do something in that subdirectory')
+
<syntaxhighlight lang="Pascal">fpsystem ('сделать что-нибудь в этом подкаталоге');</syntaxhighlight>
doesn't work, because after each fpsystem function call the execution of the program returns to the directory it started in; so we need to include multiple statements per line within our calls to shell.
+
не работает, потому что после каждого вызова [[Function | функции]] '''fpsystem()''' выполнение программы возвращается в каталог, в котором она была запущена; поэтому нам нужно включить несколько операторов в каждую строку в наши вызовы оболочки через '''fpsystem()'''. [Скорее так: он всегда начинается.]
  
Of course, you don't have to enter every command as a separate line of Pascal; you could create a script file like this (from [[buildfaq]]):
+
Необязательно вводить каждую команду как отдельную строку Паскаля; можно создать файл сценария '''bash''' следующим образом (из [[buildfaq]]):
<pre>
+
<syntaxhighlight lang="bash">
 
#!/bin/sh
 
#!/bin/sh
 
cd /usr/local/src/fpc/devel
 
cd /usr/local/src/fpc/devel
Line 121: Line 219:
 
svn up fpc >& ~/cvscheckout.log
 
svn up fpc >& ~/cvscheckout.log
 
svn up lazarus >& ~/cvslaz.log  
 
svn up lazarus >& ~/cvslaz.log  
</pre>
+
</syntaxhighlight>
  
Name it updatelaz.sh, and then call it from a Pascal program thus:
+
Назовите файл '''updatelaz.sh''', а затем вызовите его из программы на Паскале для его непосредственного выполнения вместо использования '''bash''' следующим образом:
 +
<syntaxhighlight lang="Pascal">
 +
(* Это может быть скомпилировано или использовано как скрипт Паскаля. *)
 +
program LazUpdate1;
 +
uses
 +
  Classes, Unix;
 +
var
 +
  S: LongInt;
 +
begin
 +
  S := fpsystem('updatelaz.sh')
 +
end.</syntaxhighlight>
  
<pre>
+
== Примечание для пользователей Windows ==
Program LazUpdate1;
+
Традиционно при написании консольных программ в Windows используется кодировка cp866. Если не принять специальных мер, то при написании консольной программы в IDE в консоли вместо русских букв будут выводиться кракозябры. Чтобы получился нормальный русский текст, в окне кода программы нужно нажать правую кнопку мыши и выбрать в контекстном меню "Параметры файла -> Кодировка -> CP866".
uses classes, unix;
 
var S : longint;
 
begin
 
  S := fpsystem ('updatelaz.sh')
 
end.
 
</pre>
 
  
== Параметры командной строки ==
+
==См.также==
  
См. [[Command line parameters and environment variables]].
+
* [[Command line parameters and environment variables|Параметры командной строки и переменные среды]]
 +
* [[Executing_External_Programs/ru|Выполнение внешних программ]]
 +
* [[Debugger_Console_App| Отладка консольных приложений]]
 +
* [[InstantFPC]]

Latest revision as of 00:06, 22 June 2021

Deutsch (de) English (en) español (es) suomi (fi) magyar (hu) 日本語 (ja) русский (ru) slovenčina (sk)

Программирование в консольном режиме Pascal

Многие из нас писали программы на Паскале задолго до того, как вошли в моду Графический интерфейс пользователя (GUI) и Интегрированные среды разработки (IDE). Многие другие являются новичками в программировании на Pascal, и им необходимо уметь опробовать основные инструменты языка. Третьим нужны консольные приложения или приложения текстового режима для выполнения сложных задач управления системой.

Программирование в консольном режиме без Lazarus

Хотя многие предпочитают использовать Lazarus IDE для написания программ в режиме консоли, вы также можете написать их с помощью любого текстового редактора и скомпилировать их самостоятельно, вызвав компилятор FPC, например так для программы в example.pas:

fpc example.pas

Также доступен текстовый режим IDE fp (немного похожий на старый Turbo Pascal).В следующих разделах мы сосредоточимся на программировании с помощью Lazarus.

Программирование в консольном режиме с помощью Lazarus

Lazarus предоставляет идеальную среду для изучения Паскаля и разработки программ в текстовом режиме. Можно использовать все функции интегрированной среды разработки, включая редактор исходного кода с ее подсветкой синтаксиса, доступом к библиотекам, сложными инструментамиы поиска и завершения кода, а также проверкой синтаксиса. Если вам не нужна Form с ее визуальными компонентами, можно и без нее, но редактор исходного кода Lazarus по-прежнему остается отличной средой для разработки программ. Вы можете компилировать и запускать свою программу во время разработки, не выходя из редактора.

Чтобы запустить программу в режиме консоли, перейдите в главное меню и выберите Project -> New Project(Проект - новый проект), а затем выберите Program(Программа) или Console Application(Консольное приложение). Среда IDE не будет генерировать все дополнительные файлы, связанные с полным графическим приложением, и не откроет окно инспектора объектов, но откроет редактор исходного кода со структурой скелетной программы и будет ожидать ввода вашего программирования.

Note-icon.png

Примечание: В Windows приложение с графическим интерфейсом пользователя не имеет консоли и, следовательно, не может выполнить writeln или readln. Вы получите ошибку File not open(Файл не открыт). Снимите галочку в разделе Project Options / Compiler Options / Linking / Target specific options / Win32 GUI application(Параметры проекта / Параметры компилятора / Связывание / Частные параметры цели / Приложение Win32 GUI), чтобы создать консольное приложение. Начиная с Lazarus IDE 1.4 она находится в разделе Project(menu) / Project Options / Compiler Options / Config and Target / Target specific options / Win32 GUI application(Проект (меню) / Параметры проекта / Параметры компилятора / Настройка и целевая платформа / Частные параметры цели / Приложение Win32 GUI).

Note-icon.png

Примечание: Lazarus имеет некоторые функции для программ командной строки, такие как copyfile. Чтобы использовать их, добавьте требование к проекту для LazUtils (Project / Project Inspector / Required Packages --> "Add" --> New Requirement --> choose "LazUtils" --> OK), которое не будет задействовать весь LCL. Затем добавьте соответствующий модуль в раздел uses.

Тип проекта: Console Application (Консольное приложение)

Выбор этого типа проекта в Lazarus создает программу с новым классом, производным от TCustomApplication. TCustomApplication предоставляет много всяких штучек и упрощает программирование утилит командной строки. Например, проверка параметров командной строки, написание справки, проверка переменных окружения и обработка исключений. Все программы LCL используют это автоматически.

Тип проекта: Program (Программа)

В качестве демо мы напишем очень минималистичную программу на Паскале. В среде IDE выберите тип проекта Program(Программа), и пусть среда IDE вам немного поможет. Например, когда вы добавляете еще один модуль, IDE автоматически добавит имя модуля в раздел программы uses. Это поведение определяется в параметрах проекта. Таким образом, вы можете переключаться между 'Program'(Программой) и 'Custom Program'(Пользовательской программой) в любое время.

Пример для начинающих:

program Project1;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes;
begin
  WriteLn('Hello World!');
  ReadLn;
end.

Pascal scripts

Кроме того, можно писать сценарии, которые динамически компилируются с помощью InstantFPC, кроссплатформенного решения для запуска (небольших) программ Pascal в виде сценариев. Шебанг

#!/usr/bin/env instantfpc

позволяет запускать скрипт как отдельную программу.

Note-icon.png

Примечание: Хотя он используется для запуска сценариев Pascal, InstantFPC использует обычный Object Pascal, а не язык сценариев PascalScript. Таким образом, "PascalScript" и Pascal script - это не одно и то же.

Запуск программы

Компиляция

Когда вы закончите свою программу (или фрагмент программы), вы можете скомпилировать и запустить ее, выбрав Run -> Build(Выполнить -> Сборка)(или Quick Compile(Быстрая компиляция)) в главном меню или щелкнув значок зеленого треугольника («Выполнить») Start.png на панели кнопок. Любые сообщения компилятора (предупреждения, отчеты о ходе выполнения или сообщения об ошибках) появятся в окне сообщения, и, надеюсь, в конечном итоге будет сообщение, которое скажет

'Project "Project1" successfully built. (Проект "Project1" успешно собран.) :).

А где программа-то ?? !!

Если вы еще не сохранили программу, то среда IDE поместит ее во «временный» каталог (например, /tmp в Linux, C:\temp в Windows, см. Environment Options / Files / Directory (Параметры среды / Файлы / Каталог) для собранных тестовых проектов).

Если вы уже сохранили проект, значит, программа была создана в том же каталоге, где вы сохранили файл project1.lpi.

Запуск в консоли

Вы можете запустить программу, перейдя в окно консоли (терминала), затем с помощью cd перейдя в каталог и введя имя программы. В Unix/Linux, если она находится в текущем каталоге, вам придется начать с ./, поскольку программа, вероятно, не будет найдена в PATH.

Пример для Linux/Unix, где программа хранится в /tmp:

cd /tmp 
./Project1

Однако может быть очень неудобно продолжать переходить из редактора Lazarus в окно терминала и обратно. К счастью, есть механизм, позволяющий открывать окно терминала из среды Lazarus.

Запуск в IDE

Во внутренней консоли: показывается в окне вывода терминала.

При перенаправлении вывода.

В главном меню выберите Run -> Run Parameters(Выполнить -> Параметры запуска), затем установите флажок "Use launching application"(Использовать запускаемое приложение). В первый раз, когда вы сделаете это и попробуете последовательность Compile / Run (Собрать / Запустить), вы, вероятно, получите отлуп:

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

Если это произошло, вам необходимо изменить права доступа к соответствующему файлу (например, с помощью chmod +x <имя файла> или с помощью утилиты Windows для изменения разрешений); возможно, вам придется сделать это как root. После этого каждый раз, когда вы будете запускать свою программу, будет появляться окно консоли, в котором будут отображаться все ваши текстовые операции ввода-вывода (readln, Writeln и т. Д.).

После того, как ваша программа завершит выполнение, на экране появится сообщение «Нажмите Enter». Таким образом, любой вывод, сгенерированный вашей программой, останется на экране до тех пор, пока вы не прочтете его; после того, как вы нажмете «Enter», окно консоли закроется.

К сожалению, этот метод не позволяет использовать встроенный отладчик.

Запуск в IDE с перенаправлением вывода

Если вы хотите увидеть, что написано в stdout, и также хотите использовать встроенный отладчик, stdout можно перенаправить в файл следующим кодом:

uses
  baseunix; 

var
  OutputFile: text;

begin     
  Assign(OutputFile, 'Output.txt');
  if FileExists(Filename) then begin
    Append(OutputFile);
  end
  else begin
    Rewrite(OutputFile);   { открываем файл для записи, уничтожая содержимое, если таковое имеется }
  end;

  ResultCode := fpdup(OutputFile, output);

  if ResultCode < 0 then begin
    raise Exception.CreateFmt('Обман не удался: %s', [ResultCode]);
  end;
  Close(OutputFile);
end.

Затем файл output.txt можно просмотреть с помощью команды 'tail -f output.txt' или просмотреть с помощью редактора, если 'tail' недоступен в вашей ОС.

В качестве альтернативы, используя Lazarus 0.9.31 или выше (только в Linux): в меню "View"(Вид) в разделе "Debug Windows"(Отладка Windows) есть запись для "console output"(консольный вывод) для просмотра стандартного вывода.

Unicode (UTF8) вывод

Если вы хотите, чтобы ваша программа в режиме консоли отображала вывод Unicode (UTF8) в Windows Vista и более поздних версиях (а также, возможно, в более ранних версиях), вы можете использовать команду SetConsoleOutputCP для задания консоли набор символов UTF8.

Note-icon.png

Примечание: вам нужно будет убедиться, что шрифт консоли может отображать буквы, которые вы хотите вывести (например, греческий, кириллица, корейский).

Note-icon.png

Примечание: вам нужно будет включить модуль Windows.

См. Поддержка Unicode LCL для получения более подробной информации о поддержке Unicode в Lazarus и FPC.

Пример программы:

program uniconsole;

{$mode objfpc}{$H+}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
    {$IFDEF UseCThreads}
    cthreads,
    {$ENDIF}
  {Диспетчер широких строк, необходимый для поддержки широких строк}
  cwstring,
  {$ENDIF}
  {$IFDEF WINDOWS}
  Windows, {для setconsoleoutputcp}
  {$ENDIF}
  Classes
  ;

var
UTF8TestString: string;

begin
{$IFDEF WINDOWS}
SetConsoleOutputCP(CP_UTF8);
{$ENDIF}
UTF8TestString:= 'rosé, водка and ούζο';
writeln ('plain: ' + UTF8TestString);
{Видимо для этого нам не нужен UTF8ToConsole
Фактически, UTF8ToConsole для меня ничего не сделал.}
end.

Примеры

Вы можете использовать редактор Lazarus, чтобы опробовать все примеры из стандартных учебников Паскаля, или можете написать свой собственный. Некоторые из наиболее полезных процедур - это процедуры для выполнения системных команд или для запуска других программ (написанных на Паскале, C или Perl, либо в сценариях оболочки или пакетных сценариях).

Выполнение команд оболочки

program TryShell;
uses 
  Classes, Unix;
var 
  S: LongInt;
begin
  S := fpsystem('/bin/ls -la *.p*'); //отображает .pp, .pas, .php, .png и т.д. в текущем каталоге
  WriteLn('Program exited with status : ', S)
end.


Пример: обновить FPC и Lazarus

Могут быть выполнены более сложные команды. Например, если вы уже проверили репозитории SVN для FPC и Lazarus (см. Buildfaq), вы можете поддерживать свои исходные файлы FPC и Lazarus в актуальном состоянии, извлекая их из репозитория SVN с помощью следующей последовательности вызовов :


Пример: корректировка fpc и lazarus

Могут выполняться более сложные команды. Например, после посещения хранилища SVN с новейшими версиями FPC и Lazarus (см. buildfaq) можно иметь исходные версии FPC и Lazarus новейшими, путем взятия из хранилища SVN следующей последовательностью вызовов:

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.

Обратите внимание, что выдача команды

fpsystem('cd /somedirectory');

с последующим

fpsystem ('сделать что-нибудь в этом подкаталоге');

не работает, потому что после каждого вызова функции fpsystem() выполнение программы возвращается в каталог, в котором она была запущена; поэтому нам нужно включить несколько операторов в каждую строку в наши вызовы оболочки через fpsystem(). [Скорее так: он всегда начинается.]

Необязательно вводить каждую команду как отдельную строку Паскаля; можно создать файл сценария bash следующим образом (из buildfaq):

#!/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

Назовите файл updatelaz.sh, а затем вызовите его из программы на Паскале для его непосредственного выполнения вместо использования bash следующим образом:

(* Это может быть скомпилировано или использовано как скрипт Паскаля. *)
program LazUpdate1;
uses 
  Classes, Unix;
var 
  S: LongInt; 
begin
  S := fpsystem('updatelaz.sh')
end.

Примечание для пользователей Windows

Традиционно при написании консольных программ в Windows используется кодировка cp866. Если не принять специальных мер, то при написании консольной программы в IDE в консоли вместо русских букв будут выводиться кракозябры. Чтобы получился нормальный русский текст, в окне кода программы нужно нажать правую кнопку мыши и выбрать в контекстном меню "Параметры файла -> Кодировка -> CP866".

См.также