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

Типовані файли

Довжина будь-якої компоненти типованого файла є величиною постійною, це дає змогу організувати прямий доступ до кожної з них. Перед першим звертанням до процедур введення-виведення вказівник файла стоїть на початку і вказує на перший компонент з номером 0. Після кожного читання або запису вказівник зсувається до наступної компоненти файлу. Змінні у списку введення-виведення повинні мати той самий тип, що і компоненти файла. Якщо цих змінних у списку кілька, вказівник буде зміщуватися після кожної операції обміну даними між змінними і дисковим файлом.

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

Процедури і функції для роботи з типованими файлами

Процедура читання Read(f , <список змінних>) забезпечує читання чергових компонентів типованого файлу. Тут f файлова змінна, яка повинна бути оголошена реченням FILE OF і зв’язана з ім’ям файла процедурою ASSIGN. Файл необхідно відкрити процедурою Read. <ім’я файлової змінної> – список виведення, що містить один чи більше виразів того самого типу, що і компоненти файлу. При зчитуванні у кожну змінну із списку процедури Read вказівник поточної позиції у файлі переміщується на наступний елемент.

Процедура запису Write(f , <список змінних>). При запису кожної змінної вказівник поточного запису переміщується на наступний елемент.

Для роботи з прямим методом доступу призначені такі процедури та функції:

  • функція FilePos(f)-повертає значення типу LONGINT, що містить порядковий номер поточної позиції вказівника у файлі, який буде оброблятися наступною операцією введення-виведення Перша компонента файла має порядковий номер 0;

  • функція FileSize(f)-повертає значення типу LONGINT, що містить кількість компонентів файлу ( поточний розмір файла);

  • процедура Seek(f,номер компоненти) – переміщує вказівник поточної позицї у файлі на елемент із заданим номером. Номер компоненти-вираз типу LONGINT, який вказує номер компоненти файла. Перша компонента файла має номер 0.

Приклад. Необхідно створити програму, яка забезпечувала створення файлу “Телефонний довідник”, введення та зміни даних, пошук телефону за прізвищем абонента.

Program BookPhone; {Телефонний довідник}

Uses crt;

Type RecBook=Record { Запис відомостей про абонента}

Fio: string[20]; {Прізвище}

Phone: string[10]; {Номер телефону}

End;

var

BookFile: file Of RecBook; { Змінна для файла із записами RecBook}

Work: RecBook; {Змінна для доступу до запису}

Vid: byte;

End_menu: Boolean;

Name: string[12];

Procedure Create_Book_Phone; {Створення нового файла даних }

Var Inf, Count: integer;

Begin

Clrscr;

Write(‘ Введіть ім’я файла даних телефонного довідника: ’);

Readln(Name);

Assign(BookFile,Name); {Відкрити новий файл для запису}

Rewrite(BookFile);

Writeln (‘Створення записів файла ’,Name);

Write(‘Введіть кількість записів у довіднику ’ );

Readln(Count);

For Inf:=1 to count do

With Work do

Begin

Write(‘Введіть прізвище: ’ );

Readln(Fio); {Введення прізвища}

Write(‘Введіть номер телефону: ’ );

Readln(Phone); {Введення номеру телефону}

Write(BookFile,Work); {Запис у файл значення змінної Work: прізвище і номер телефону }

End;

Writeln (‘Створення файла даних телефонного довідника закінчено ‘);

Writeln (‘Файл даних містить ‘,FileSize(BookFile),’ записів ‘);

Close(bookFile);

End;

Procedure OutputAllRec; { Виведення усіх записів файла на екран}

Begin

Clrscr;

Write(‘ Введіть ім’я файла даних телефонного довідника:‘);

Readln(Name);

Assign(BookFile,Name);

{$I-} { Відключення стандартної обробки помилок}

Reset(BookFile);

{$I+} {Включення стандартної обробки помилок}

If Ioresult=0 then

begin

Seek(BookFile,0); {Установка на перший запис}

Writeln(‘ *** Виведення телефонного довідника з файла ‘,Name, ‘ ***‘);

While(not Eof(BookFile)) do

Begin

Read(BookFile,Work);

With Work do

Writeln(‘ № ‘, FilePos(BookFile),’ : ’, ‘Прізвище ‘,Fio,’Телефон ‘,Phone);

End;

End

Else

Write(‘Файла з ім’ям ‘+Name+’ на диску немає ‘);

End;

Begin {Основна програма}

End_Menu:=False;

Repeat {Повторювати показ меню, доки End_Menu=False}

Clrscr;

Writeln(‘*** Телефонний довідник ***’);

Writeln(‘Виберіть вид роботи ‘);

Writeln(‘1-створення нового файла‘);

Writeln(‘2-перегляд списку довідника‘);

Writeln(‘0-завершення роботи‘);

Writeln(‘ Ваш вибір: ‘);

Readln(Vid);

Case Vid of {Виклик різних процедур в залежності від виду роботи}

1: Create_Book_Phone;

2: OutputAllRec;

0: End_Menu:=True;

End;

Writeln(‘Для продовження натисніть Еnter’);

readln;

Until end_menu; {Більше не виводити меню}

End.

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