Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Візуал Бейсік 2010 Глінський.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.12 Mб
Скачать

§ 30. Застосування файлів даних послідовного доступу

З текстовими файлами даних ви вже знайомі. Ці файли інакше називають файлами даних послідовного доступу. Вони зберіга­ються на носіях в незакодованому вигляді, тому можуть бути переглянуті, створені та відредаговані в текстовому редакторі Блокнот чи іншому. Це суттєва перевага файлів даних послідов­ного доступу над файлами даних прямого доступу. Однак вони мають і недолік — не прямий, а послідовний, доступ до елемен­тів. Деякий елемент такого файлу може стати доступним лише після послідовного перегляду всіх попередніх елементів.

1. Основні поняття. Елементи файлу даних послідовного доступу можуть не мати фіксованої довжини. Тому до них і не можна організувати прямий доступ, а лише послідовний. Зате у файл даних по­слідовного доступу можна записувати будь-які дані: числа, тексти, масив структур (записів). Все, що виводять для огляду на екран, мож­на записати у файл послідовного доступу для постійного зберігання і можливого опрацювання іншими програмами, зокрема, програмою Блокнот. Дані у такому файлі розмежовують зазвичай комами у рядках. У кінці рядка файлу автоматично формується невидима по­значка «Кінець рядка», а в кінці файлу — позначка «Кінець файлу».

2. Дії з файлами даних послідовного доступу. Перед створенням чи використанням файли потрібно відкрити. Файл даних послідов­ного доступу може бути відкритий одним із трьох способів (відпо­відно до виду запланованих користувачем робіт):

  1. для створення файлу, тобто для виведення даних з оператив­ної пам’яті у файл (режим Output);

  2. для використання файлу, тобто для введення даних в опера­тивну пам’ять з файлу (режим Input);

  3. для доповнення певного файлу даними (режим Append).

Розглянемо, як створюють файл даних програмним способом. За

допомогою циклу дані заносять у файл послідовного доступу. Для цього застосовують команди Print або Write. Цілу структуру даних за­нести у файл послідовного доступу не можна, лише частинами, які називають полями. Значення декількох змінних, зокрема, полів да­них, заносять в один рядок файлу списком одною командою (Print або Write). У разі застосування команди Print ці значення у рядку бу­дуть розмежовані пропусками, а у разі застосування команди Write — комами. Текстові дані будуть подані у лапках.

Розглянемо, як використовують файл даних. Спочатку файл да­них відкривають для послідовного введення даних з рядків файлу у змінні. Таке введення даних з кожного рядка виконують у циклі за допомогою команди Input. Цілий рядок з текстового файлу в одну текстову змінну можна ввести командою LineInput.

Після опрацювання файлів їх закривають.

3. Команди для виконання дій з файлами даних послідовного доступу. Команди для роботи з файлами даних послідовного доступу розглядали у § 12.

4*. Перетворення файлів. Розглянемо алгоритм перетворення фай­лу даних прямого доступу у файл даних послідовного доступу.

1. Відкрити файл даних прямого доступу з деякою назвою z1 і номером nf1. Відкрити файл даних послідовного доступу z з номером nf у режимі створення (виведення даних у файл).

2. Доки не кінець файлу nf 1, прочитати поточний рядок з файлу nf1 і занести його у деяку поточну змінну типу структура; записати значення змінних, що є полями поточної структури, у файл nf.

3. Закрити два файли.

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

1. Відкрити файл даних прямого доступу з деякою назвою z1 і номером nf1. Відкрити файл даних послідовного доступу z з номером nf у режимі використання (зчитування даних з файлу).

2. Доки не кінець файлу nf, прочитати дані з поточного рядка файлу nf і занести їх у прості змінні або поля деякої структури; за­писати значення змінних чи утворену структуру у файл з номером nf1.

3. Закрити два файли.

Коди обох алгоритмів наведено у п.5.

5. Проект «Моделювання роботи з базою даних засобами фай­лів різних типів». Змоделюємо предметну область про студентів за допомогою різних структур даних: набору простих змінних, масиву структур, файлу даних прямого доступу, файлу даних послідовного доступу, створеного програмно і/або «вручну» у Блокноті. Кожний об’єкт класу «Студенти» характеризуватимемо двома властивостя­ми: прізвищем і балом успішності. Кількість властивостей може бу­ти розширена.

