L15-a.ppt
- Количество слайдов: 30
ФАЙЛИ
Поняття та структура фізичного та логічного файлів Файл – це поіменована область зовнішньої пам’яті, яка містить деяку інформацію. У такому розумінні файл фізично існує в пам’яті ПК, і такий файл називається фізичним. Структура фізичного файлу - це послідовність байт пам’яті носія інформації (жорсткого або гнучкого магнітного диску) байт . . . байт
З іншого боку, файл – одна з багатьох структур даних, що використовується в програмуванні. В такому розумінні файл називають логічним, тобто існуючим тільки в нашому логічному уявленні при написанні програми. Структура логічного файлу – це спосіб сприйняття файлу в програми, що визначається типом даних. Наприклад: File of byte байт . . . байт EOF
Eof – спеціальний символ, що розташовується в кінці файлу (він з’являється при натисканні CTRL + Z, та має код 26 у симв. ASC) File of Char Код Код сим- символу Код символу ЕОF File of integer Ціле зі знаком . . . Ціле зі знаком ЕОF
Логічна структура файлу схожа на структуру масиву. Різниця: - у масиві кількість елементів фіксована, а нумерація елементів виконується відповідно нижньої та верхньої границь, вказаних при оголошенні, він зберігається в оперативній пам’яті ПК; - у файлі кількість елементів у процесі виконання програми може змінюватись, і він може розташуватися в зовнішніх носіях інформації.
Нумерація елементів файлу здійснюється зліва направо, починаючи з нуля (крім текстових файлів). Кількість елементів файлу в кожний момент часу невідома. Визначити довжину файлу за допомогою стандартної процедури.
Класифікація файлів Файли характеризуються двома ознаками · - за типом (логічною структурою) · - за методом доступу до елементів файлу ФАЙЛИ ЗА ТИПОМ ТИПОВІ НЕТИПОВІ ТЕКСТОВІ ЗА МЕТОДОМ ДОСТУПУ ПОСЛІДОВНОГО ДОСТУПУ ПРЯМОГО ДОСТУПУ
ТЕКСТОВІ ПОСЛІДОВНОГО ДОСТУПУ ТИПОВАНІ НЕТИПОВАНІ ПРЯМОГО ДОСТУПУ
Відкриття та закриття файлів Для роботи з деяким фізичним файлом, необхідно спочатку зв’язати його з файловою змінною, за допомогою якої буде здійснюватись доступ до цього фізичного файлу. Зв’язок фізичного і логічного файлів здійснюється процедурою Assign , яка може використовуватись лише для закритого файлу. Assign(f, ‘myfile. dot’); Перший параметр f – файлова змінна ‘myfile. dot’ – ідентифікатор (ім’я фізичного файлу)
Відкриття файлів здійснюються процедурами: 1) Reset (f); Якщо f –текстовий файл, то він буде доступний тільки для читання при послідовному доступі до елементів Якщо f – типований файл, то від буде доступний тільки для читання при послідовному доступі, так і при прямому. При відкритті файлу вказівник поточної позиції файлу встановлюється на початок файлу. Якщо фізичний файл відсутній, вникає помилка виконання.
Процедура 2) Rewrite(f); Створює фізичний файл, ім’я якого зв’язане з файловою змінною f. Якщо такий фізичний файл вже існує, то він знищується, і на його місці створюється новий пустий файл. При відкритті вказівник поточної позиції у файлі встановлюється в його початок.
Процедури та функції Процедура CLOSE(F) – здійснює закриття файлу, ім’я якого зв’язане з файловою змінною F. Функція EOF(F) – повертає значення true, якщо вказівник поточної позиції у файлі F знаходиться на останньому елементі файлу, або якщо файл пустий. У протилежному випадку повертається значення false. Функція 0 RESULT дозволяє проаналізувати результат завершення операції відкриття файлу. Вона повертає результат 0, якщо операція завершилась успішно, і нульовий код помилки.
Типовані файли Всі елементи типованого файлу мають бути одного типу. Типовані файли можуть бути будь-якого типу, крім файлового. Типовані файли допускають як послідовні, так і прямий доступ. При прямому доступі елементи типованих файлів нумеруються, починаючи з нуля.
Процедури і функції для роботи з типованими файлами Читання з типованих файлів здійснюється лише процедурою READ. Одиницею читання (запису) може бути лише змінна того ж типу, що й тип файлу. READ (ім’я файлової змінної, список змінних) При читанні елементу зі списку, вказівник поточної позиції у файлі переміщується на наступний елемент. Якщо вказівник поточної позиції файлу знаходиться на останньому елементі, тобто в кінці файлу (EOF(F) = true), то виконання процедури Read призведе до помилки часу виконання.
Процедури і функції для роботи з типованими файлами WRITE (ім’я файлової змінної, список змінних) При запису кожної змінної із списку у файл, вказівник переміщується на одну позицію Якщо вказівник поточної позиції знаходиться за останнім елементом, тобто кінець файлу (EOF(F) = true) то при виконанні процедури Write, файл розширюється.
Процедури і функції для роботи з файлами прямого доступу : File. Pos (var F): Longint – повертає номер поточної позиції вказівника у файлі (позиції нумеруються від 0). File. Size (var F): Longint – повертає вказівник поточної позиції у файлі на елемент із заданим номером (при рахунку від нуля). Seek (var F; N: Long. Int) – переміщує вказівник поточної позиції у файлі на елемент із заданим номером (при рахунку від нуля) Truncate (var F) – відсікає розмір файлу до поточної позиції. Bсі елементи, що розташовані після поточної позиції у файлі, знищуються і поточна позиція стає його кінцем.
Текстові файли Це особливий вид файлів, що є різновидом файлу типу file of char. Текстові файли не мають прямого доступу. Для опису використовується тип text: Tf: text; У текстових файлах крім ознаки кінця файлу Eof ще використовується ознака кінця рядку EOLN. Ознака Eoln є послідовністю з двох символів – код 13 (повернення каретки) та 10 (переведення рядка).
Текстовий файл являє собою ніби сторінку книги, де в кінці кожного рядка стоїть Eoln. Код символу Код символу EOLN Код EOLN символу ………………… Код символу EOF
Введення і виведення у текстові файли Введення і виведення здійснюється процедурами Read і Write, тільки першим параметром в них вказується файлова змінна: Наприклад Read (f 1, x, y); Writе (f 1, ’x=’, x, ’y=’, B); Readln (f 2, z, c); Writeln (f 2, ’z=’, z, ’c=’, c);
Процедури і функції для роботи з текстовими файлами : SEEKEOLN(var F: Text): boolean – повертає для текстового файлу ознаку кінця рядка (elon); SETTEXTBUF(var F: Text; var Buf) – призначає для текстового файлу буфер введення-виведення; WRITELN- працює як write. Але після запису вказаних у процедурі значень, додатково записує у текстовий файл ознаку кінця рядка eoln.
APPEND(var F: Text) – відкриває існуючий файл для додавання елементів в кінець файлу; READLN – працює так само, як read, але додатково виконує пропуск усіх елементів, що залишилися у поточному рядку і переводить вказівник поточної позиції файлу на початок наступного рядка; SEEKEOF (var F: Text) – повертає для текстового файлу ознаку eof (кінеця файлу).
Нетиповані файли При оголошенні нетипованого файлу вказується лише ключове слово file, наприклад: Var f 1: file; Нетиповані файлові змінні призначені для низькорівневої роботи з файлами. За їх допомогою можна звернутися до файлу будьякого типу і логічної структури так само, як виконувалось звертання до символьного файлу, за допомогою файлової змінної типу byte. На відміну від типованого файлу, нетипований файл не має жорстко встановленої одиниці читання (запису), як типовані файли
У нетипованому файлі за одне звертання запиcується (читається) число байт, що приблизно дорівнює величині буфера введеннявиведення, що прискорює роботу з файлами. Для роботи з нетипованими файлами можна застосовувати майже всі процедури і функції, що і для типованих файлів. Виключення в тому, що замість процедур read і write використовуються процедури Вlock. Read і Block. Write, а процедури Reset і Rewrite можуть мати другий параметр типу Word, що визначає розмір запису, що використовується при передачі даних.
Приклади: 1) створити два файли: типований та текстовий. У типований файл записати елементи масиву А. У текстовий файл – рядок b. 2) обробити типований файл (знайти середнє арифметичне значення додатних елементів масиву А). 3) обробити текстовий файл (порахувати кількість «а» і «о» у рядку b).
початок Вв. Ім’я файлу (name) Assign(f, name) Rewrite (f) I = 1, n b A[i] Write (f, a) Close (f) Write(f 1, b) Close(f 1) Ім’я (st) Assign (f 1, st) Rewrite (f 1) кінець
Program fo; Const n=15; Type mas=array[1. . n] of integer; Var F 1: text; A: mas; I: integer; name 1, name, b: string; f: file of mas; Begin writeln ('введіть імя першого файлу‘); Readln (name); Assign (f, name); Rewrite (f); For i: =1 to n do Begin Write ('BB. a', I, '='); Read (a[i]); End; Write (f, a); Close(f); Writeln ('введіть імя текстового файлу'); Readln (name 1); Assign (f 1, name 1); Rewrite (f 1); Write ('введіть рядок'); Read (b); Write (f 1, b); Close(f 1); End.
початок K=0 S=0 I = 1, n Вв. name Assign (f, name) Reset (f) Read (f, а) A[i]> 0 K = k+1 S = s+ a[i] C = s/k С Close(f) кінець
Program fl; Const n=15; Type mas=array[1. . n] of integer; Var k, s, i: integer; F: file of mas; F 1: text; A: mas; C: real; Name: string; Begin K: =0; S: =1; writeln ('введіть імя першого файлу'); Readln (name); Assign (f, name); Reset (f); Read (f, a); For i: =1 to n do If a[i]>0 then begin k: =k+1; s: =s+ a[i]; End; C: =s/k; writeln ('середнє арифметичне =', c); readln; End.
початок i=1, length(b) K=0 ні st B[i]=“a” Or b[i]=“o” так Assign(f 1, st) Reset (st); Read (f 1, b) K=k+1 Сlose(f 1) k
Program obr_text_f; Var F 1: text; K, I: integer; St, b: string; Begin K: =0; writeln ('введіть імя текстового файлу'); Readln (st); Assign (f 1, st); Reset (st); Read (f 1, b) For i: =1 to length(b) do If (b[i]='a') or (b[i]) = 'o') then K: =k+1; Close(f 1); Writeln ('кількість о та а = ', k); End.


