Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст лекций.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
1.59 Mб
Скачать

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

В отличие от типизированных файлов, о которых речь шла выше, работа с текстовыми файлами несколько отличается. Рассмотрим основные отличия.

  • Во-первых, структура текстового файла, размещенного на внешнем устройстве (например, на магнитном диске), имеет следующий вид:

код символа

код символа

. . .

Eoln

код символа

код символа

. . .

код символа

Eoln

код символа

Eoln

код символа

код символа

. . .

код символа

код символа

Eoln

код символа

код символа

. . .

код символа

Eoln

Здесь Eoln – код конца строки (конца элемента файла). В файловой системе MS DOS конец строки кодируется двумя байтами: 0D (возврат каретки) и 0A (переход к новой строке). Приведем пример представления нескольких строк в текстовом файле в системе MS DOS:

Текст

первая

третья

четвертая

Коды

AF A5 E0 A2 A0 EF OD OA

OD OA

E2 E0 A5 E2 EC E5 0D 0A

EF A5 E2 A2 A5 E0 E2 A0 EF OD OA

№ строки

1

2

3

4

Здесь вторая строка пустая. Она представлена только символами {0D 0A} – конец строки.

  • Во- вторых, процедуры чтения и записи имеют следующую структуру

read(<ф.п.>,< список ввода >);

readln(<ф.п.>,< список ввода >);

write(<ф.п.>,< список вывода >);

writeln(<ф.п.>,< список вывода >);

Здесь список ввода и список вывода – последовательность элементов через запятую. Правила построения списков изложены в разделе «Кодирование вычислительных операций», и здесь повторяться не будут.

  • В-третьих, предусмотрены по две функции для операции ввода и вывода из текстового файла – read (write) и readln(writeln). Их отличие заключается в следующем:

  • После выполнения функций readln и writeln «окно файла» перемещается на начало следующей строки файла (строка – элемент текстового файла). При этом, если в текущей строке остается неиспользованной некоторая часть информации, она не обрабатывается.

  • После выполнения функций read и write «окно файла» остается направленным на ту же самую строку файла; только указатель позиции в ней смещается вправо, так что следующая операция чтения (записи) начнется с обработки текущей строки, начиная с позиции указателя.

  • Если при чтении из файла строка заканчивается, а список ввода остается не удовлетворенным до конца, «окно файла» автоматически будет перемещено на следующую строку, и ее сканирование продолжится.

Проиллюстрируем на примере специфику работы с текстовым файлом.

Пусть имеется текстовый файл ’input.txt’ (см. ниже), в котором содержится входные данные для массива целых чисел:

  • количество элементов = 5

  • элементы : {12, -3, 5, 70, 65}

Frame148

Для того, чтобы комментарий в первой строке (’количество чисел в массиве’) не вызвал ошибки при чтении чисел, надо, чтобы он не был прочитан. Это может быть обеспечено так, как показано в программе на Паскале, приведенной на следующей странице.

В результате выполнения программы на экране будет сформирован следующий текст

Frame149

Следует обратить внимание на то, что файл дожжен быть закрыт (close) только в том случае, если его удалось открыть. Попытка же закрыть неоткрытый файл приведет к аварийному завершению программы.

Frame150

Кроме процедуры открытия файла для записи (rewrite), призванной обеспечить создание нового файла, имеется еще одна процедура ­– append. Её назначение, открыть существующий текстовый файл для дописывания в его конец новых строк. Если же указанного в процедуре assign файла к этому моменту нет, создается новый пустой файл, как и при использовании процедуры rewrite. Данная процедура используется, например, при ведении системного журнала для регистрации определенных событий в системе.

В заключение отметим, что в Турбо-Паскале имеется еще ряд процедур и функций для работы с файлами. Но читателю предлагается изучить их самостоятельно.