Справочная статья
Оператор PRINT
Когда программе нужно показать сообщение или результат вычисления, она передаёт значения оператору PRINT. Оператор превращает их в текст и помещает в консоль или в окно программы. Форма PRINT USING решает более узкую задачу: раскладывает значения по полям форматной строки, задавая ширину поля и вид числа.
Назначение и место вывода
Куда именно попадёт текст, зависит от того, как запущена программа. Пока программа не выбрала экран оператором SCREEN, результат поступает в консоль; после выбора экрана текст отображается в окне программы. При запуске через CLI вывод идёт в стандартный поток вывода. Размещением текста внутри графического экрана управляют средства графической главы, а не PRINT.
Синтаксис
Запись оператора начинается ключевым словом PRINT, за которым идёт необязательный список вывода. Форма с USING добавляет перед этим списком форматную строку. Завершающий разделитель записывается сразу после списка. Ниже перечислены все допустимые формы.
PRINTPRINT <список вывода>PRINT <список вывода> ;PRINT <список вывода> ,PRINT USING <формат> ; <список вывода>PRINT USING <формат> ; <список вывода> ;PRINT USING <формат> ; <список вывода> ,Список вывода и разделители
Список вывода состоит из одного или нескольких выражений, которые вычисляются слева направо. Разделитель между выражениями определяет только то, что попадёт между значениями: точка с запятой не добавляет символов, запятая добавляет один пробел. Запятая не перемещает вывод в фиксированную экранную зону.
Тот же символ в конце инструкции действует иначе. Завершающий разделитель не разделяет значения, а откладывает перевод строки: следующий вывод продолжит ту же строку. Без завершающего разделителя PRINT заканчивает строку, а пустой PRINT выводит только перевод строки. Несколько строк подряд показывают разницу:
PRINT "Имя: "; "Анна"
PRINT "Курс:", 2
PRINT
PRINT "Готово"Результат:
Имя: Анна
Курс: 2
ГотовоВ первой строке точка с запятой соединила подпись и имя без промежуточного символа, поэтому между ними остался только пробел, завершающий саму строку «Имя: ». Во второй строке запятая добавила пробел перед числом. Пустой PRINT создал пустую строку, и слово «Готово» оказалось ниже.
В форме PRINT USING первым идёт выражение типа STRING — форматная строка с маской текстовых и числовых полей.
Представление значения
Обычная форма преобразует значение в отображаемый текст по правилам Axiom. То же скалярное представление даёт соединение через &. Если строка собирается заранее, со вставками и форматированием, применяется интерполяция; её полный договор находится в строковой главе.
PRINT USING
Обычный PRINT выводит значение в его естественном виде. Когда требуется выровнять столбцы чисел или задать точное число дробных разрядов, применяют PRINT USING: он принимает форматную строку и раскладывает по её полям переданные значения. Сначала вычисляется строка формата типа STRING, затем значения подставляются в её поля по порядку. Форматное поле должно соответствовать типу переданного значения.
| Строковое поле | Действие |
|---|---|
! | Выводит первый элемент UTF-16 строки; для пустой строки вывод пуст. |
& | Выводит строку целиком. |
\ \ | Поле фиксированной ширины. Ширина включает обратные косые черты и пробелы между ними. |
Числовые маски используют #, 0, ., +, -, ,, $, * и ^. Маска определяет ширину поля и представление числа. Следующая запись задаёт поле шириной шесть знаков, из которых два отведены под дробную часть:
PRINT USING "Итог: ###.##"; 12.5Результат:
Итог: 12.50Число заняло пять позиций поля из шести, поэтому перед ним остался один пробел, а дробная часть дополнена нулём до двух разрядов.
В обычной десятичной маске половина округляется от нуля: до 28 дробных разрядов для INTEGER, LONG и DECIMAL и до 15 разрядов для DOUBLE. Более длинная дробная часть маски поддерживается: тогда форматируется исходное значение без предварительного округления до этих пределов, но дополнительные позиции не увеличивают точность исходного типа. Форматная строка ограничена 2048 единицами UTF-16.
Четыре символа ^^^^ задают экспоненциальное представление. Знак показателя сохраняется отдельно от знака числа; INTEGER, LONG и DECIMAL форматируются без промежуточного преобразования в DOUBLE. Так выглядит одна и та же маска на малом и большом значении:
PRINT USING "###.##^^^^"; 0.001
PRINT USING "###.##^^^^"; 1000Результат:
1.00E-03
1.00E+03Неподходящий тип значения или нехватка значения для числового поля приводят к ошибке форматирования. Для отсутствующего строкового значения поле ! или & выводит пустую строку, а фиксированное поле — пробелы. Лишние значения вычисляются, но в результат не включаются. При переполнении ширины числового поля выводятся знак % и обычное представление исходного числа.
Диагностика
MB2003— выражение формата вPRINT USINGне имеет типSTRING.MB3007— ошибка форматированияPRINT USING: неподходящий тип значения для поля, нехватка значения для числового поля или недопустимая форматная строка.
Запускаемые примеры
Откройте нужный файл в IDE и запустите его. Примеры с ошибкой предназначены для проверки сообщения компилятора или выполнения.