Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4. Текстовые файлы и циклическое выполнение.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
64.07 Кб
Скачать

4. Текстовые файлы и циклическое выполнение

До настоящего времени были доступны только символьные переменные. Используя текстовые файлы, данные могут сохраняться вне зависимости от их размера. Работая с файлами можно сортировать текстовые строки любой длины.

4.1 Текстовые файлы

Вводится новый тип данных CF Pascal, файл типа TEXT, он используется для хранения данных. Текстовые файлы могут хранить последовательности с любым количеством символов.

Новые идеи: файлы типа TEXT, использование файлов для хранения рабочих данных, REWRITE, RESET.

4.1.1. Операции над файлами.

INPUT и OUTPUT – стандартные идентификаторы именующие файлы которые можно читать и записывать; данные в этих файлах являются последовательностями символов.

В CF Pascal также есть переменные, данные которых являются последовательностями символов – файлы типа TEXT. Другое имя типа данных TEXT – FILE OF CHAR. Текстовые файлы могут быть созданы, туда можно записывать данные, считывать данные, они могут хранить несколько символов, чего не скажешь про переменные типа CHAR. Файлы описываются в разделе VAR c использованием стандартного слова TEXT. Например:

VAR

Ch: CHAR;

Chars: TEXT;

После того как переменная типа TEXT была создана, она должна быть приготовлена для записи с использованием выражения REWRITE, в данном случае:

REWRITE(Chars)

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

RESET(Chars)

Если для файла было выполнено выражение REWRITE и нет промежуточных выражений RESET, файл открыт для записи и выражения WRITE могут ссылаться на него, например:

WRITE(Chars, Ch, ‘#’);

WRITELN(Chars, Ch, Ch)

Если для файла было выполнено выражение RESET, без промежуточных выражений REWRITE, файл открыт для чтения и выражения READ могут ссылаться на него, например:

READ(Chars, Ch);

Чтение и запись файлов типа TEXT, объявленных в программе, во всех отношениях подобны чтению из INPUT и записи в OUTPUT. Значением файла открытого для чтения или записи может быть строка символов и курсор. Выражение REWRITE размещает курсор на первой позиции строки символов, где символы отсутствуют, аналогично OUTPUT после выполнения заголовка программы. Выражение RESET не изменяет данные файла и перемещает курсор в позицию первого символа, если таковой имеется, аналогично тому как инициализируется INPUT при выполнении заголовка программы.

OUTPUT всегда открыт для записи и может присутствовать в выражении WRITE. Выражения

WRITE(Ch)

и

WRITE(OUTPUT, Ch)

С точки зрения выполнения идентичны. Аналогично, INPUT всегда открыт для чтения и может быть использовано следующее выражение:

READ(Input, Ch)

4.1.2. Синтаксис и семантика файлов.

Для включения файловых операций в синтаксические и контекстные правила CFPascal, необходимы следующие изменения в синтаксических правилах 7, 12 и 13 и новое правило 29.

SR7.

<объявления> ::= VAR <список идентификаторов>: <тип>

| <объявления>;<список идентификаторов>:<тип>

SR12.

<выражение READ> ::= READ(<список идентификаторов>)

| RESET(<идентификатор>)

SR13.

<выражение WRITE> ::= WRITE(<список вывода>)

| WRITELN(<список вывода>)

| WRITELN

| REWRITE(<идентификатор>)

SR29.

<тип> ::= CHAR | TEXT

Соответствующее контекстное правило:

CR6.

Идентификатором типа TEXT является <идентификатор> описанный в разделе объявлений имеющий <тип> TEXT. Если идентификатор типа TEXT появляется в <выражении WRITE> или в <выражении READ>, он должен стоять первым в <списке идентификаторов> или <списке вывода>. Идентификатор типа TEXT, иной чем INPUT или OUTPUT должен быть описан в <объявлениях>. Только идентификаторы типа TEXT, исключая INPUT и OUTPUT, могут появляться внутри выражений RESET и REWRITE.

Переменные объявленные как TEXT должны быть подготовлены до того как к ним будут применены выражения READ и WRITE. Первой операцией должны быть REWRITE, которая делает готовит файл для записи. До REWRITE файл имеет неопределенное значение, как неинициализированная переменная типа CHAR. REWRITE может быть применено к фай Лу несколько раз, после чего каждый раз значением файловой переменной становится пустая строка. Последнее операцией примененной к файлу должно быть выражение WRITELN, после чего файл готов к применению выражения RESET, которое готовит файл для чтения. Символы, записанные в определенном порядке после REWRITE, будут считаны в том же порядке после RESET. Файл не может быть прочитан до того как туда что-либо будет записано, такая ситуация вызовет ошибку. Однако марке конца строки, который записывает в файл финальный WRITELN, будет прочитан как пробел. При выполнении следующего выражения READ программа выдаст ошибку. Операция RESET может быть применена к файлу несколько раз.