Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

A.10 Ввод-вывод текстовой информации

Статическая семантика

Этот подраздел описывает пакет Text_IO, который предоставляет средства для ввода-вывода в удобочитаемой форме. Каждый файл читается или записывается последовательно, как последовательность символов, сгруппированных в строки, и как последовательность строк, сгруппированных в страницы. Спецификация пакета приведена ниже в A.10.1.
Вышеуказанные средства управления файлами в A.8.2 и A.8.3 доступны для текстового ввода-вывода. Однако вместо процедур Read и Write используются процедуры Get и Put, которые считывают значения подходящих типов из текстовых файлов и записывают значения в них. Эти значения передаются процедурам Put и возвращаются процедурами Get в параметре Item. Существуют несколько перегруженных процедур с этими именами для разных типов Item. Эти процедуры Get анализируют входные последовательности символов на основе лексических элементов (см. Раздел 2) и возвращают соответствующие значения; процедуры Put выводят заданные значения как соответствующие лексические элементы. Также доступны процедуры Get и Put, которые вводят и выводят отдельные символы, рассматриваемые как значения символов, а не как лексические элементы. С вводом символов связаны процедуры для предварительного просмотра следующего символа без его чтения и для чтения символа «немедленно» без ожидания конца строки для сигнализации о доступности.
В дополнение к процедурам Get и Put для числовых и перечислимых типов Item, работающих с текстовыми файлами, предоставляются аналогичные процедуры, которые считывают и записывают в параметр типа String. Эти процедуры выполняют тот же анализ и состав последовательностей символов, что и их аналоги с файловым параметром.
Для всех процедур Get и Put, работающих с текстовыми файлами, и для многих других подпрограмм существуют формы с файловым параметром и без него. Каждая процедура Get работает с входным файлом, а каждая процедура Put — с выходным файлом. Если файл не указан, используется файл по умолчанию для ввода или для вывода.
В начале выполнения программы файлами по умолчанию для ввода и вывода являются так называемые стандартный входной файл и стандартный выходной файл. Эти файлы открыты, имеют соответственно текущие режимы In_File и Out_File и связаны с двумя определяемыми реализацией внешними файлами. Предоставляются процедуры для изменения текущего файла по умолчанию для ввода и текущего файла по умолчанию для вывода.
В начале выполнения программы файлом по умолчанию для вывода текстовой информации, связанной с ошибками, является так называемый стандартный файл ошибок. Этот файл открыт, имеет текущий режим Out_File и связан с определяемым реализацией внешним файлом. Предоставляется процедура для изменения текущего файла ошибок по умолчанию.
С логической точки зрения, текстовый файл представляет собой последовательность страниц, страница — последовательность строк, а строка — последовательность символов; конец строки отмечается разделителем строки; конец страницы отмечается комбинацией разделителя строки, непосредственно за которым следует разделитель страницы; и конец файла отмечается комбинацией разделителя строки, непосредственно за которым следует разделитель страницы, а затем разделитель файла. Разделители генерируются во время вывода; либо путем вызова процедур, специально предназначенных для этой цели; или неявно как часть других операций, например, когда для файла были заданы ограниченная длина строки, ограниченная длина страницы или оба.
Фактическая природа разделителей не определяется языком и поэтому зависит от реализации. Хотя разделители распознаются или генерируются некоторыми из последующих процедур, они не обязательно реализуются как символы или последовательности символов. Являются ли они символами (и если да, то какими) в любой конкретной реализации, не представляет интереса для пользователя, который не явно выводит или вводит управляющие символы. Влияние ввода (Get) или вывода (Put) управляющих символов (кроме горизонтальной табуляции) не определяется языком.
Символы строки нумеруются, начиная с единицы; число символа называется его номером столбца. Для разделителя строки также определяется номер столбца: он на единицу больше числа символов в строке. Строки страницы и страницы файла аналогичным образом нумеруются. Текущий номер столбца — это номер столбца следующего символа или разделителя строки, который будет передаваться. Текущий номер строки — это номер текущей строки. Текущий номер страницы — это номер текущей страницы. Эти числа являются значениями подтипа Positive_Count типа Count (по соглашению, значение нуль типа Count используется для обозначения особых условий).
type Count is range 0 .. определяется реализацией;
subtype Positive_Count is Count range 1 .. Count'Last;
Для выходного файла или файла добавления можно указать максимальную длину строки и максимальную длину страницы. Если значение, которое нужно вывести, не помещается в текущей строке, для заданной максимальной длины строки, то перед выводом значения автоматически начинается новая строка; если, кроме того, эта новая строка не помещается на текущей странице, для заданной максимальной длины страницы, то перед выводом значения автоматически начинается новая страница. Предоставляются функции для определения максимальной длины строки и максимальной длины страницы. При открытии файла в режиме Out_File или Append_File оба значения равны нулю: по соглашению, это означает, что длина строк и длина страниц не ограничены. (Следовательно, вывод состоит из одной строки, если не используются подпрограммы для явного управления структурой строк и страниц.) Для этой цели предоставляется константа Unbounded.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API