Категорії

Інші сайти по VB

Робота з файлами в Visual Basic

text-indent

Інформацію часто потрібно не тільки аналізувати, але і зберігати. Для збереження інформації призначені оператори обробки файлів, що дозволяють прочитувати і зберігати дані на різних носіях (гнучкий або жорсткий диск і тому подібне). Процес відкриття і збереження файлів складається з декількох етапів:

отримання дескриптора файлу (handle);

Щоб працювати з файлами, потрібно розуміти, як зв'язується система або застосування з файлом. Для цього є канал введення/виводу. При відкритті файлу ставиться у відповідність канал з певним номером. Таким чином, кожен відкритий файл має власний канал, за допомогою якого записуються або прочитуються дані. Отже, для введення і виведення даних у файл має значення не ім'я файлу, а номер каналу. Крім того, операційна система повинна мати зведення про наявність вільних каналів, які можна використовувати для відкриття файлу.

Freefile

Функція Visual Basic Freefile повертає номер вільного каналу, який можна використовувати для роботи з файлом.

Якщо вільних каналів немає (відкрита максимально допустима кількість файлів), виникає помилка виконання.

intfh = Freefile

3. Переваги та недоліки

4. Критика

В даному прикладі змінною intfh привласнюється ціле значення, яке можна використовувати для відкриття файлу. Необов'язковий параметр Rangenumber дозволяє визначити діапазон значень, з якого вибирається черговий вільний номер каналу. Якщо його значення рівне 0 (за умовчанням), то повертається номер каналу з діапазону 1 - 255, якщо 1, то з діапазону 256 - 511.

Типи доступу

У Visual Basic реалізовано три типи доступу до файлів:

послідовний (Sequential) - для читання і запису текстових файлів;

довільний (Random) - для читання і запису тексту або структурованих двійкових файлів із записами фіксованої довжини;

двійковий (Binary) - для читання і запису довільно структурованих файлів.

При створенні комунікаційних каналів система повинна знати, який тип доступу до кожного конкретного файлу потрібно використовувати і яка структура даних цього файлу.

Послідовний доступ

Послідовний доступ використовується головним чином при роботі з текстовими файлами. Будь-яка інформація читається або зберігається в текстовому виді відрядкового. У тексті можуть знаходитися символ перекладу рядка (vbcrlf або chr (13) & Chr (10)) або табулятор (vbtab або chr (9)). Ці символи використовуються для форматування тексту.

Спосіб відкриття файлу з послідовним доступом (для читання, запису або додавання) задається при виклику оператора Open:

