Difference between revisions of "Console Mode Pascal/ru"

From Lazarus wiki
Jump to navigationJump to search
(One intermediate revision by the same user not shown)
Line 1: Line 1:
 
{{Console Mode Pascal}}
 
{{Console Mode Pascal}}
  
== Программирование консольного режима в Pascal ==
+
== Программирование в консольном режиме Pascal ==
by [[User:Kirkpatc]]
 
  
Многие программы написаны на Pascal задолго до появления графических интерфейсов пользователя (GUI) и интегрированных оболочек разработки (IDE), ныне ставших модными. Однако начинающим программировать на Pascal желательно попробовать основные инструментальные средства языка. Часто бывает необходимо писать консольные или текстовые приложения для выполнения сложных системных управляющих задач.  
+
Многие из нас писали [[Program| программы]] на [[Pascal|Паскале]] задолго до того, как вошли  в моду [[Graphical User Interface|Графический интерфейс пользователя]] (GUI) и [[IDE|Интегрированные среды разработки (IDE)]]. Многие другие являются новичками в программировании на Pascal, и им необходимо уметь опробовать основные инструменты языка. Третьим нужны [[Command-line interface|консольные]] приложения или приложения [[Text User Interface|текстового режима]] для выполнения сложных задач управления системой.
  
Lazarus является идеальной средой для изучения Pascal и разработки программ текстового режима. Может использоваться вся функциональность интегрированной оболочки разработчика, включая редактор исходных текстов с подцветкой синтаксиса, доступ к библиотекам, инструменты сложного поиска и кодов завершения, проверку синтаксиса. Если форма с визуальными компонентами не нужна, редактор исходных текстов Lazarus – хорошая среда для разработки программы. В процессе разработки можно компилировать и выполнять программу, не покидая редактор.
+
=== Программирование в консольном режиме без Lazarus ===
 +
Хотя многие предпочитают использовать [[Lazarus IDE]] для написания программ в режиме консоли, вы также можете написать их с помощью любого текстового редактора и скомпилировать их самостоятельно, вызвав [[Compiler|компилятор]] [[FPC]], например так для программы в example.pas:
 +
<syntaxhighlight lang="bash">
 +
fpc example.pas
 +
</syntaxhighlight>
  
Для запуска программы консольного режима необходимо в основном меню выбрать Проект -> Создать Проект, затем выбрать '''Программа''', '''Консольное приложение''' или '''Программа пользователя'''. IDE не будет генерировать дополнительных файлов для полного графического приложения, и не откроет окно Инспектора Объектов, но откроет редактор исходного текста со скелетом структуры программы и будет ожидать ввода текста программы.
+
Также доступен текстовый режим IDE ''fp'' (немного похожий на старый [[Turbo Pascal]]).В следующих разделах мы сосредоточимся на программировании с помощью [[Lazarus]].
  
=== Программа пользователя ===
+
=== Программирование в консольном режиме с помощью Lazarus ===
 +
Lazarus предоставляет идеальную среду для изучения Паскаля и разработки программ в текстовом режиме. Можно использовать все функции интегрированной среды разработки, включая редактор исходного кода с ее [[Syntax highlighting| подсветкой синтаксиса]], доступом к библиотекам, сложными инструментамиы поиска и завершения кода, а также проверкой синтаксиса. Если вам не нужна [[TForm |Form]] с ее визуальными компонентами, можно и без нее, но редактор исходного кода Lazarus по-прежнему остается отличной средой для разработки программ. Вы можете компилировать и запускать свою программу во время разработки, не выходя из редактора.
  
Очень маленькая программа на pascal. Выбирается, если нужно сделать все самостоятельно, или выполнить быструю проверку, а затем удалить файлы.
+
Чтобы запустить программу в режиме консоли, перейдите в главное меню и выберите Project -> New Project(Проект - новый проект), а затем выберите '''Program'''(Программа) или '''Console Application'''(Консольное приложение). Среда IDE не будет генерировать все дополнительные файлы, связанные с полным графическим приложением, и не откроет окно инспектора объектов, но откроет редактор исходного кода со структурой скелетной программы и будет ожидать ввода вашего программирования.
  
=== Программа ===
+
{{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).}}
  
Похоже на "Программа пользователя", но IDE задействован чуть больше. Например, если добавить другой модуль, IDE автоматически добавит его имя в секцию uses. Это действие определяется в опциях проекта. Можно перемещаться в любое время между режимами 'Программа' и 'Программа пользователя'.
+
{{Note|Lazarus имеет некоторые функции для программ командной строки, такие как [[CopyFile |copyfile]]. Чтобы использовать их, добавьте требование к проекту для LazUtils (Project / Project Inspector / Required Packages --> "Add" --> New Requirement --> choose "LazUtils" --> OK), которое не будет задействовать весь LCL. Затем добавьте соответствующий модуль в раздел uses.}}
 +
 
 +
==== Тип проекта: Console Application (Консольное приложение) ====
 +
 
 +
