Здавалка
Главная | Обратная связь

Типізовані файли. Текстові файли. Нетипізовані файли



 

Питання для вивчення:

1. Типізовані файли.

2. Файли, що не типізуються.

3. Опис файлів, що не типізуються.

4. Призначення файлів, що не типізуються.

5. Відкриття і закриття файлу, що не типізується.

6. Запис і читання нетипізованого файлу.

7. Пошук у файлі, що не типізується

 

Типізовані файли в Паскаль. Типізований файл - це файл, в якому містяться однотипні дані. Типізований файл задається за допомогою 2-х ключових слів «file of». Після слова «of» вказується тип файлу, наприклад integer, real, char, string і т.д. Тип файлу може бути будь-яким за винятком файлового типу (не може бути файла файлів) і комбінованого типу, один з компонентів якого має файловий тип. На відміну від текстових файлів, в типізований файл інформація зберігається в двійковому представленні (в текстовому файлі інформація зберігається у вигляді ланцюжка символів). Даний факт дозволяє виробляти читання і запис в файл більш швидким способом, тому відсутня необхідність в перетворенні даних. Крім того, у типізовані файли можливий прямий доступ до записів файла (в текстовому файлі можливий тільки послідовний доступ). Напишемо програму, яка створить своєрідну базу даних, що зберігає відомості про студентів: їх іменах, номерах курсу і груп.

Типізовані файли в Паскаль.

Program file11;

uses crt;

Type Student = record

fio: string [20];

kurs, group: integer;

end;

var zap: student;

f: file of student;

name: string;

begin

clrscr;

