Лабораторная работа № 9. Программирование с использованием файлов

Цель работы:изучение приемов и средств, обеспечивающих хранение данных на дисках и их обработку

Объем работы: 2 часа

Теоретическая часть

Различают файлы трех типов: текстовые, типизированные и нетипизированные.

Текстовый файл – это файл, компонентами которого являются символьные строки переменной длины, заканчивающиеся специальным маркером конца строки (рис. 1).

Лабораторная работа № 9. Программирование с использованием файлов - student2.ru

Рис. 1. Структура текстового файла

Типизированный файл – это файл, все компоненты которого одного типа, заданного при объявлении файловой переменной (рис. 2). Компоненты файла хранятся на диске во внутреннем (двоичном) формате и нумеруются с 0. Если посмотреть такой файл любым текстовым редактором, то можно распознать только символьную информацию, на месте же чисел в файле будут располагаться пробелы или символы псевдографики.

Лабораторная работа № 9. Программирование с использованием файлов - student2.ru

Рис. 2. Типизированный файл

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

Процедура Read[Ln]([Var f:text;]v1,v2,...vn) – обеспечивает ввод из файла символов, строк и чисел. Список ввода представляет собой последовательность из одной или более переменных типа CHAR, STRING, а также любого целого и вещественного типа. при отсутствии файловой переменной ввод осуществляется из стандартного файла INPUT. Процедура ReadLn – также обеспечивает ввод символов, строк и чисел, но после чтения последней переменной оставшаяся часть строки до маркера конца строки пропускается, так что следующее обращение к ReadLn или Read начнется с первого символа новой строки. Процедура может быть вызвана без указания списка ввода, что приведет к пропуску всех символов текущей строки до маркера конца строки.

Процедура Write[Ln]([Var f;]v1,v2,...,vn) – обеспечивает вывод данных в текстовый файл или передачу их на логическое устройство. Список вывода – последовательность из одного или более выражений типа CHAR, STRING, BOOLEAN, а также целого или вещественного типов. При выводе числовых значений последние преобразуются в символьное представление. Процедура WriteLnпри вызове обеспечивает запись маркера «конец строки».

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

ААААА

BBBBB

C

DDDDDDDDDDDDDDDDDDDDD

EEEEEEEEEEEEEE и т.д.

Program form_text_file;

{$APPTYPE CONSOLE}

Uses SysUtils;

Var f:text;{файловая переменная для текстового файла}

a:char; n,i:integer; fname,st:string[30];

Begin

WriteLn('Введите имя файла');

ReadLn(fname);

AssignFile(f,fname);{инициализируем файловую

переменную}

ReWrite(f); {открываем файл для записи}

Randomize; {инициализируем датчик случайных чисел}

for a:='A' to 'Z' do {формируем строки}

Begin

st:='';

n:=random(30)+1;

for i:=1 to n do st:=st+a;

WriteLn(f,st); {записываем строку в текстовый

файл}

WriteLn(st);{а также – выводим ее на экран}

end;

CloseFile(f);{закрываем файл}

End.

Для работы с типизированными файлами используют специальные процедуры и функции:

1. Процедура Read(Var f;c1,c2,...,cn) – осуществляет чтение очередных компонентов типизированного файла. Список переменных ввода содержит одну или несколько переменных того же типа, что и компоненты файла, разделенных запятыми. Если файл исчерпан, обращение к процедуре вызывает ошибку ввода-вывода.

2. Процедура Write(Var f;c1,c2,...,cn) – осуществляет запись данных в типизированный файл. Список вывода содержит одно или более выражений того же типа, что и компоненты файла, разделенных запятыми.

Пример 2. Разработать программу, которая создает типизированный файл, содержащий список фамилий и даты рождения. Осуществить поиск в этом файле даты рождения по заданной фамилии.

Program ex;

{$APPTYPE CONSOLE}

Uses SysUtils;

Type fam=record {тип запись «сведения о сотрудниках»}

ff:string[20]; {фамилия}

year:word; {год рождения}

month:1..12;{месяц рождения}

day:1..31 {день рождения}

end;

Var f:file of fam; {файловая переменная «файл

сотрудников»}

fb:fam;

n,i:integer;

fff:string;

key:boolean;

Begin

AssignFile(f,'a.dat'); {связываем файловую

переменную с файлом}

ReWrite(f);{открываем файл для записи}

WriteLn('Enter data or CTRL-Z');

while not EOF do {цикл, пока не введено CTRL-Z}

Begin

ReadLn(fb.ff,fb.year,fb.month, fb.day);

{вводим данные по полям, фамилию вводим в

отдельной строке, так как ввод строки завершается

нажатием клавиши Enter}

Write(f,fb); {заносим запись в файл как один

компонент}

end;

CloseFile(f); {закрываем файл}

WriteLn('Enter family');

Readln(fff);

key:=false; {устанавливаем признак «запись не

найдена»}

ReSet(f); {открываем файл для чтения}

while (not EOF(f)) and (not key) do {пока не

обнаружен конец файла и не найдена запись}

Begin

Read(f,fb); {читаем запись из файла}

if fb.ff=fff then {если фамилии совпадают, то}

begin {выводим данные}

Наши рекомендации