Выбор этого типа проекта в Lazarus создает программу с новым классом, производным от TCustomApplication. TCustomApplication предоставляет много всяких штучек и упрощает программирование утилит командной строки. Например, проверка параметров командной строки, написание справки, проверка [[Command_line_parameters_and_environment_variables#Environment_variables| переменных окружения]] и обработка [[Exceptions| исключений]]. Все программы [[LCL]] используют это автоматически.
 +
 
 +
==== Тип проекта: Program (Программа) ====
 +
 
 +
В качестве демо мы напишем очень минималистичную программу на Паскале. В среде IDE выберите тип проекта Program(Программа), и пусть среда IDE вам немного поможет. Например, когда вы добавляете еще один [[Unit |модуль]], IDE автоматически добавит имя модуля в раздел программы [[Uses| uses]]. Это поведение определяется в параметрах проекта. Таким образом, вы можете переключаться между 'Program'(Программой) и 'Custom Program'(Пользовательской программой) в любое время.
  
 
Пример для начинающих:
 
Пример для начинающих:
<pre>
+
<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> позволяет запускать скрипт как отдельную программу.
  
Здесь создается программа с новым классом, производным от TCustomApplication. TCustomApplication обеспечивает хорошую основу и делает программирование утилит командной строки довольно простым. Например, проверку опций командной строки, написание справки, проверку переменных окружения и обработку исключений. Все программы LCL автоматически это используют.
+
{{Note|Хотя он используется для запуска сценариев Pascal, InstantFPC использует обычный Object Pascal, а не язык сценариев PascalScript. Таким образом, "'''PascalScript'''" и '''Pascal script''' - это не одно и то же.}}
  
== Компиляция ==
+
== Запуск программы ==
 +
==== Компиляция ====
  
 
По завершении написания программы (или ее фрагмента), ее можно откомпилировать и выполнить, выбрав Запуск -> Запуск из основного меню, или нажав зеленый треугольник  (Запуск) на кнопочной панели. Все сообщения компилятора (предупреждения, промежуточные отчеты и сообщения об ошибках) будут появляться в окне сообщений, а в конечном итоге должно появиться сообщение
 
По завершении написания программы (или ее фрагмента), ее можно откомпилировать и выполнить, выбрав Запуск -> Запуск из основного меню, или нажав зеленый треугольник  (Запуск) на кнопочной панели. Все сообщения компилятора (предупреждения, промежуточные отчеты и сообщения об ошибках) будут появляться в окне сообщений, а в конечном итоге должно появиться сообщение

Revision as of 00:22, 18 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 не будет генерировать все дополнительные файлы, связанные с полным графическим приложением, и не откроет окно инспектора объектов, но откроет редактор исходного кода со структурой скелетной программы и будет ожидать ввода вашего программирования.

Light bulb  Примечание: В 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).
Light bulb  Примечание: 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

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

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

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

Компиляция

По завершении написания программы (или ее фрагмента), ее можно откомпилировать и выполнить, выбрав Запуск -> Запуск из основного меню, или нажав зеленый треугольник (Запуск) на кнопочной панели. Все сообщения компилятора (предупреждения, промежуточные отчеты и сообщения об ошибках) будут появляться в окне сообщений, а в конечном итоге должно появиться сообщение

'Project "Project1" successfully built.:)'.

Запуск

Но где находится программа??!!

Если Вы ее еще не сохраняли, то IDE поместил ее во временную папку (т.е. /tmp под linux, C:\temp под windows, см. Настройки среды / Files / Directory, чтобы проверить настройки проектов).

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

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

./Project1 ,

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

Запуск из IDE

Из оснвного меню нужно выбрать Запуск -> Параметры запуска, затем пометить флажок "Использовать приложение для запуска". Сделав это, попробуйте запустить последовательность Компиляция/Запуск, но возможно, появится нехорошее сообщение

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

В этом случае необходимо изменить разрешения для соответствующего файла (например, chmod +x filename, или при помощи утилиты Windows, изменяющей разрешения); для этого необходимы права администратора. После этого при запуске программы появится окно консоли и тексты ввода/вывода в нем.

По завершении выполнения программы на экране появится сообщение "Press enter". Таким образом диалоги созданной программы останутся на экране, чтобы можно было их прочитать; по нажатии 'enter' окно консоли закроется.

Примеры

Можно испытать работу редактора Lasarus, попробовав все примеры из обычной книги по языку Pascal, или написав собственный. Наиболее полезные - те, что выполняют системные команды или запускают другие программы (написанные на Pascal, C или Perl, или сценарии оболочки).

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

Приведен пример для Custom Program или Program:

Program TryShell;
uses classes, unix;
var S: longint;
begin
  S := fpsystem ('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
  writeln ('Program exited with status : ', S)
end.

Пример: корректировка 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 выполняемая программа возвращается в папку, из которой она запускалась; поэтому нужно в строку вызова оболочки ставить множество операторов.

Конечно, не стоит вводить каждую команду отдельной строкой Pascal; лучше создать сценарий наподобие приведенному ниже (из 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, и он вызывается из программы Pascal так:

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

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

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

Параметры командной строки

См. Command line parameters and environment variables.