Open Ім`я_файла For [Input | Output | Append] As Дескріптор_файла

Ключове слово

Опис

Input
Output
Append

Відкриття тільки для читання з файлу
Відкриття для запису у файл

Відкриття для додавання до файлу

Різні операційні можливості для послідовного доступу

 

Якщо файл не існує і відкривається для читання (For input), то Visual Basic видає повідомлення про помилку, а якщо для запису або додавання (Output або Append), то створюється новий файл. Якщо файл з вказаним ім'ям існує, то в режимі Output його вміст віддаляється, а в режимі Append файл відкривається для додавання.

Читання з файлу

Для читання даних з файлу, відкритого для послідовного доступу, існує декілька можливостей. У загальному випадку це здійснюється за допомогою оператора Input, що має декілька різновидів

Line lnput# читає один рядок;

Input# читає послідовність символів, зазвичай записаних за допомогою оператора Write#;

Input$ читає певну кількість символів.

Існує декілька варіантів читання всієї інформації з файлу. Перед читанням потрібно відкрити файл за допомогою оператора Open...For:

intfh = Freefile Open "c:\text.txt" For Input As intfh '1-й варіант Do Until EOF(intfh) Line Input #intfh, strstring strtext = strtext & strstring & vblf Loop '2-ою варіант Strtext = Input$(LOF(intfh), intfh) Close #intfh

Обидва варіанти приводять до однакового результату. У першому варіанті оператор Input виконується в циклі, поки не буде досягнутий кінець файлу. Функція EOF (End Of File) повертає значення True досягши кінця файлу. При цьому на кожному кроці циклу читається окремий рядок і до неї додається символ кінця рядка, який відкидається оператором Line Input.

У другому варіанті весь файл читається функцією lnput$. Функція LOF (Length Of File) дозволяє визначити довжину файлу в байтах. Відмітимо також, що незалежно від виду оператора Input указується не ім'я файлу, а тільки номер каналу, тобто дескриптор файлу (intfh).

Оператор Close призначений для закриття відкритого файлу або каналу.

Запис у файл

У Visual Basic для запису інформації у файл використовуються оператори Print# і Write#.

Print#

Оператор Print# функціонує майже так само, як його "колега" для екрану, з тією лише різницею, що дані не виводяться на екран, а зберігаються у файлі, відкритому для запису або додавання (Open...For Output або Open...For Append).

Print #filehandle [Spc(n)| Tab(n)] [expression] [charpos]

Синтаксис оператора на перший погляд виглядає складно:

Print #intfh, Text1.Text Print #intfh, "Фрагмент 1", "Фрагмент 2" Print #intfh, "Це складає "; "єдине ціле"

Для форматування записуваної у файл інформації слід по-різному розділяти дані в операторові Print. Якщо в операторові дані розділяти комами, то у файлі вони будуть розділені символами табуляції:

Приклад:

Print #intFH, "Фрагмент 1", "Фрагмент 2"

'відповідає Print #intFH, "Фрагмент 1"; Tab; "Фрагмент 2"

Якщо ж в операторові для розділення даних використовувати крапку з комою, то дані у файл записуються без роздільників:

Print #intfh, "Це складає "; "єдине ціле" 'відповідає Print #intfh, "Це складає єдине ціле"

Write#

Оператора Write# має такий же синтаксис, що і Print#. Відмінність полягає тільки у форматуванні виводу. Якщо Print# зберігає дані у вигляді звичайного тексту, то Write# бере текстові рядки в лапок, а цифри виводяться без лапок:

Print #intfh, "Ганна", "Київ", 17 'у файлі буде: Ганна Київ 17 Write #intfh, "Ганна", "Київ", 17 'у файлі буде: "Анна","Київ",17

Дані, збережені за допомогою оператора Write#, можна вважати оператором Input#.

Довільний доступ

Доступ типу Random Access дещо втратив своє значення після появи у версії Visual Basic 3.0 засобів доступу до баз даним. На відміну від послідовного доступу, при якому дані у файлах зберігаються в неструктурованому вигляді, довільний доступ припускає, що файл має постійну структуру. Це дозволяє прочитувати дані в довільному порядку

Довільний доступ реалізується за допомогою оператора Open.

Open Ім`я_файла For Random [Access Доступ] [Блокування] As [#]Handle [Len = Довжина_запису]

Параметр Len визначає довжину запису. Якщо це значення менше, ніж реальна довжина запису, то виникає помилка, якщо більше - те при записі файлу використовується більше дискового простору, чим необхідно.

Параметр Access дозволяє задати права доступу до файлу, що відкривається.

 

Якщо файл не існує і відкривається для читання (For input), то Visual Basic видає повідомлення про помилку, а якщо для запису або додавання (Output або Append), то створюється новий файл. Якщо файл з вказаним ім'ям існує, то в режимі Output його вміст віддаляється, а в режимі Append файл відкривається для додавання.

Читання з файлу

Для читання даних з файлу, відкритого для послідовного доступу, існує декілька можливостей. У загальному випадку це здійснюється за допомогою оператора Input, що має декілька різновидів:

·               Line lnput# читає один рядок;

·               Input# читає послідовність символів, зазвичай записаних за допомогою оператора Write#;

·               Input$ читає певну кількість символів.

Існує декілька варіантів читання всієї інформації з файлу. Перед читанням потрібно відкрити файл за допомогою оператора Open...For:

intfh = Freefile Open "c:\text.txt" For Input As intfh  '1-й варіант Do Until EOF(intfh) Line Input #intfh, strstring strtext = strtext & strstring & vblf Loop  '2-ою варіант Strtext = Input$(LOF(intfh), intfh) Close #intfh

Обидва варіанти приводять до однакового результату. У першому варіанті оператор Input виконується в циклі, поки не буде досягнутий кінець файлу. Функція EOF (End Of File) повертає значення True досягши кінця файлу. При цьому на кожному кроці циклу читається окремий рядок і до неї додається символ кінця рядка, який відкидається оператором Line Input.

У другому варіанті весь файл читається функцією lnput$. Функція LOF (Length Of File) дозволяє визначити довжину файлу в байтах. Відмітимо також, що незалежно від виду оператора Input указується не ім'я файлу, а тільки номер каналу, тобто дескриптор файлу (intfh).

Оператор Close призначений для закриття відкритого файлу або каналу.

 

Запис у файл

У Visual Basic для запису інформації у файл використовуються оператори Print# і Write#.

Print#

Оператор Print# функціонує майже так само, як його "колега" для екрану, з тією лише різницею, що дані не виводяться на екран, а зберігаються у файлі, відкритому для запису або додавання (Open...For Output або Open...For Append).

Print #filehandle [Spc(n)| Tab(n)] [expression] [charpos]

Синтаксис оператора на перший погляд виглядає складно:

Print #intfh, Text1.Text Print #intfh, "Фрагмент 1", "Фрагмент 2" Print #intfh, "Це складає "; "єдине ціле"

Для форматування записуваної у файл інформації слід по-різному розділяти дані в операторові Print. Якщо в операторові дані розділяти комами, то у файлі вони будуть розділені символами табуляції:

Приклад:

 

Print #intFH, "Фрагмент 1", "Фрагмент 2"
'відповідає
Print #intFH, "Фрагмент 1"; Tab; "Фрагмент 2"

Якщо ж в операторові для розділення даних використовувати крапку з комою, то дані у файл записуються без роздільників:

Print #intfh, "Це складає "; "єдине ціле" 'відповідає Print #intfh, "Це складає єдине ціле"

Write#

Оператора Write# має такий же синтаксис, що і Print#. Відмінність полягає тільки у форматуванні виводу. Якщо Print# зберігає дані у вигляді звичайного тексту, то Write# бере текстові рядки в лапок, а цифри виводяться без лапок:

Print #intfh, "Ганна", "Київ", 17 'у файлі буде: Ганна Київ 17 Write #intfh, "Ганна", "Київ", 17 'у файлі буде: "Анна","Київ",17

Дані, збережені за допомогою оператора Write#, можна вважати оператором Input#.

Довільний доступ

Доступ типу Random Access дещо втратив своє значення після появи у версії Visual Basic 3.0 засобів доступу до баз даним. На відміну від послідовного доступу, при якому дані у файлах зберігаються в неструктурованому вигляді, довільний доступ припускає, що файл має постійну структуру. Це дозволяє прочитувати дані в довільному порядку.

Довільний доступ реалізується за допомогою оператора Open.

Open Ім`я_файла For Random [Access Доступ] [Блокування] As [#]Handle [Len = Довжина_запису]

Параметр Len визначає довжину запису. Якщо це значення менше, ніж реальна довжина запису, то виникає помилка, якщо більше - те при записі файлу використовується більше дискового простору, чим необхідно.

Параметр Access дозволяє задати права доступу до файлу, що відкривається.

 

Доступ

Пример

Без вкзання
Ч
итання (Read)
Запис (Write)
Ч
итання і запис (Read Write)

Open "DATE.DAT" For Random As intFH
Open "DATE.DAT" For Random Access Read As intFH
Open "DATE.DAT" For Random Access Write As intFH
Open "DATE.DAT" For Random Access Read Write As intFH

Види доступу

Якщо права доступу не вказані, то за умовчанням використовується Read Write. Оскільки цей тип доступу зазвичай призначений для роботи з файлами, які можуть використовуватися багатьма користувачами або додатками, то слід забезпечити цілісність даних при колективному використанні. Для цього слід встановити параметр Lock, що визначає права доступу до відкритого файлу. Цей параметр може приймати наступні значення:

Shared

Файл може використовуватися всіма процесами для прочитування і запису.

Lock Read

Ніякою інший процес не може прочитувати дані з файлу. Даний параметр можна встановити, якщо в даний момент ніякою інший процес не виконує операцію читання.

Lock Write

Ніякою інший процес не може записувати дані у файл. Даний параметр можна встановити, якщо в даний момент ніякою інший процес не виконує операцію запису.

Lock Read Write

Ніякий інший процес не може прочитувати або записувати. Даний параметр можна встановити, якщо в даний момент не виконуються операції читання або запису.

Параметр Len задає довжину одного запису. Для завдання довжини можна використовувати функцію Len:

Open "ADDRESS.DAT" For Random Access Write As 1 Len = 27 Open "ADDRESS.DAT" For Random Access Write As 1 Len = Len(Varname)

При цьому важливо, щоб при відкритті файлу була відома довжина набору даних, що може бути проблематичним, якщо походження файлу невідоме.

Введення і вивід

Для запису і читання даних використовуються відповідно оператори Put і Get.

Put #filehandler, Номер_запіси, Змінна Get #filehandler, Номер_запису, Змінна

У даному прикладі у файл записуються дані зі змінної Address, причому номер запису рівний 7, а потім в змінну Address читається другий запис файлу.

Put #intfh, 7, Address 'зберігає 7-й запис Get #intfh, 2, Address 'читає 2-й запис

Для того, щоб в одному записі зберегти декілька значень різних типів, слід використовувати призначені для користувача типи даних:

'(General)(Declaration) Type Person Firstname As String * 20 Name As String * 20 CUSTOMERN As Integer End Type Private Customer As Person 'Процедура Private Sub Command1_click() intfh = Freefile Open "C:\lore.DAT" For Random As intfh Len = Len(Customer) Get #intfh, 2, Customer Close #intfh End Sub

Двійковий доступ

Двійковий доступ трохи відрізняється від довільного доступу. Різниця полягає тільки в тому, що двійковий доступ можливий не до певного набору даних, а до окремого байта усередині будь-якого файлу.

Для відкриття двійкового файлу також використовується оператор Open.

Open Ім`я_файла For Binary [Аccess Доступ] [Блокування] As [#]Handle

На головну
Hosted by uCoz
Hosted by uCoz