Лекция 26.ppt
- Количество слайдов: 17
Типизированные файлы, их назначение и использование. Основные процедуры обработки типизированных файлов Лекция 26
Типизированный файл состоит из последовательности элементов одного типа и длины. Каждый элемент файла имеет номер. Первый элемент считается нулевым. Все элементы файла имеют одинаковую длину, позиция каждого элемента легко вычисляется. Поэтому указатель может быть перемещен на любой элемент файла, обеспечивая тем самым прямой доступ к нему. Фактически типизированный файл — это массив на диске с неограниченным размером и сравнительно невысокой скоростью обработки.
Объявление типизированных файлов в программе осуществляется заданием файловой переменной вида file of тип где тип — любой тип, кроме файлов type Имя. Типа = file of Тип; var Файловая. Переменная : Имя. Типа; или var Файловая. Переменная : file of Тип;
Процедуры обработки типизированных файлов Открытие типизированного файла можно произвести стандартными способами: используя reset и rewrite. Процедура reset применяется для открытия существующего файла. Процедура rewrite используется для создания нового файла и его открытия. типизированные и нетипизированные файлы всегда допускают одновременно как чтение, так и запись, независимо от того, были ли они открыты с помощью reset или rewrite; для чтения и записи типизированного файла используются только процедуры read и write. Использование readln и writeln — запрещено.
READ (ф. п. , сп. ввода) Обеспечивает чтение очередных компонентов типизированного файла. Здесь cn. вводa — список ввода, содержащий одну или более переменных такого же типа, что и компоненты файла. WRITE (ф. п. , сп. вывода) Используется для записи данных в типизированный файл. Здесь сп. вывода — список вывода, содержащий одно или более выражений того же типа, что и компоненты файла. filepos (ф. п. ) Функция, возвращает значение типа LONGINT, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода.
filesize (ф. п. ) Функция, возвращает число элементов файла. Если файл пуст, она возвращает 0. Результат — longint. seek (ф. п. , Номер. Позиции) Перемещает указатель файла с текущей позиции к позиции с указанным номером, не выполняя чтение или запись. Номер. Позиции имеет тип longint. truncate (ф. п. ) Усекает размер файла до его текущей позиции. Все элементы файла за текущей позицией удаляются, после чего текущая позиция становится концом файла.
Пример: Разработайте программу ведения файла, содержащего следующие данные о студентах: • Фамилия и инициалы. • Номер группы. • Оценка на экзамене. В программе должны быть реализованы следующие функции, вызываемые из меню: • ввод записей; • корректировка записей; • удаление записей; • просмотр записей на экране.
type stud=record {Запись, элемент файла} FIO: string[25]; Ngr: string[4]; Ocen: 0. . 10; end; var FStud: file of Stud; {Файловая переменная} S: stud; f: boolean; k: byte;
procedure Vvod. Zap; {Процедура ввода (добавления) записей} var S: Stud; ch: char; i: integer; begin if f=false then {Если файл еще не создан} begin rewrite(fstud); {Создаем его} f: =true; {Признак существования файла} end else begin reset(Fstud); {Открываем его} seek(Fstud, filesize(Fstud)); {Переводим указатель в конец файла}
with S do {Все последующие действия выполняются с записью S} while ch<>'n' do {Пока пользователь не прекратит ввод} begin writeln(‘Введите данные'); writeln(‘Введите ФИО студента'); readln(FIO); writeln(‘Введите номер группы'); readln(Ngr); writeln(‘Введите оценку на экзамене'); readln(Ocen); write(fstud, S); {Записываем S в файл} writeln(‘Продолжить ввод (y/n)'); readln(ch); end; close(Fstud); {Закрываем файл} end;
procedure prosmotr; {Просмотр и вывод содержимого файла} var S: Stud; begin if not f then writeln(‘Файл не создан') else begin reset(Fstud); if filesize(Fstud)=0 then writeln(‘Файл пуст'); while not EOF(Fstud) do begin read(Fstud, S); {считываем элемент из файла в переменную S} writeln(S. FIO: 27, S. Ngr: 7, S. Ocen: 3); end; close(fstud); end;
procedure korrect; {Процедура корректировки данных} var S: Stud; n: integer; begin if not f then writeln(‘Файл не создан') else begin reset(Fstud); writeln(‘Введите номер записи'); readln(n); writeln(‘Введите ФИО студента'); readln(S. FIO); writeln('Введите номер группы'); readln(S. Ngr); writeln(‘Введите оценку на экзамене'); readln(S. Ocen); seek(Fstud, n-1); {Перевести указатель на элемент предшествующий n} write(Fstud, S); {Записать новую информацию} close(Fstud); end;
procedure udalenie; {Процедура удаления элемента} var i, n, m: integer; Fstud 1: file of Stud; S: Stud; begin if not f then writeln(‘Файл не создан') else begin writeln(‘Введите номер записи'); readln(n); reset(Fstud); m: =filesize(Fstud); {Количество записей в файле} if m>=n then {Если такая запись существует} begin assign(Fstud 1, 'stud 1. dat'); rewrite(Fstud 1); {Создаем новый файл} for i: =0 to n-2 do begin {Переписываем первые n-1 записей в новый файл} read(Fstud, S); write(Fstud 1, S); end;
seek(Fstud, n); {Переводим указатель на n+1 элемент} for i: =n to m-1 do begin {и переписываем все элементы после него} read(Fstud, S); write(Fstud 1, S); end; close(Fstud); {Закрываем оба файла} close(Fstud 1); erase(Fstud); {Удаляем исходный файл} rename(Fstud 1, 'stud. dat'); {Переименовываем новый файл} end Else {Если записи с таким номером нет} writeln(‘Записи с таким номером нет'); end;
begin assign(f. Stud, 'stud. dat'); {$I-} {Отключаем контроль ввода-вывода} reset(Fstud); {Пытаемся открыть файл на чтение} {$I+} {Включаем контроль ввода-вывода} If Ioresult=0 then {Если файл существует} f: =true {Признак того, что файл существует} else f: =false; {Файла нет} while k<>5 do {Организуем меню} begin writeln('1. Ввод записей'); writeln('2. Корректировка записей'); writeln('3. Удаление записей'); writeln('4. Просмотр записей'); writeln('5. Выход');
readln(k); case k of 1: vvodzap; 2: korrect; 3: udalenie; 4: prosmotr; else writeln(‘В меню нет такого пункта'); end; end.
Домашнее задание • 1. Составить опорный конспект лекции по теме «Типизированные файлы, их назначение и использование. Основные процедуры обработки типизированных файлов» на основе презентации. • 2. Программирование на языке Pascal. Рапаков Г. , Ржеуцкая С. Ю. СПб. : БХВ-Петербург, 2004, cтр. 316 -336.