Редагування файлів послідовного доступу.
Щоб відредагувати файл послідовного доступу, спочатку треба ввести записи з файла у програмні змінні, після чого змінити їх і записати знову у файл.
Читання даних з файла, відкритого для послідовного доступу, здійснюється за допомогою оператора Input, що має кілька різновидів:
Input # – прочитує послідовність символів, записаних за допомогою оператора Write #;
Line Input # – прочитує один рядок;
Input$ – прочитує певну кількість символів.
Перед читанням треба відкрити файл за допомогою оператора Open...For.
Наприклад:
Open "C:\Text.Txt" For Input As #1
Оператор Input має наступний синтаксис:
Input #нф, <Список Змінних>
нф – це ціле число, яке повинно збігатись з ідентифікатором відкритого для читання файлу;
<Список_Змінних> – це записані через кому змінні. В кожному текстовому рядку файла кількість та тип змінних повинно збігатись з кількістю та типом значень в <Списку Значень> оператора Write.
Оператор Line Input має наступний синтаксис:
Line Input # нф, <3мінна>
Змінна – змінна типу String або Variant. Результатом роботи оператора Line Input є присвоєння <3мінній> значення всього текстового рядка файла.
Читання із текстового файла виконується звичайно циклічно за допомогою оператора циклу з умовою Do While...Loop або Do Until...Loop. Умовою закінчення циклу є спроба прочитати дані після читання останнього текстового рядка. Ця спроба приводиіь до того, що після досягнення кінця файла значення функції EOF(нф) буде True.
Функція Input$ – це функція двох аргументів:
Input$(Кількість_Символів, нф)
Перший її аргумент – це кількість символів, які треба прочитати із вхідного файла.
Другий аргумент – ідентифікатор файла, відкритого для читання.
Повертаєме значення – прочитаний текст в вигляді символьного рядка.
Цю функцію використовують для одночасного читання всього текстового файла та розміщення його в текстовому полі екранної форми. Для цього необхідно визначити довжину файла в байтах за допомогою функції LOF(нф).
Наприклад, для читання всієї інформації з файла можна запропонувати один з двох варіантів:
Варіант 1
Do Until EOF (1)
Line Input #1, String
Text= Text & String
Loop
Варіант 2
Text=Input$(LOF(1),1)
Close #1
Обидва варіанти приводять до однакового результату.
Приклад створення і використання файла з послідовним доступом.
Продавцям необхідно зберегти відомості про продані товари, наприклад, в цілях обліку та для підбиття підсумків в кінці дня.
Використаємо для рішення цієї задачі файл з послідовним доступом. Розмістимо на Формі 1, яка використовувалась в додатку «Покупки» ще три командні кнопки, яким дамо імена Записати, Доповнити, Показати та змінимо відповідно написи на них.
Щигликам на цих кнопках ставимо їм в відповідність процедури Записати_Click(), Доповнити_Click, Показати _Click. Відображати вміст файлу з записами можна було б на окрему форму, додану з цією ціллю до проекту, але якщо записів багато, то вони можуть на ній не розміститись. Тому повний список проданого товару будем виводити в Список4, в якому при потребі виникне смуга прокручування.
Private Sub Обчислити_Click()
Dim Код As Integer, Ціна As Currency, S As Single, i As Integer
S=0: ‘ Загальна вартість
i=0 ‘ номер покупки
Do While MsgBox(“Будуть ще покупки?”,vbQuestion+_
vbYesNo, “Покупки”)=vbYes
i=i+1
Код=Val(InputBox(“Введіть ціну”, i & “ –го товару”))
Ціна=CCur(InputBox(“Введіть ціну”, i & “ –го товару”))
Кількість=Val(InputBox(“Введіть ціну”, i & “ –го товару”))
Список1. AddItem Код
Список2. AddItem Ціна
Список3. AddItem Кількість
S=S+Ціна*Кількість
Loop
MsgBox “Вартість всіх покупок “ & Format( S, “0.00”) & “Грн.”
End Sub
Private Sub Записати_Click()
Open "D:\Продажі.txt" For Output As #1
For i = 0 To Список1.ListCount - 1
Write #1, Список1.List(i), Список2.List(i), Список3.List(i)
Next i
Close #1
End Sub
Private Sub Додати_Click()
Open "D:\Продажі.txt" For Append As #1
For i = 0 To Список1.ListCount - 1
Write #1, Список1.List(i), Список2.List(i), Список3.List(i)
Next i
Close #1
End Sub
Private Sub Показати_Click()
Dim Код As String * 4, Ціна As String * 15
Dim Кількість As String * 15
Open "D:\Продажі.txt" For Input As #1
S = 0
Do While Not EOF(1)
Input #1, Код, Ціна, Кількість
Список4.AddItem Код & " " & Ціна & " " & Кількість
S = S +Val( Ціна) *Val( Кількість)
Loop
Close #1
Список4.AddItem ""
Список4.AddItem ""
Список4.AddItem "Всього на " & S & " Грн"
End Sub
Для того, щоб змінні, які відображуються в списку 4 мали однакову довжину, що необхідно для вирівнювання інформації в стовпчиках при її відображені, ми використали оператор Dim Ім’я As String*N. Він вказує, що VB повинен створити рядкову змінну фіксованої довжини (довжиною N символів).
На рисунках 7.1 та 7.2 відображені вікна з результатами роботи додатка.
|
|
Рисунок 7.1. Результат роботи процедури “Обчислити_Click
| Рисунок 7.2. Результат роботи процедури “Показати_ Click”
|
7.3. ОБРОБКА ФАЙЛОВИХ СТРУКТУР ДАНИХ З
ДОВІЛЬНИМ ДОСТУПОМ