Справочник Ada 95
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 .. implementation-defined;
subtype Positive_Count is Count range 1 .. Count'Last;
subtype Positive_Count is Count range 1 .. Count'Last;
Для выходного файла или файла добавления можно указать _максимальную длину строки_ и _максимальную длину страницы_. Если значение, подлежащее выводу, не помещается в текущей строке при заданной максимальной длине строки, то перед выводом значения автоматически начинается новая строка; если, кроме того, эта новая строка не помещается на текущей странице при заданной максимальной длине страницы, то перед выводом значения автоматически начинается новая страница. Предоставляются функции для определения максимальной длины строки и максимальной длины страницы. При открытии файла в режиме Out_File или Append_File оба значения равны нулю: по соглашению это означает, что длина строк и длина страниц не ограничены. (Следовательно, вывод состоит из одной строки, если не используются подпрограммы для явного управления структурой строк и страниц.) Для этой цели предоставлена константа Unbounded.