У проекті виокремимо такі сім етапів (складових):

  1. створення файлу даних послідовного доступу (кнопка 1) про­грамним способом шляхом введення даних з клавіатури у ма­сив записів або в прості змінні (на вибір користувача, що реа­лізуємо групою перемикачів), а потім виведення даних у файл; назву файлу даних має пропонувати комп’ютер, її мо­жна прийняти або замінити; оскільки кількість даних невідо­ма, процес введення даних закінчити, якщо ввести слово «finish2» замість прізвища; виведемо повідомлення у текстове поле, що підтверджує виконання робіт;

  2. використання створеного файлу (кнопка 2) для зчитування даних з файлу у прості змінні й відображення даних у багато­рядковому текстовому полі у вигляді таблиці; виведемо пові­домлення у текстове поле, що підтверджує виконання робіт;

  3. перетворення файлу даних послідовного доступу у файл да­них прямого доступу (кнопка 3);

  4. перетворення файлу даних прямого доступу у файл даних по­слідовного доступу (кнопка 4);

  5. використання файлу даних послідовного доступу, заздалегідь створеного у Блокноті (кнопка 5) і виведення повідомлення про це (рис. 2.6);

  6. відшукання потрібних даних з виведенням результатів у текс­тове поле (кнопка 6);

  7. завершення роботи (кнопка 7).

Рис. 2.6. Моделювання предметної області із застосуванням файлів

Розглянемо код проекту для середовища VBA. В аналогічному коді для VB треба лише поміняти команди роботи з файлами, а та­кож назви деяких елементів керування і команд. Файли проектів для VBA і VB можна завантажити із сайту www. hlynsky.lviv.ua.

Програмування. Код створюємо за декілька етапів.

  1. Спочатку у розділ Module помістимо опис структури:

Type student

s As String * 15

bal As Integer

End Type

  1. У розділі Declarations опишемо глобальні змінні.

Dim а(25) As student, zstudent As student, і As Integer

  1. Запрограмуємо кнопку 1 з метою створення двома способами файлу даних послідовного доступу d:\myfile3.txt чи іншого.

Private Sub CommandButton1_Click()

Dim nf As Integer

nf = FreeFile

z = InputВох("Введи повну назву файлу або прийми цю:", _

"Назва файлу", "d:\myfile3.txt")

Open z For Output As nf 'Відкриваємо файл для виведення

і = 0

dali: і = і + 1 'Тут застосовано позначку dali

TextBox1.Text = "Опрацьовуємо " + Str(i) + " об'єкт"

If OptionButtonl.Value = True Then

'1-й спосіб: вводимо дані у запис, доки ,s="finish2"

With а(і) 'Створюємо масив записів

.s = InputВох("Введіть прізвище", _

"Кінець даних? Введи finish2")

If Trim(.s) = "finish2" Then GoTo finish

.bal = lnputBox("BBefliTb бал")

End With

Write #nf, a(i).s, a(i).bal 'Записуємо поля у рядок файлу

Else

'2-й спосіб: вводимо дані у прості змінні

s = InputBox(“Введіть прізвище”, _

"Кінець даних? Введи finish2")

If Trim(s) = ”finish2" Then GoTo finish

bal = InputBox(“Введіть бал”)

Write #nf, s, bal 'Записуємо змінні у рядок файлу

End If

GoTo dali 'Повернутися на початок коду

finish: Close nf

TextBox1.Text = "Файл створено. Маємо " + Str(i - 1) + _

" рядків даних у файлі" + z

End Sub

  1. Запрограмуємо кнопку 2 для використання створеного файлу послідовного доступу. Дані з файлу введемо у прості змінні та виве- цемо їх на екран у багаторядкове текстове поле.

Private Sub CommandButton2_Click()

Dim nf As Integer

Dim u As String

nf = FreeFile

z = InputBox("Введіть повну назву файлу або прийми цю:", _

"Назва файлу", "d:\myfile3.txt")

Open z For Input As nf 'Відкриваємо файл для введення

u = "" ’Створюватимемо багаторядкове текстове дане

While Not EOF(nf) 'Доки не кінець файлу...

Input #nf, s, bal 'Зчитуємо дані про наступний об'єкт з файлу

u = u + s + Chr(9) + Str(bal) + vbCr

Wend

TextBox2.Text = u Close nf

TextBox1.Text = "Вміст файлу " + z + _

" виведено в поле поряд"

End Sub

  1. Запрограмуємо кнопку 3 для занесення даних з файлу послідов­ного доступу "d:\myfile3.txt" у файл даних прямого доступу "d:\myfile3.dat". Вміст файлу не показуємо, але виводимо повідомлення про викона­ну роботу.

Private Sub CommandButton3_Click()

Dim nf As Integer

newline = Chr(13)

nf = FreeFile

z = InputBox(“Введи повну назву файлу або прийми цю:”, _

"Назва файлу послідовного доступу", "d:\myfile3.txt")

z1 = InputВох("Введи повну назву файлу або прийми цю:", _

"Назва файлу прямого доступу", "d:\myfile3.dat")

Open z For Input As nf 'Відкриваємо файл для зчитування

nf1 = FreeFile

Open z1 For Random As nf1 Len = Len(zstudent)

While Not EOF(nf) 'Доки не кінець файлу...

Input #nf, s, bal 'Читаємо дані з файлу у дві змінні

