Аннотация: На этой лекции мы научимся создавать консольные приложения, вводить и выводить данные в консольных программах, устанавливать правильную кодировку и использовать параметры программы.
Цель лекции
Освоить работу с консольными приложениями и с параметрами программы.
Консольные приложения
На сегодняшний день о программировании на Lazarus существует очень мало книг на русском языке, и все они описывают работу в основном, с консольными приложениями, хотя особой надобности в консолях сейчас нет. Но и совсем обойти эту тему нельзя. Что же такое консольное приложение ?
Консольным приложением называется программа , которая не имеет графического интерфейса — окон, и которая работает в текстовом режиме в черно-белой консоли. Команды в такой программе приходиться вводить с клавиатуры, результаты работы консольные приложения также выводят на экран в текстовом режиме.
Если вы пользуетесь операционной системой Windows , то нажмите на «Пуск» и выберите команду «Выполнить». В открывшемся окне наберите
Простейшая консольная программа на Java
и нажмите . Откроется командная консоль , в которой команды нужно вводить в текстовом режиме:
Рис. 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; uses cthreads, Classes < you can add units after this >; begin end.
Обратите внимание, если нам нужно подключить к программе какие то модули, то делать это нужно до комментария
В этом случае мы ставим запятую после указанного модуля 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; uses cthreads, 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() пока не обращайте внимания, она нужна только, чтобы программа не закрылась сразу же после вывода текста, а была на экране, пока мы не нажмем . Сохраните проект и запустите его на выполнение. И сразу же мы видим недостаток: вместо русских букв выходит нечто, что в Интернете называют «кракозябры»:
Рис. 21.2. Неправильный вывод кириллицы в консольной программе
В «Символы и строки» мы упоминали, что в консольных приложениях Windows принято использовать кодировку CP866, тогда как в графических приложениях используется CP1251 и Юникод. Отсюда и «кракозябры». В Linux и Unix таких проблем нет. Однако решить эту проблему совсем несложно. Нажмите , чтобы закрыть консоль , и вернитесь в Редактор кода.
Щелкните по окну с кодом правой кнопкой мыши, и в открывшемся контекстном меню выберите команду «Параметры файла -> Кодировка -> CP866». Откроется окно смены кодировки, нам надо нажать кнопку «Изменить файл». Снова запустите программу на выполнение — теперь с кодировкой полный порядок :
Источник: intuit.ru
Определения
Этот документ содержит определения конкретных слов и фраз в этом пространстве и используется в качестве ссылки в этом наборе документов.
Приложения командной строки
Приложения командной строки, иногда называемые «консольными приложениями» и/или называемые «клиентами» подсистемы консоли, представляют собой программы, которые работают в основном в потоке текстовых или символьных данных. Они обычно не содержат собственных элементов пользовательского интерфейса и делегируют как выходные данные, так и роли ввода и взаимодействия с ведущим приложением. Приложения командной строки получают поток текста по стандартному входному STDIN маркеру, который представляет ввод с клавиатуры пользователя, обрабатывает эту информацию, а затем реагирует на поток текста по стандартному выходу STDOUT для отображения на мониторе пользователя. Разумеется, это изменилось со временем для дополнительных устройств ввода и удаленных сценариев, но одна и та же основная философия остается неизменной: клиенты командной строки работают на тексте, и кто-то другой управляет отображением и вводом.
Стандартные маркеры
Стандартные дескрипторы — это ряды, STDIN STDOUT , и STDERR , которые представлены как часть пространства процесса при запуске. Они представляют собой место, в котором информация должна быть принята по пути и отправлена обратно (включая специальное место для сообщения об ошибках). Для приложений командной строки они всегда должны существовать при запуске приложения. Они либо наследуются от родительского объекта автоматически, задаются явным образом родительским объектом, либо автоматически создаются операционной системой, если ни одно из них не задано или разрешено. для классических Windows приложений они могут быть пустыми при запуске. Однако они могут быть неявно или явно унаследованы от родительского или выделенного, присоединенного и освобожденного во время выполнения самим приложением.
Стандартные дескрипторы не подразумевают определенного типа подключенного устройства. Однако в случае приложений командной строки устройство чаще всего является консольным устройством, файлом (от перенаправления в оболочке) или каналом (из оболочки, соединяющей выходные данные одной служебной программы с входом следующего). Это также может быть сокет или любой другой тип устройства.
ТЕЛЕТАЙП/PTY
на платформах, отличных от Windows, устройства TTY и PTY представляют собой либо истинное физическое устройство, либо программное псевдо-устройство, которое является той же концепцией, что и сеанс консоли Windows. канал, в котором обмен данными между клиентским приложением командной строки и приложением взаимодействия с узлом сервера, или устройством с физическим вводом-выводом, может обмениваться данными на основе текста.
Клиенты и серверы
В этом пространстве мы будем ссылаться на «клиенты» как на приложения, выполняющие обработку информации и выполнение команд. «Серверные» приложения — это те, которые отвечают за пользовательский интерфейс и являются работниками для преобразования входных и выходных данных в стандартные формы от имени клиентов.
Подсистема консоли
Это термин «Catch-All», представляющий все модули, влияющие на операции консоли и командной строки. В частности, он относится к флагу, который является частью переносимого исполняемого файла, который указывает, является ли начальное приложение командной строкой или консольным приложением (и должны иметь стандартные дескрипторы для запуска) или приложением Windows (и не требует их).
Узел консоли, клиентские приложения командной строки, драйвер консоли, консоль API консоли, псеудоконсоле инфраструктура, терминалы, свойства конфигурации, механизмы и заглушки в загрузчике процессов, а также все служебные программы, связанные с этими формами приложений, считаются принадлежащими к этой группе.
Узел консоли
узел консоли Windows или conhost.exe — это серверное приложение для всех api-интерфейсов Windows консоли, а также классический Windows пользовательский интерфейс для работы с приложениями командной строки. полное содержимое этого двоичного файла, как сервер API, так и пользовательский интерфейс, историческо Windows csrss.exe , критический системный процесс и был рассходится в целях обеспечения безопасности и изоляции. Перейдя вперед, conhost.exe будет по-прежнему отвечать за обслуживание и перевод вызовов API, но компоненты пользовательского интерфейса должны быть делегированы через псеудоконсоле в терминал.
псеудоконсоле
это Windows моделирования псеудотерминал или «PTY» от других платформ. он пытается сопоставить общую философию интерфейса птис, предоставляя простой двунаправленный канал связи на основе текста, но он дополняет его на Windows с большим уровнем совместимости, чтобы перевести разнообразные Windows приложения, написанные до этой философии разработки, изменялись с классической панели API консоли на простую форму обмена текстовыми каналами. Терминалы могут использовать псеудоконсоле, чтобы стать владельцем элементов пользовательского интерфейса за пределами узла консоли, conhost.exe в то же время оставляя его за обслуживанием, переводом и совместимостью API.
Терминал
Терминал — это модуль пользовательского интерфейса и взаимодействия для приложения командной строки. Сегодня это программное представление, которое использовалось для предыстории физического устройства с монитором монитора, клавиатурой и двунаправленным последовательным каналом связи. Он отвечает за сбор входных данных от пользователя в различных формах, их перевод и кодирование, а также специальные сведения о командах в единый текстовый поток и их отправка в PTY для передачи STDIN в канал клиентского приложения командной строки. Он также отвечает за получение информации с помощью PTY, которая поступила из канала клиентского приложения STDOUT , декодирование любых специальных сведений в полезных данных, размещение всего текста и дополнительных команд, а также представление этого графического объекта конечному пользователю.
Источник: learn.microsoft.com
Консольное приложение
Консольное приложение — это программа, которая для взаимодействия с пользователем использует консоль — клавиатуру и монитор, работающий в режиме отображения символьной информации (буквы, цифры и специальные знаки).
В операционной системе консольное приложение работает в окне командной строки (рис. 6.1), которое часто называют окном консоли.
Рис. 6.1. Консольное приложение работает в окне командной строки
Консольные приложения удобны для решения задач, в которых не предъявляется особых требований к интерфейсу. Они широко используются для решения системных задач. Следует обратить внимание, что многие утилиты Microsoft .NET Framework реализованы как консольные приложения.
Часть II. Практикум программирования
Консольное приложение может вывести информацию на экран и получить данные с клавиатуры одним из трех способов:
при помощи функций printf (вывод) и scanf (ввод);
вывести информацию в поток вывода ( cout ), прочитать данные из потока ввода ( cin );
при помощи методов WriteLine и ReadLine объекта Console .
Основным способом взаимодействия с пользователем в консольных .NETприложениях, созданных Microsoft Visual Studio, является использование объекта Console . Методы, обеспечивающие отображение и ввод данных, перечислены в табл. 6.1.
Таблица 6.1. Методы объекта Console
Выводит на экран (в окно консоли) строку st
Выводит на экран (в окно консоли) строку st , после чего
переводит курсор в начало следующей строки
Значением метода ReadLine является строка, набранная
пользователем на клавиатуре. Для преобразования
строки в число надо использовать, например, методы
System::ToInt32() или System::ToSingle()
Значением метода Read является код символа, набран-
ного на клавиатуре
Метод Console::Write выводит на экран (в окно консоли) строку, указанную в качестве параметра метода.
Если надо вывести значение числовой переменной, то для преобразования числа в строку следует использовать метод ToString . Вид (формат) строки, возвращаемой методом ToString , определяет параметр, указанный в инструкции вызова метода (табл. 6.2).
Таблица 6.2. Параметры метода ToString
Currency — финансовый (денежный). Используется для
представления денежных величин. Обозначение денеж-
ной единицы, разделитель групп разрядов, способ ото-
бражения отрицательных чисел определяют соответст-
вующие настройки операционной системы
Глава 6. Консольное приложение
Таблица 6.2 (окончание)
Scientific (exponential) — научный. Используется для
представления очень маленьких или очень больших чи-
сел. Разделитель целой и дробной частей числа задается
в настройках операционной системы
Fixed — число с фиксированной точкой. Используется
для представления дробных чисел. Количество цифр
дробной части, способ отображения отрицательных чисел
определяют соответствующие настройки операционной
General — универсальный формат. Похож на Number , но
разряды не разделены на группы
Number — числовой. Используется для представления
дробных чисел. Количество цифр дробной части, символ-
разделитель групп разрядов, способ отображения отри-
цательных чисел определяют соответствующие настрой-
ки операционной системы
Roundtrip — без округления. В отличие от формата
Number , этот формат не выполняет округления (количест-
во цифр дробной части зависит от значения числа)
Следует обратить внимание, что символ-разделитель целой и дробной частей числа задает операционная система. Этот же символ надо использовать и при вводе дробных чисел.
После выполнения инструкции Write курсор остается в той позиции экрана, в которую он переместился после вывода последнего символа строки. Следующая инструкция Write начинает вывод с той позиции экрана, в которой находится курсор.
Метод WriteLine отличается от метода Write тем, что после вывода строки курсор автоматически переходит в начало следующей строки.
Параметр метода WriteLine можно не указывать. В этом случае курсор будет переведен в начало следующей строки.
Метод ReadLine объекта Console обеспечивает ввод с клавиатуры строки символов. Для преобразования введенной строки в данные необходимо использовать соответствующие методы преобразования: System::ToInt16() ,
System::ToInt32() , System::ToSingle() , System::ToDouble() и т. д.
Следует обратить внимание на то, что в процессе преобразования строки в число возможны ошибки (исключения), например, из-за того, что при вводе дробного числа пользователь введет точку вместо запятой («правильным»
Часть II. Практикум программирования
символом, при стандартной для России настройке операционной системы, является запятая).
В качестве примера использования методов объекта Console в листинге 6.1 приведена программа пересчета цены из долларов в рубли.
Листинг 6.1. Консольное приложение
using namespace System;
Console::Write(L»Цена в долларах->»); st = Console::ReadLine();
Console::Write(L»Курс->»); st = Console::ReadLine(); k = Convert::ToSingle(st);
Console::WriteLine(); // пустая строка
st = usd.ToString(«f») + «USD = » + rub.ToString(«c»); Console::WriteLine(st);
// чтобы окно не исчезло с экрана
Console::Write(L»Press any key to continue. «); int ch = Console::Read();
Источник: studfile.net