- •Передмова
- •Тема 1: Правила техніки безпеки при роботі з комп’ютером
- •Тема 2: Алфавіт. Ідентифікатори. Константи. Вирази
- •Тема 3: Загальна структура і розділи Pascal-програми
- •Тема 4: Введення і виведення у Pascal-і. Форматоване виведення
- •Тема 5: Прості (скалярні) типи данних
- •Тема 6: Завантаження середовища Турбо Паскаль. Функціональні клавіші
- •Тема 7: Меню опції
- •Тема 8: Вираження і пріоритет операцій. Стандартні математичні функції та процедури
- •Тема 9: Умовний оператор. Вкладений умовний оператор
- •Тема 10: Оператор вибору
- •Тема 11: Оператори циклу. Оператор циклу з параметром
- •Тема 12: Оператор циклу з перед- і з постумовою
- •Тема 13: Складні типи. Масиви
- •Тема 14: Багатомірні масиви
- •Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування
- •Тема 16: Динамічна пам'ять. Адреси і покажчики
- •Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті
- •Тема 18: Процедури та функції для роботи з динамічною пам’яттю
- •Тема 19: Символьний тип даних. Упаковані масиви
- •Тема 20: Процедури та функції для обробки рядків
- •Тема 21: Структурований тип даних - безліч
- •Тема 22: Структурований тип даних – записи
- •Тема 23: Опис файлових змінних. Обробка типізованих файлів
- •Тема 24: Послідовний та прямий доступ до файлів
- •Тема 25: Обробка не типізованих файлів
- •Тема 26: Робота з текстовими файлами
- •Тема 27: Типізовані константи
- •Тема 28: Поняття та робота з процедурами та функціями
- •Тема 29: Використання модуля crt. Програмування клавіатури
- •Тема 30: Використання модуля crt. Текстове виведення на екран. Програмування звукового генератора
- •Тема 31: Графічні можливості tp 7.0. Використання бібліотеки Graph
- •Тема 32: Бібліотечні модулі користувача
- •Тема 33: Основні принципи ооп. Створення об’єктів. Використання об’єктів
- •Список літератури
- •Додаток а (довідковий) Основні алгоритми обробки масивів
- •Додаток б (довідковий) Питання перевірки знань з теорії
- •Додаток в (довідковий) Поширені коди клавіш
- •Додаток д (довідковий) Коди сканування клавіатури
Тема 24: Послідовний та прямий доступ до файлів
На відміну від масиву довжина файлу не задається, а місце елемента не визначається індексом. Файл, структурно організований як послідовність елементів, де кожен елемент стає доступним після перебору всіх попередніх елементів, називається послідовним. Файл, збережений на диску, називається зовнішнім чи вхідним файлом. У Pascal-програмі представником файлу є змінна файлового типу, що інтерпретує файл як нескінченний список значень того самого базового типу. Зі змінною файлового типу пов’язане поняття поточного покажчика файлу. Поточний покажчик – це схована змінна, тобто вона неявно описана разом з файловою змінною, і вказує на деякий конкретний елемент файлу. Графічна інтерпретація файлу, пов'язаного з файловою перемінною має вигляд зображений на рис.24.1:
Поточний покажчик
Рисунок 24.1. Графічна інтерпретація файлу
Читання з файлу чи запису у файл виконується поелементно, причому записується чи зчитується той елемент файлу, що позначений поточним покажчиком. При цьому покажчик переміщується, указуючи той чи інший елемент. Всі елементи файлу пронумеровані; перший елемент має нульовий номер.
Компоненти бінарного файлу мають однаковий розмір. Цим зумовлені певні переваги бінарного файлу над текстовим. По-перше, стає можливим прямий доступ до компонентів файлу за їхніми номерами. Під прямим доступом розуміється можливість встановлювати файловий покажчик на заданий компонент без послідовного перебирання попередніх компонентів. По-друге, відкриття бінарного файлу процедурою Reset робить можливим як читання, так і запис довільних компонентів файлу без руйнації його вмісту. Це пояснюється тим, що модифікація кількох компонентів усередині бінарного файлу не призведе до зміни їх розміру, а отже, не потребуватиме зсуву інших компонентів. Нагадаємо, що процедура Rewrite також відкриває бінарний файл у режимі читання і запису, але при цьому вона знищує його вміст (якщо файл уже існував).
Прямий доступ до компонентів бінарного файлу в мові Pascal здійснюється за допомогою процедур та функцій, наведених у табл. 24.1.
Таблиця 24.1. Процедури та функції прямого доступу до компонентів файлів
Ім'я функції або процедури |
Призначення |
Seek(var f; n: Longint); |
Переміщує файловий покажчик на компонент з номером n. Файл f має бути відкритий |
Truncate(var f); |
Видаляє всі компоненти файла f від поточного компонента до кінця файла |
FilePos(var f): Longint; |
Повертає номер запису, на який посилається файловий покажчик |
FileSize(var f): Longint; |
Повертає кількість компонентів файла f |
Треба взяти до уваги, що процедури Seek, Truncate і функція FilePos не працюють з текстовими файлами.
Приклад 1
Обчислити кількість компонентів в файлі дійсних чисел, вивести вміст файлу на екран.
var
f: file of real;
a: real;
i: word;
begin
assign(f, ’abc.dat’);
reset (f);
writeln(‘в файлі ’,filesize(f), ‘ чисел’);
for i:= 1 to filesize(f) do
begin
read(f, a);
write(a, ‘ ’);
end;
close(f);
end.
Приклад 2
В файлі цілих чисел поміняти місцями максимальний та мінімальний елементи.
var
f: file of integer;
a, i, max, nmax, min, nmin: integer;
begin
assign(f, ’abc.int’);
reset (f);
for i:= 1 to filesize(f)-1 do
read(f, a);
if i=0 then
{початкове привласнення максимального}
{і мінімального значень і їх індексів}
begin
max:=a; nmax:= i;
min:=a; nmin:=i;
end
else
begin
{порівняння поточного значення з максимальним (мінімальним)}
if max<a then
begin
max:=a;
nmax:= i;
end;
if min >a then
begin
min:=a;
nmin:=i;
end
end
end;
{перезапис максимального і мінімального значень у файл}
seek(f, nmax);
write(f, min);
Seek(f,nmin);
write(f,max);
end.
Питання для контролю.
-
В чому різниця між прямим та послідовним доступом до файлу?
-
Які функції здійснюють прямий доступ?
-
Які процедури здійснюють прямий доступ?
-
Які з перелічених процедур і функцій не можна використовувати для текстових файлів?