Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota4-информатика.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
152.58 Кб
Скачать

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

Компонентами текстовых файлов являются символы, организованные в виде последовательности строк произвольной длины, что не позволяет считать их просто набором символов char.

Каждая строка в текстовом файле оканчивается составным символом "конца строки", который является объединением двух символов: символа #13 (CR) — возврат каретки (carridge return) и символа #10 (LF) — перевод строки (line feed). Для составного символа вводят обозначение eoln (End Of LiNe). Символ eoln нельзя присвоить переменной типа char. Однако его можно распознать с помощью функции eoln.

Текстовый файл — это последовательность символов, сгруппированных в строки, заканчивающиеся специальным символом eoln.

В конце любого файла, в том числе и текстового, ставится символ #26 (SUB) — конец файла eof (End Of File).

Замечание

Текстовый файл можно подготовить и прочитать при помощи обычного текстового редактора, который не использует операции форматирования текста. Надо только помнить, что в DOS и Windows используются разные кодировки для русских букв, поэтому при работе в Turbo Pascal нужно пользоваться редактором для DOS (встроенный редактор этой системы вполне годится). При работе с Delphi или другой 32-разрядной системой файл может быть подготовлен при помощи приложения "Блокнот". Программа MS Word позволяет сохранить текстовые файлы с различной кодировкой (при этом теряется форматирование) с помощью команды Файл | Сохранить как. Далее следует выбрать текст DOS (*.txt) или только текст (*.txt).

Объявление текстового файла в программе осуществляется заданием файловой переменной типа text (текст) в виде:

type ИмяТипа = text;

var ФайловаяПеременная : ИмяТипа;

или

var ФайловаяПеременная : text;

С файлами текстового типа можно работать только путем последовательного продвижения по файлу, прочитывая или записывая одну строку за другой, начиная с первой. Текстовые файлы являются файлами последовательного доступа, и этим они отличаются от типизированных файлов, в которых указатель можно поставить в любую позицию файла. Типизированные файлы — это файлы произвольного доступа.

Процедуры и функции для текстовых файлов

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

Открытие текстового файла можно произвести тремя способами. Два из них являются стандартными: reset и rewrite. Процедура reset открывает текстовые файлы только для чтения. Процедура rewrite перезаписывает их. Новая процедура append позволяет дополнять файл новыми записями.

  • Процедура append(ФайловаяПеременная). Она открывает существующий файл для дозаписи. Указатель ставится не в начало, а в конец файла, куда и будут дописываться новые компоненты. ФайловаяПеременная текстового типа предварительно должна быть связана с внешним файлом с помощью процедуры assign. Процедура append применима только к текстовым файлам. Если файл ранее уже был открыт с помощью reset или rewrite, использование append приведет к закрытию этого файла и к повторному открытию, но уже для добавления элементов

После обращения к append текстовый файл доступен только по записи, и функция eof всегда принимает значение truе. После вызова reset или rewrite функция eof принимает значение true, только если файл пуст, иначе — false.

  • Процедуры чтения:

read(ФайловаяПеременная, x1, x2,...,xN);

readln(ФайловаяПеременная);

readln(ФайловаяПеременная, x1, x2,...,xN);

где x1, x2,...,xN — список ввода, содержащий имена переменных разных типов (integer, real, char, string), значения которых процедура read считывает из текстового файла, начиная чтение с элемента, на который установлен текущий указатель. Файловая переменная имеет тип text.

Процедура readln выполняет те же действия, что и read, и дополнительно — переход к новой строке.

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

При выборе между read и readln для выполнения чтения из текстового файла необходимо помнить, что после считывания последней переменной списка ввода процедура readln пропускает оставшуюся часть строки до eoln и обязательно переходит к следующей строке текстового файла, даже если из текущей строки прочитаны еще не все символы. Следующее обращение к очередной процедуре read или readln начнется с первого символа новой строки. В отличие от readln процедура rеаd не делает после считывания пропуск до следующей строки. Поэтому она непригодна для чтения последовательности строк, поскольку не дает возможности продвинуться дальше первой строки. Таким образом, для ввода следующих друг за другом строк текста необходимо использовать readln.

  • Процедуры записи:

write(ФайловаяПеременная, y1, y2,...,yN);

writeln(ФайловаяПеременная);

writeln(ФайловаяПеременная, y1, y2,...,yN);

где y1, y2,...,yN — список вывода, содержащий выводимые выражения разных типов (integer, real, char, string, boolean), значения которых должны быть записаны в файл, начиная с позиции текущего указателя. Возможно использование формата вывода. Файл должен быть открыт для вывода.

Процедура writeln выполняет те же действия, что и write, и дополнительно вставляет признак конца строки eoln.

Обратите внимание — особенность использования текстовых файлов состоит в том, что процедуры чтения read (readln) и записи write (writeln) разрешают работать со значениями различных типов. Последовательность символов, прочитанная из файла, автоматически преобразуется к значению типа той переменной, которая используется в списке ввода read (readln). При записи в файл происходит автоматическое преобразование значений переменных списка вывода write (writeln) к символьному виду.

Например, при выполнении фрагмента программы

var f1: text; a,b,c: real;

readln(f1,a,b,c);

процедура readln выполняет чтение из очередной строки файла f1 последовательности цифр, затем интерпретируемой как три вещественных числа, значения которых будут присвоены переменным a, b, c. Если вместо ожидаемой последовательности чисел в файле содержится любая другая последовательность символов, возникает ошибка ввода/вывода. Считывание значений символьного и строкового типов из текстового файла — более безопасная операция, чем чтение данных числового типа. Если длина строки при чтении превышает длину, максимально допустимую для строковой переменной, то она усекается.

  • Функции проверки конца строки и файла:

  • кроме использования функции eof, принимающей значение true, если файл исчерпан, при работе с текстовыми файлами необходимо уметь проверять также и конец строки. Для контроля используется функция eoln(ФайловаяПеременная), принимающая значение true, если указатель текущей позиции находится на маркере конца строки (CR/LF), иначе — false. Если eof — true, то и eoln — true.

  • Функция seekeoln(ФайловаяПеременная) аналогична функции eoln, но в отличие от нее, пропускает пробелы и позиции табуляции перед проверкой на конец строки. Функцию можно использовать только для открытых текстовых файлов.

  • Функция seekeof(ФайловаяПеременная) аналогична eof, но пропускает пробелы, позиции табуляции и маркеры конца строки перед проверкой на конец файла. Функцию можно использовать только для открытых текстовых файлов.

Обратите внимание — функции seekeof и seekeoln удобно использовать при чтении числовых данных из текстового файла, когда необходимо пропустить разделяющие числа пробелы или знаки табуляции (см. листинг ).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]