Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка DELPHI.DOC
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

Файловые типы

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

  1. Данные в файле располагаются в виде строк разной длины. Каждая строка заканчивается двумя символами 13 10 (#13 – возврат каретки, #10 – переход строки). Эти символы отделяют строки друг от друга. Максимальный размер строки ограничен, чаще всего он равен 128 символов, можно увеличить этот размер до максимального, равного 255 символам. При поиске нужной информации в таком файле необходимо найти 13 10, прочитать найденную строку и проверить, есть ли заданная информация в этой строке, затем опять следует искать 13 и 10 и т.д. Таким образом, поиск может осуществляться, последовательно читая этот файл только сначала, т.е. файл рассматривается как один массив строк, разделенных символами 13 10. Если нужно вставить информацию в середину такого файла, то это можно сделать путем переписывания старого файла в новый со вставкой новых строк и последующим удалением старого файла. Операционная система допускает дописывание информации в конец файла. В соответствии со свойствами, такой файл называют файлом последовательного доступа или текстовым.

  2. Данные представляются в виде записей одинаковой длины. Никаких разделителей между записями нет. Операционная система может расположить головку считывания-записи информации на любой байт (установить файловый указатель). Так как все записи одинаковой длины, файловый указатель операционной системой может быть установлен на начало любой записи, таким образом, получается, что все записи будто бы пронумерованы. Первая запись нумеруется числом 0. Если длина записи равна 80 байт, то установку файлового указателя на начало второй записи (запись с номером 1) операционная система выполняет на отметке 80 байт. Эту запись можно прочитать или перезаписать. Такие файлы являются типизированными - файлами прямого доступа (в отличие от текстовых файлов).

  3. В данном случае файлы рассматриваются как последовательность байт. Эти файлы являются файлами прямого доступа с длиной записи, чаще всего, равной 1 байту. С помощью такого подхода можно прочитать любой файл, но трудно интерпретировать информацию.

При работе с файлами автоматически проверяются ошибки ввода или вывода, если включена (по умолчанию) директива {$I+}. В этом случае при возникновении ошибки программа завершается. Если директива проверки файловых ошибок отключена {$I-}, то программа продолжает выполняться и можно проверить результат работы с файлом с помощью стандартной функции IOResult.

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

Этот тип файлов объявляется с помощью файловой переменной типа TextFile: Var T : TextFile;

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

AssignFile(<ф.п.>, Name);,

где ф.п. – файловая переменная, Name – строка типа String, содержащая имя файла, например, AssignFile(T, ‘a.txt’);

Строка Name может содержать не только имя файла, но и путь к файлу.

По окончании работы с файлом его нужно закрыть процедурой CloseFile(<ф.п.>) Это требование обязательно должно соблюдаться для файлов, в которые записывалась информация. С помощью файлов можно вводить информацию в память, хранить информацию, передавать её от одних программных единиц к другим. Для чтения и записи информации используются встроенные стандартные процедуры.

Перед чтением информации необходимо явно указать, что файл будет использоваться только для чтения с помощью процедуры Reset(<ф.п.>) – эта процедура устанавливает файловый указатель на начало файла. Чтение информации осуществляется с помощью следующих процедур:

Read(<ф.п.>, <список>);

ReadLn(<ф.п.>, <список>);

Вторая процедура помогает полностью читать строку вместе с символами 13 10. Первая процедура читает элемент или несколько элементов строки, но в пределах одной строки. Например, Read(Т, a, b, c); ReadLn(T, a, b, c);

Если a, b, c – строковые переменные, то первый оператор заполнит данными только одну переменную a (b и c останутся пустыми).

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

При чтении чисел автоматически происходит перекодирование информации в двоичный код. Если элементы не строковые, то в переделах одной строки файла может находиться несколько элементов, обязательно отделенных друг от друга разделителями. В качестве разделителей используются следующие символы: пробел, символ табуляции, возврат каретки (13). При подготовке информации необходимо соблюдать эти требования – записывать в явном виде разделители. Процедуры Read и ReadLn читают информацию последовательно по одному символу (в том числе читаются 13, 10 и 26 - конец файла), причём, если чтение происходит не в строковые переменные, то значимыми для Read являются все виды разделителей, а для ReadLn – только #13 и #10. Например, при чтении информации в строковые переменные String или PChar заносятся очередные символы до 13 и 10.

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

При записи информации необходимо для файла задать явно режим записи. Для текстовых файлов режим записи задается одновременно с режимом создания нового файла. При этом используется процедура Rewrite(<ф.п.>). Если файл, указанный в соответствующей процедуре AssignFile существует, то он уничтожается и создаётся новый. Запись информации в файл осуществляется процедурами Write(<ф.п.>, <список>) или WriteLn(<ф.п.>, <список>). Write записывает очередной элемент строки, WriteLn – записывает строку вместе с 13 и 10. В отличие от процедур чтения, в списке можно указывать не только переменные, но и выражения. Если элементы числовые, то в списке необходимо явно предусматривать разделители между этими элементами. Например,

WriteLn(T,‘число а=’,а,’ ’,‘число b=’,b);