![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
6.1 Файли довільного доступу
Файл довільного доступу містить записи однакового розміру. Кожний запис може включати поля, в яких вміщуються дані. Наприклад, записи файлу з відомостями про співробітників Employees.txt підприємства можуть вміщувати дані про прізвище та ініціали робітника (поле довжиною 15 байт), освіта (поле у 4 байти). Кожний запис буде мати фіксовану довжину, вміщувати два поля, кожне з яких також має фіксований розмір.
Запис 1 | Запис 2 | Запис 3 і т.д. | ||||||||||||||||||||||||||||||||||||||||||||||||
поле 1 | поле 2 | поле 1 | поле 2 | поле 1 | ||||||||||||||||||||||||||||||||||||||||||||||
І | в | а | н | ч | е | н | к | о | М | . | Ф | . | в | и | щ | . | К | р | а | в | ч | е | н | к | о | В | . | Б | . | с | е | р | . | |||||||||||||||||
Для доступу до файлу його слід розчинити оператором Open:
Open "FileName" For Random As FileNumber Len = RecordLength
FileName - ім'я файлу, можна задавати повне ім'я файлу з маршрутом пошуку (наприклад, "C:\Data.txt");
Random - визначає, що файл буде розчинено в режимі довільного доступу;
FileNumber - номер файлу, ціле число в діапазоні від 1 до 511, яке визначає номер незайнятого в системі в дану мить файлу, так званий дескриптор файлу;
RecordLength - визначення довжини запису файлу.
Наприклад, щоб розчинити файл Employees.txt у режимі довільного доступу коли відомо, що номер файлу 5 не зайнято ніяким іншим файлом, можна виконати команду:
Open "Employees.txt" For Random As 5 Len = 19
Якщо невідомо, який номер файлу в дану мить є незайнятим, можна скористатися функцією FreeFile, яка повертає номер незайнятого файлу.
При записі, зчитуванні даних у файл послідовного доступу, коли один запис вміщує декілька полів, доцільно використовувати тип - запис. Змінна з типом даних запис буде вміщувати дані, які слід записати у файл, або навпаки приймати дані, що прочитано з файлу. У випадку, коли важко визначити довжину запису при роботі з різними типами даних, можна використовувати функцію Len(), яка повертає довжину змінної.
Наприклад, для роботи з файлом Employees.txt буде використовуватись змінна PZ, яка має тип Person. Тип Person оголошено у вікні модуля так:
Type Person
Priz As String * 15
Osv As String * 4
End Type
Для розчинення файлу Workers.txt можна виконати таку послідовність дій:
DZ = Len(PZ)
VF = FreeFile
Open "Employees.txt" For Random As VF Len = DZ
Якщо файл у поточному каталозі не буде знайдено, то створюється новий файл з ім'ям Employees.txt.
При розчинені, створенні файлу довільного доступу обов’язково існує запис файлу з номером 1. Для визначення загальної кількості записів у файлі можна використовувати функцію FileLen(), яка повертає розмір файлу в байтах. Наприклад, щоб привласнити змінній ZKZ значення, яке відповідає загальній кількості записів у файлі, можна виконати таку дію:
ZKZ = FileLen("Employees.txt") / DZ
У коді програми обов'язково слід перевіряти, щоб звернення до записів файлу було коректним, номер запису, до якого здійснюється звернення, повинен бути у діапазоні від першого до останнього запису файлу.
Для запису даних у файл використовується оператор Put
Put # FileNumber, <номер запису файлу>, <змінна>
Якщо <номер запису файлу> відповідає будь-кому з існуючих записів розчиненого файлу, то вміст запису буде змінено на нове значення - значення змінної, яка може бути одного зі стандартних типів, або типу - запис. Для того, щоб додати до файлу новий запис, слід звернутися до запису з номером: <останній запис> + 1.
Наприклад, щоб додати до файлу Employees.txt новий запис про співробітника Матвієнко Л.І. з вищою освітою можна виконати дії:
PZ.Priz = "Матвієнко Л.І."
PZ.Osv = "вищ."
Put #VF, ZKZ + 1, PZ
Зчитування даних з файлу довільного доступу виконується оператором Get:
Get # FileNumber, <номер запису файлу>, <змінна>
Таким чином, можна прочитати будь-який запис файлу в змінну, зазначивши номер запису.
Наприклад, якщо оголосити масив змінних PersZap для зчитування всієї інформації з файлу, можна прочитати дані всього файлу так:
For i = 1 To ZKZ
Get #VF, i, PersZap(i)
Next
При зчитуванні даних з файлу може стати у нагоді функція Eof() (від End of file), яка повертає значення True, якщо досягнуто кінця файлу, і False у зворотному випадку. Прочитати усі записи файлу доки не буде досягнуто кінця файлу можна так:
i = 1
Do While Not EOF(VF)
Get #VF, i, PersZap(i)
txtPriz(i - 1).Text = PersZap(i).Priz
txtOsv(i - 1).Text = PersZap(i).Osv
i = i + 1
Loop
Після виконання операцій з файлом його обов'язково слід зачинити оператором Close:
Close # FileNumber
Знищити записи файлу довільного доступу безпосередньо неможливо. Щоб виконати цю операцію, слід:
1) Створити тимчасовий файл у форматі, який відповідає формату файлу, що вміщує записи, які треба знищити.
2) Переписати у тимчасовий файл усі записи, крім тих, що знищуються.
3) Зачинити файл - джерело даних, знищити його оператором
Kill "FileName"
4) Зачинити тимчасовий файл, перейменувати його оператором
Name "OldName" As "NewName"
Наприклад, щоб знищити п'ятий запис файлу Employees.txt можна виконати такі дії:
NF1 = FreeFile | Розчиняється файл Employees.txt |
Open For "Employees.txt" Random As NF1 Len = 19 | |
NF2 = FreeFile | Створюється тимчасовий файл Employees.tmp |
Open "Employees.tmp" For Random As NF1 Len = 19 | |
KZZ = FileLen("Employees.txt") / 19 | Визначається кількість записів файлу. |
i = 1 | |
n = 1 | |
Do While i <= KZZ | Цикл діє доки і менш або рівно кількості записів файлу |
If i <> 5 Then | Якщо обробляється не п'ятий запис файлу, то |
Get #NF1, i, PZ | виконується зчитування і-го запису файлу Employees.txt у змінну PZ |
Put #NF2, n, PZ | записується n-ий запис у файл Employees.tmp зі змінної PZ |
n = n +1 | n збільшується на 1 |
End If | Завершується оператор If |
i = i + 1 | і збільшується на 1 |
Loop | кінець циклу - оброблено всі записи файлу Employees.txt |
Close #NF1 | Зачиняється файл Employees.txt |
Kill "Employees.txt" | Знищується файл Employees.txt |
Close #NF2 | Зачиняється файл Employees.tmp |
Name "Employees.tmp" As "Employees.txt" | Перейменовується файл Employees.tmp у Employees.txt |
6.2 Файли послідовного доступу
Файл послідовного доступу можна розглядати як послідовність рядків. У файлі послідовного доступу всі текстові рядки можуть мати різну довжину, тому система не може визначити позицію рядка в файлі, довільний доступ неможливий. При роботі з такими файлами щоб прочитати, наприклад, двадцятий рядок, слід перейти до початку файлу і прочитати дев'ятнадцять початкових рядків. Файли послідовного доступу зручні при роботі з текстом, оскільки можна працювати з рядками будь-якої довжини.
Розчинити файл послідовного доступу можна в одному з трьох режимів:
1) для введення даних Input - режим зчитування даних з файлу;
2) для виведення Output - вивід тексту в файл, причому попередній уміст файлу втрачається;
3) для приєднання Append - режим, який дає змогу додати нові рядки у кінець файлу.
Щоб розчинити файл, слід виконати команду:
Open "FileName" For Mode As FileNumber
FileName - режим доступу до файлу.
Використовуючи оператор Print, можна записувати один або декілька символів за одну операцію запису, причому до файлу додається новий текстовий рядок.
Print # FileNumber, <змінна або константа> [,<змінна або константа> …]
Оператор Write дає змогу записати один або декілька символів за одну операцію запису, до файлу буде додано новий рядок.
Write # FileNumber, <змінна або константа> [,<змінна або константа> …]
Оператор Write відрізняється від оператору Print тим, що форматує дані при запису так
Тип поля | Форматування |
Текстове | у лапках |
Числове | без форматування |
Дата | універсальний формат дати |
Наприклад, якщо виконати наступний фрагмент коду програми, буде створено файл Data.txt.
Date = #10/06/2000#
FN = FreeFile
Open "C:\Data.txt" For Output As FN
Write #FN, "Oдин", FN, Date
Print #FN, "Два", FN, Date
Уміст файлу Data.txt буде таким:
"Oдин",1,#2000-10-06#
Два 1 06.10.00
Оператор Input зчитує повний рядок з файлу і розміщує його в одну або декілька змінних.
Input # FileNumber, <змінна > [,<змінна> …]
Якщо запис файлу створено оператором Print, дані можна прочитати як один рядок у деяку змінну. У випадку, коли дані було записано оператором Write, кожну складову запису можна прочитати у окрему змінну для подальшого використання. Причому не слід забувати, що прочитані дані будуть текстового типу.
Зчитування даних з файлу Data.txt можна виконати, наприклад, так:
Open "C:\Data.txt" For Input As FN
Input #FN, X, Y, Z
lblX.Caption = X
lblY.Caption = Y
lblZ.Caption = Z
Input #FN, M
lblM.Caption = M
У результаті виконання коду, значення властивості Caption об'єктів буде таким:
об'єкт X: Oдин;
об'єкт Y: 1;
об'єкт Z: 2000-10-06;
об'єкт M: Два 1 06.10.00.
Після виконання операцій з файлами послідовного доступу, їх, як і файли довільного доступу, обов'язково зачинити оператором Close.
6.3 Бінарні файли
Бінарні файли - це файли, у яких можуть утримуватися спеціальні символи, що не зустрічаються в текстових файлах. Уміст бінарного файлу - це набір символів, кожний з яких можна отримати окремо. До бінарних файлів належать файли, що виконуються, драйвери, шрифти і т.д.
Бінарний файл можна розглядати як файл довільного доступу, кожний запис якого дорівнює 1 байту. У режимі бінарного доступу можна розчинити будь-який файл, але прийдеться працювати з кожним байтом цього файлу окремо.
Розчинити файл можна командою:
Open "FileName" For Binary As FileNumber
Запис і зчитування даних у бінарних файлах виконується операторами Get i Put.
Дата публикования: 2014-12-28; Прочитано: 414 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!