zstudent.s = s 'і заносимо ці дані в поточний запис

zstudent.bal = bal

'Поточний запис записуємо у файл прямого доступу

Put #nf1,, zstudent

Wend

Close nf: Close nf1

TextBox1.Text = "Файл прямого доступу " + z1 +" створено"

End Sub

  1. Програмуємо кнопку 4 для занесення даних з файлу прямого доступу "d:\myfile3.dat" у файл послідовного доступу "d:\myfile4.txt" з ви­веденням вмісту файлу в текстове поле 2 і повідомлення про вико­нану роботу.

Private Sub CommandButton4_Click()

Dim nf As Integer

Dim nf1 As Integer

TextBox2.Text =""

z1 = InputВох("Введи повну назву файлу або прийми цю:", _

"Назва файлу прямого доступу", "d:\myfile3.dat")

nf1 = FreeFile

Open z1 For Random As nf1 Len = Len(zstudent)

nf = FreeFile

z = InputВох("Введи повну назву файлу або прийми цю:", _

"Назва файлу послідовного доступу", "d:\myfile4.txt")

Open z For Output As nf

u = "" 'Формуємо багаторядкове текстове дане

While Not EOF(nfl)

Get nf1,, zstudent 'Зчитуємо наступне дане з файлу

'Заносимо поля у файл послідовного доступу

Write #nf, zstudent.s, zstudent.bal

u = u + zstudent.s + Chr(9) + Str(zstudent.bal) + vbCr

Wend

TextBox2.Text = u 'Виводимо вміст файлу

Close nf: Close nf1

TextBox1.Text = "Файл послідовного доступу" + z + _

" створено. Вміст виведено у поле поряд"

End Sub

  1. Запрограмуємо кнопку 5 для читання файлу d:\myfile5.txt, ство­реного у Блокноті. Виведемо вміст файлу в текстове поле.

Private Sub CommandButton5_Click()

Dim nf As Integer

TextBox2.Text = “”

nf = FreeFile

z = InputBox("Введи повну адресу файлу або прийми цю:", _

"Дай відповідь", "d:\myfile5.txt")

'Цей файл має бути створений у блокноті в кодуванні ANSI

If Dir(z) = "" Then 'Перевіряємо, чи є файл на диску

u = "Створи в Блокноті файл " + z + " спочатку"

Else

Open z For Input As nf u = ""

While Not EOF(nf)

Input #nf, s, bal

u = u + s + Chr(9) + Str(bal) + vbCr

Wend

End If

TextBox2.Text = u 'Виводимо вміст файлу

Close nf

TextBox1.Text = "Це файл послідовного доступу" + z + _

" створений у Блокноті"

End Sub

Довідка. Функція Dir(z) набуває значення якщо файлу з назвою z немає на диску.

  1. Запрограмуйте кнопку 6 для пошуку даних у будь-якому фай лі послідовного доступу. Самостійно придумайте критерій пошуку реалізуйте його (див. попередній проект).

Private Sub CommandButton6_Click()

End Sub

  1. Запрограмуємо кнопку 7.

Private Sub CommandButton7_Click()

End 'Кінець роботи. Закрити форму

End Sub

Завдання 1. Виконайте проект і поекспериментуйте з ним.

Завдання 2. Доповніть структуру ще двома полями з даними про студентів на свій розсуд, наприклад, рік народження, номер те­лефону, адреса, захоплення тощо.

Висновки*. Двовимірні масиви, масиви структур і файли даних застосовують під час моделювання (описування і дослідження) різ­них предметних областей. Для цього застосовують також засоби реляційних таблиць у системах керування базами даних MS Access, MySQL тощо. Між цими двома способами моделювання є зв’язок: будь-яку таблицю з бази даних можна експортувати у грід на візу­альній формі чи у файл даних послідовного доступу і продовжити опрацьовувати дані візуальними засобами; і навпаки, сформований у VB чи VBA файл даних послідовного доступу чи наповнений дани­ми грід можна імпортувати у систему керування базами даних і пе­ретворити у таблицю бази даних. Якщо деякі задачі щодо перетво­рення даних розв’язати засобами середовищ керування базами да­них складно, то дані опрацьовують засобами мови програмування зі збереженням результатів у файлах чи шляхом створення VBA-кодів для роботи з базами даних. Завдяки такому підходу можна розв’я­зати майже будь-яку задачу. Тому застосування файлів даних має велике теоретичне і практичне значення.

Вправи

  1. Модифікуйте проект, ввівши власні творчі елементи до сценарію мо­делювання деякої іншої предметної області і забравши зайві елемен­ти сценарію (наприклад, перетворення файлів тощо).

  2. Створіть у Блокноті файл даних на деяку тему, виведіть дані з файлу в текстове поле або/і в список.

  3. Додатково до вправи 2 організуйте пошук за власним критерієм і ви­ведіть знайдені об’єкти в окремий список.