Writeln ('Задайте ім'я файлу');

Readln (name);

Assign (f, name);

Rewrite (f);

Writeln ('Введіть прізвище та ініціали студента');

Readln (zap.fio);

While zap.fio <> '' do

Begin

Writeln ('Введіть номер курсу і групи');

Readln (zap.kurs, zap.group);

Write (f, zap);

Writeln ('Введіть прізвище та ініціали наступного студента');

Readln (zap.fio);

End;

Close (f);

Writeln ('Файл створений');

readln

End.

Рядок № 3 - № 6. Оголошуємо в програмі тип Record і вказуємо для нього компоненти. Перший компонент «fio» (рядок № 4) буде описувати прізвище та ініціали студента. Компоненти «kurs» і «group» будуть описувати відповідно номер курсу і номер групи. Рядок № 7. Оголошуємо змінну «zap» і вказуємо для неї тип «Student». Тепер за допомогою змінної «zap» ми можемо звернутися до будь-якого компонента запису. Рядок № 8. Створюємо файлову змінну «f» і вказуємо для неї тип «Student». Таким чином, ми створюємо файл записів, де буде зберігатися інформація про студентів. У рядку № 9 створюємо змінну «name», яка знадобиться нам для створення імені файлу. Рядок № 13. Вводимо з клавіатури ім'я файлу. Це ім'я буде записано в змінну «name». Рядок № 14. Пов'язуємо файлову змінну «f» з ім'ям файлу. Як і у випадку з текстовими файлами зв'язування файлової змінної з файлом проводиться за допомогою процедури Assign Рядок № 15. Відкриваємо файл для запису. Відкриття типизированного файлу для запису проводиться аналогічно текстовим файлам за допомогою процедури Rewrite. Так як самого файлу не існує, він буде створений автоматично і буде мати ім'я, яке ми поставили в рядку № 13. Рядок № 17. Після виведення на екран повідомлення (рядок № 16) ми вводимо значення для 1-ого компонента запису (прізвище та ініціали студента). Рядок № 18. Записуємо цикл. До тих пір поки не буде введено порожнє значення для компонента «zap.fio» необхідно виконувати дії, записані в рядках № 20 - № 24. Знак <> означає нерівно. Після цього знаку в апострофах записується значення, якому не повинен бути рівний компонент «zap.fio». Усередині апострофів ми ставимо знак пробілу. Таким чином, цикл буде виконуватися доти, поки замість прізвища чергового студента не буде натиснута клавіша «пробіл». У циклі будуть виконуватися по черзі 4 дії. Рядок № 20. Виводимо на екран повідомлення. Рядок № 21. Вводимо з клавіатури через пропуск номер курсу і номер групи. Рядок № 22. У файлову змінну «f» заносимо вміст запису «zap». Рядок № 23. Виводимо на екран повідомлення. Рядок № 24. Вводимо з клавіатури прізвище та ім'я студента. Ці рядки будуть повторюватися в циклі, поки на пропозицію ввести прізвище та ініціали студента ми просто натиснемо пробіл. Після цього файл буде закритий (рядок № 26) та на екран буде виведено повідомлення (рядок № 27).

Файли, що не типізуються. Головна перевага файлів, що не типізуються, - це висока швидкість їх обробки. Відкрити як що не типізується можна і файл будь-якої іншої природи: що текстовий або бінарний типізується. В основному це застосовується в тих випадках, коли потрібно копіювати досить великий шматок одного файлу в іншій без змін.

Опис файлів, що не типізуються. У розділі var файлові змінні, призначені для роботи з файлами, що не типізуються, описуються таким чином:

var g: file;

Ніяка файлова змінна не може бути задана константою.

Призначення файлів, що не типізуються. З цієї миті і до кінця розділу під словом "файл" ми розуміємо "бінарний файл, що не типізується" (зрозуміло, якщо спеціально не обумовлене інше).

Команда assign(f,'<имя_файла>'); служить для встановлення зв'язку між файловою змінною f і ім'ям того файлу, за роботу з яким ця змінна відповідатиме.

Рядок '<имя_файла>' може містити повний шлях до файлу. Якщо шлях не вказаний, файл вважається розташованим в тій же директорії, що і виконуваний модуль програми.

Відкриття і закриття файлу, що не типізується. Залежно від того, які дії ваша програма збирається проводити з файлом, що відкривається, можливе двояке його відкриття:

- reset(f[,size]); - відкриття файлу для прочитування з нього інформації і одночасно для запису в нього (якщо такого файлу не існує, спроба відкриття викличе помилку). Ця ж команда служить для повернення покажчика на початок файлу;

- rewrite(f[,size]); - відкриття файлу для запису в нього інформації; якщо такого файлу не існує, він буде створений; якщо файл з таким ім'ям вже є, що вся містилася в нім раніше інформація зникне.

Необов'язкова змінна size може задати кількість байтів, що одноразово прочитуються з файлу, що не типізується, або записуваних в нього. За умовчанням розмір таких "шматків" приймається рівним 128 байт.

Закриваються файли, що не типізуються, процедурою close(f), загальною для всіх типів файлів.

Запис і читання нетипізованого файлу. Для здійснення запису у файл, що не типізується, і прочитування з нього застосовуються дві спеціальні процедури blockread() і blockwrite().

Процедура blockread(f:file; buf,count:word [;result:word]) призначена для прочитування з файлу f декількох елементів разом (їх кількість указується в змінній count, а довжина встановлюється під час відкриття файлу) за допомогою буфера обміну даними buf. Необов'язкова змінна result може зберігати кількість елементів, фактично лічених з файлу.

Процедура blockwrite(f:file; buf,count:word [;result:word]) проводить запис даних у файл, що не типізується, за допомогою буфера buf.

Пошук у файлі, що не типізується. Всі підпрограми, описані в розділі "Пошук у файлі", що типізується, працюватимуть і для файлу, що не типізується:

Функція eof(f:file):boolean повідомляє про досягнутий кінець файлу. Решта всіх функцій "пошуку кінця" (eoln(), seekeof() і seekeoln()), властивих текстовим файлам, не можна застосовувати до файлів що типізується.

Існують спеціальні підпрограми, які дозволяють працювати з файлами, що типізуються, як із структурами прямого доступу:

- Функція filepos(f:file):longint повідомить поточне положення покажчика у файлі f. Якщо він указує на самий кінець файлу, N елементів, що містить, то ця функція видасть результат N. Це легко з'ясовно: елементи файлу нумеруються починаючи з нуля, тому останній елемент має номер N-1. А номер N належить, таким чином, "неіснуючому" елементу - ознаці кінця файлу.

- Функція filesize(f:file):longint обчислить довжину файлу f.

- Процедура seek(f:file,n:longint) пересуне покажчик у файлі f на початок запису з номером N. Якщо опиниться, що n більше фактичної довжини файлу, то покажчик буде пересунутий і за реальний кінець файлу.

- Процедура truncate(f:file) обрізатиме "хвіст" файлу f: всі елементи починаючи з поточного і до кінця файлу будуть з нього видалені. На самій же справі відбудеться лише переписування ознаки "кінець файлу" в те місце, куди указував покажчик, а фізично "відрізані" значення залишаться на колишніх місцях - просто вони стануть "безгоспними".

Але, оскільки тип елементів файлу, що не типізується, не визначений, то розмір одного "елементу" приймається рівним 128 байт (за умовчанням) або вказаному в змінній size під час відкриття файлу.

Питання для контролю вивченого матеріалу:

1. Що являють собою типізовані файли?

2. Що таке нетипізований файл?

3. Як виконується пошук у нетипізованому файлі?

4. Як виконується запис/зчитування у нетипізованому файлі?

5. Які файли називаються бінарними?

6. Що таке нетипізований файл?

7. Які є переваги використання нетипізованого файлу?

Література:

Меженний О.А.Turbo Pascal: М: Издательский дом «Вильямс», 2006. – 336 с., стор. 128-134

 

Урок № 37

(згідно робочої навчальної програми)







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.