Учебный центр "ANIT Texno Inform"
Опубликован: 25.06.2014 | Доступ: свободный | Студентов: 2595 / 850 | Длительность: 24:39:00
Специальности: Программист
Лекция 19:

Консольные приложения и параметры программы

< Лекция 18 || Лекция 19: 12 || Лекция 20 >
Аннотация: На этой лекции мы научимся создавать консольные приложения, вводить и выводить данные в консольных программах, устанавливать правильную кодировку и использовать параметры программы.

Цель лекции

Освоить работу с консольными приложениями и с параметрами программы.

Консольные приложения

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

Консольным приложением называется программа, которая не имеет графического интерфейса - окон, и которая работает в текстовом режиме в черно-белой консоли. Команды в такой программе приходиться вводить с клавиатуры, результаты работы консольные приложения также выводят на экран в текстовом режиме.

Если вы пользуетесь операционной системой Windows, то нажмите на "Пуск" и выберите команду "Выполнить". В открывшемся окне наберите

cmd
    

и нажмите <Enter>. Откроется командная консоль, в которой команды нужно вводить в текстовом режиме:

Консоль cmd.exe

Рис. 21.1. Консоль cmd.exe

Собственно, вы видите окно предка Windows - операционной системы MS-DOS. Именно так выглядел экран с загруженной ОС MS-DOS, и управлять ею приходилось, вручную набивая всевозможные команды. Это уже позже корпорация Microsoft навесила на ядро MS-DOS всевозможные драйверы и утилиты, снабдила его графическим оконным интерфейсом, и появилась сначала полуграфическая ОС Windows 3.10 (русский вариант был 3.11 версии), а затем и целиком графическая Windows 95. Но к консольному ядру системы можно обращаться и в современных ОС, в Windows для этого используется программа cmd.exe, а в ОС Linux - терминал.

Все языки высокого уровня позволяют делать и консольные приложения, другое дело - зачем? Подавляющее большинство современных программ имеет графический интерфейс, который мы с вами создавали с самой первой лекции. А консольные приложения делаются в основном, системными программистами. Несмотря на то, что Object Pascal обладает для этого всеми необходимыми инструментами, системщики обычно пользуются такими языками, как Ассемблер, C, реже - C++. Но все же знать, как создаются консольные приложения нужно, поэтому данную лекцию мы посвящаем им.

Создание консольного приложения

Создать консольное приложение можно разными способами, но проще всего так. Откройте Lazarus. Командой "Проект -> Закрыть проект" закройте текущий проект, автоматически появится окно Мастера создания проекта. В нем нажмем кнопку "Новый проект". Появится окно создания проекта, в котором можно выбрать "Программа" или "Консольное приложение". Если мы выберем "Программа", то будет создан модуль с минимальным кодом. Если же мы выберем "Консольное приложение", то кода будет больше, так как при этом создается программа с новым классом, производным от TCustomApplication. TCustomApplication обеспечивает хорошую основу и делает программирование утилит командной строки довольно простым. Например, проверку опций командной строки, написание справки, проверку переменных окружения и обработку исключений. Все программы LCL автоматически это используют.

Но нам не нужно использовать возможности класса TCustomApplication, мы делаем простую консольную программу, поэтому в окне создания проекта мы выбираем "Программа". Сформируется проект, а в Редакторе исходного кода будет минимум текста:

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

begin
end.
    

Обратите внимание, если нам нужно подключить к программе какие то модули, то делать это нужно до комментария

  { you can add units after this };
    

В этом случае мы ставим запятую после указанного модуля Classes и добавляем свои модули. Завершающая точка с запятой стоит после комментария, нам её ставить не нужно.

Свой код мы будем писать между скобками

begin
end.
    

А если нам потребуется указать глобальные константы, переменные или сделать объявления процедур и функций, то все это делается до begin.

Для примера мы создадим простое приложение, а по ходу дела, познакомимся с инструментами ввода-вывода информации в консольных приложениях.

WRITE и WRITELN

Процедура Write предназначена для вывода информации на экран. Она имеет следующий синтаксис:

procedure Write(var F:Text; Args:Arguments);
    

Действует процедура следующим образом. В скобках мы можем указать какой-то текст, вывести содержимое переменных. Например:

  write('Всем привет!!!');
  write('Переменная a = ', a, '; переменная b = ', b);
    

После вывода информации на экран курсор остается на той же строчке, в позиции, где он оказался после вывода последнего символа.

Процедура Writeln действует точно также, но после вывода последнего символа курсор переходит на начало следующей строки.

Для ознакомления с процедурами создайте новый проект "Программа". Модуль можно не переименовывать, просто сохраните его в папку 21-01. Полный текст модуля следующий:

program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var a, b: Integer;
begin
  a:= 5;
  b:= 10;
  writeln('Всем привет!!!');
  writeln('Переменная a = ', a, '; переменная b = ', b);
  readln();
end.
    

Обратите внимание: раздел переменных var мы указали до служебного слова begin, то есть, переменные a и b в пределах модуля являются глобальными. Далее мы присвоили переменным значения, затем вывели на экран приветствие, а потом содержимое переменных. На процедуру readln() пока не обращайте внимания, она нужна только, чтобы программа не закрылась сразу же после вывода текста, а была на экране, пока мы не нажмем <Enter>. Сохраните проект и запустите его на выполнение. И сразу же мы видим недостаток: вместо русских букв выходит нечто, что в Интернете называют "кракозябры":

Неправильный вывод кириллицы в консольной программе

Рис. 21.2. Неправильный вывод кириллицы в консольной программе

В "Символы и строки" мы упоминали, что в консольных приложениях Windows принято использовать кодировку CP866, тогда как в графических приложениях используется CP1251 и Юникод. Отсюда и "кракозябры". В Linux и Unix таких проблем нет. Однако решить эту проблему совсем несложно. Нажмите <Enter>, чтобы закрыть консоль, и вернитесь в Редактор кода. Щелкните по окну с кодом правой кнопкой мыши, и в открывшемся контекстном меню выберите команду "Параметры файла -> Кодировка -> CP866". Откроется окно смены кодировки, нам надо нажать кнопку "Изменить файл". Снова запустите программу на выполнение - теперь с кодировкой полный порядок:

Правильный вывод кириллицы в консольной программе

Рис. 21.3. Правильный вывод кириллицы в консольной программе
< Лекция 18 || Лекция 19: 12 || Лекция 20 >
Инга Готфрид
Инга Готфрид
Александр Скрябнев
Александр Скрябнев

Через WMI, или используя утилиту wmic? А может есть еще какие более простые пути...