Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Робота з файлами



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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.125 с)...