Файлом называется последовательность данных, размещаемая на внешнем запоминающем устройстве и рассматриваемая в процессе чтения-записи как единое целое.
Порядок работы с файлами:
1. Описать тип файловой переменной, например f :
var
var
var
f : File of type;
f : Text;
f : File;
Тип File описывает линейную последовательность компонент указанного типа. Тип файла Text означает файл, состоящий из строк символов.
2. Осуществить связь файловой переменной с именем файла – команда Assign(f). Одновременно в программе может быть открыто несколько десятков файлов, каждый из которых должен иметь свою файловую переменную.
3. Открыть файл – командой Rewrite(f) для записи во вновь создаваемый файл или Reset(f)для чтения/записи уже имеющегося файла. Если открывается существующий текстовый файл, то используем команду Append(f).
4. Осуществить чтение/запись в файл – команды Read/Writeсоответственно (для построчной работы с текстовыми файлами можно использовать ReadLn/WriteLn). Например, команда записи выглядит следующим образом: Write(f, а), где f – файловая переменная; а – переменная любого типа (byte, real, string и т. д., соответствующая типу файла). При обращении к командам Read/Writeпозиция чтения/записи в файле автоматически увеличивается на единицу.
5. Закрыть файл – команда Close(f).
Пример:
Var
f: text;
Begin
Assign(f, 'TEST.TXT'); { Cвязываем файловую переменную f } { c именем файла 'TEST.TXT' }
Rewrite(f); { Создаем новый файл }
WriteLn(f,'Исходный текст'); { Записываем строку в файл }
Связывает внешний файл с именем name и переменную файлового типа f. Все дальнейшие операции с переменной f будут выполняться с указанным внешним файлом.
Procedure Close(var f);
Закрывает открытый файл, связанный с переменной f.
Function Eof(var f) : Boolean;
Показывает значение Истина (True) при наличии признака конца файла для типизированных или нетипизированных файлов, указываемых файловой переменной f.
Function FilePos(var f) : Longint;
Показывает текущую позицию в файле, указываемом переменной f. Если эта позиция в конце файла, то функция возвращает значение, равное длине файла, а если в начале файла, значение 0.
Function FileSize(var f) : Longint;
Показывает текущий размер файла f в байтах. Если файл пуст, то 0.
Procedure Reset(var f [ : file; RecSize : Word ] );
Открытие существующего файла. Имя внешнего файла, связанного с f, должно быть ранее определено. Необязательный параметр RecSize: размер записи нетипизированного файла.
Procedure Rewrite(var f : file [;RecSize : Word ] );
Создает и открывает новый файл. Если такой файл уже есть, то он удаляется и создается новый с тем же именем.
Procedure Seek(var f; n : Longint);
Перемещает текущую позицию файла к элементу с номером n (не может быть использована для текстовых файлов, первая позиция равна 0).
Procedure Truncate(var f);
Усекает размер файла f до текущей позиции в файле.
Ниже приведен пример программы, которая открывает сразу два файла (один для чтения, а второй создает вновь для записи). Командой Readln(f1,s);из первого файла считывается строка s. В цикле For организуется доступ к ее отдельным символам и производится замена буквы k на K. Затем преобразованная строка сохраняется во втором файле. Считывание строк проводится в цикле Repeat–Until и завершается при нахождении конца первого файлаEof(f1).
Var
f1,f2:text;
s:string;
i:byte;
Begin
Assign(f1, 'text.txt');
Assign(f2, 'text_new.txt');
Reset(f1);
Rewrite(f2);
Repeat
Readln(f1, s);
for i:=1 to Length(s) do
if s[i]='k' then s[i]:='K';
WriteLn(f2, s);
Until Eof(f1);
Close(f1);
Close(f2);
End.
Следующая программа выполняет ту же функцию, однако доступ к элементам файла значительно упрощен. Это достигается за счет иного описания структуры файла. В данном случае тип того же файла задан как символьный, что позволяет использовать только один цикл.