Мета роботи: Вивчення і використання операторів мови VB 6 для роботи з файлами різних типів: Послідовними (текстовими) файлами, файлами довільного доступу, бінарними файлами. Дослідження і використання інструменту CommonDialogдля відкриття та збереження файлів, вибору шрифту і кольору, а також використання об'єкта Clipboardдля зберігання фрагментів тексту, - на прикладі створення простого текстового редактора.
Контрольні питання:
1. Якими способами можна відкрити текстовий файл? Як закрити текстовий і будь-який інший відкритий файл?
2. Як записуються дані у відкритий для запису текстовий файл? У чому різниця між операторами Write і Print?
3. Як читаються дані з відкритого для читання текстового файлу? Чим відрізняються один від одного оператори Input і Line Input? За допомогою якої функції можна прочитати з файлу задане число символів? Як прочитати все символи файлу?
4. Що таке користувальницький тип даних і як використовується це поняття при роботі з файлами довільного доступу ( raf)?
5. За допомогою яких операторів з файлу rafчитаються записи і в файл rafпишуться нові записи?
6. З якою метою визначається і використовується індекс при роботі з файлом raf?
7. Які особливості використання бінарних файлів? Як вони відкриваються? Як проводиться читання з бінарного файлу і запис в бінарний файл?
8. Як можна застосувати елемент управління CommonDialogдля завантаження вмісту текстового файлу в текстове поле? Як за допомогою того ж елемента управління зберегти відредагований текст в текстовому файлі?
9. Як можна застосувати елемент управління CommonDialogдля завантаження вмісту файлу rtfв полі RichTextbox? Як за допомогою того ж елемента управління зберегти відредагований текст в файлі rtf?
10. Як можна застосувати елемент управління CommonDialogдля зміни значень параметрів шрифту і для зміни кольору тексту в вікні Textbox(Або виділеного фрагмента тексту у вікні RichTextbox)?
Приклад 7.1. Розглянемо додаток, яке демонструє запис в текстовий файл (і читання з текстового файлу) «відомостей про співробітників» - рядків, кожна з яких містить ідентифікаційний номер, ПІБ, дату народження і місце народження співробітника. Рядки утворюють таблицю, яку на екранній формі будуть імітувати 4 елементи управління Combo Box (рис. 7.1), що утворюють масив об'єктів Comb (i), у яких властивість Style має значення 1 - SimpleCombo.
Виділіть удаляемую рядок ", vbExclamation
Comb (j) .RemoveItem i
'Вставка новому записів таблицю:
Private Sub mnuInsert_Click ()
i% = Comb (0) .ListIndex
If i< 0 Then
MsgBox "Виділіть рядок для вставки перед нею", vbExclamation
Comb (0) .AddItem InputBox ( "Введіть номер"), i
Comb (1) .AddItem InputBox ( "Введіть фио"), i
Comb (2) .AddItem InputBox ( "Введіть дату нар."), I
Comb (3) .AddItem InputBox ( "Введіть місце нар."), I
'Зміна записи в таблиці:
Private Sub mnuUpdate_Click ()
i% = Comb (0) .ListIndex
If i< 0 Then
MsgBox "Виділіть змінну рядок", vbExclamation
Comb (0) .List (i) = InputBox ( "Введіть номер", Comb (0) .List (i))
Comb (1) .List (i) = InputBox ( "Введіть фио", Comb (1) .List (i))
Comb (2) .List (i) = InputBox ( "Введіть дату нар.", Comb (2) .List (i))
Comb (3) .List (i) = InputBox ( "Введіть місце нар.", Comb (3) .List (i))
'Очищення всієї таблиці:
Private Sub mnuClear_Click ()
'Заповнення таблиці відомостями з текстового файлу:
Private Sub mnuLoad_Click ()
Open "person. Txt" For Input As # 1
Input # 1, numb, fio, bdate, bloc
Comb (0) .AddItem numb
Comb (1) .AddItem fio
Comb (2) .AddItem bdate
Comb (3) .AddItem bloc
'Запис відомостей таблиці в текстовий файл:
Private Sub mnuSave_Click ()
N% = Comb (0) .ListCount
Open "person. Txt" For Output As # 1
For i = 0 To N - 1
numb = Val (Comb (0) .List (i))
fio = Comb (1) .List (i)
bdate = CDate (Comb (2) .List (i))
bloc = Comb (3) .List (i)
Write # 1, numb, fio, bdate, bloc
'Завершення роботи програми:
Private Sub mnuExit_Click ()
приклад 7.2 . Розглянемо додаток, яке демонструє використання елементів управління CommonDialogдля відкриття та збереження файлу, для вибору шрифту і кольору, а також для редагування тексту.
файл формату TXTбуде завантажуватися в текстове поле (ліве поле на рис. 7.2), а файл формату RTF- в полі RichTextbox(Праве поле на рис. 7.2).
об'єкта
клас
об'єкта
властивість
об'єкта
значення властивості
"Панелі загального
діалогу "
Закладка Open / Save As
Закладка Font
Закладка Color
У таблиці не предствавлени властивості команд меню Font, Colorі Edit. Нижче наводиться код процедур також лише для команд меню File (Open, Saveі SaveAs). Складання коду для інших команд меню - тема 2-го завдання даної роботи.
Private Sub mnuOpen_Click ()
CommonDialog1.ShowOpen
F $ = CommonDialog1.FileName
If Right (F, 3) = "rtf" Then
RichTextBox1.LoadFile F
ElseIf Right (F, 3) = "txt" Then
Open F For Input As # 1
S $ = Input (N, 1)
Private Sub mnuSave_Click ()
CommonDialog1.ShowSave
F $ = CommonDialog1.FileName
Private Sub mnuSaveAs_Click ()
CommonDialog1.ShowSave
F $ = CommonDialog1.FileName
RichTextBox1.SaveFile F, rtfRTF
В ході виконання даної роботи студент повинен виконати 2 завдання.
Завдання 1. У процесі виконання завдання студенти освоюють наявні в VB 6 можливості роботи з файлами довільного доступу ( RAF -randomaccessfile).
Для заданої таблиці бази даних оголошується призначений для користувача тип даних, оголошується змінна цього типу (навчальний посібник, стор. 108 - 112), складаються і отлаживаются процедури, в яких використовується змінна призначеного для користувача типу.
Зокрема реалізуються процедури для команд меню Записати в файлRAFі Читати з файлуRAF. Як і в прикладі 7.1, для редагування даних використовується масив об'єктів ComboBoxі меню Editз п'ятьма командами підміню: Додати запис, видалити запис, вставити запис, змінити запис, Очистити таблицю.
Варіант 1.
Оголосити призначений для користувача тип даних для таблиці «Автомобіль» (табл. 7.1) бази даних «Автосервіс».
автомобіля |
автомобіля |
несправності |
У нижньому рядку таблиці 7.1 - типи полів.
Варіант 2.
Оголосити призначений для користувача тип даних для таблиці «Несправності» (табл. 7.2) бази даних «Автосервіс».
несправності | Назва несправності | вартість |
У нижньому рядку таблиці 7.2 - типи полів.
Використовуючи додаток прикладу 7.1 як зразок, організувати введення і редагування даних для наведеної таблиці, запис цих даних в файл довільного доступу і читання даних з файлу довільного доступу. Як і в прикладі 7.1, зазначені діїреалізувати як роботу команд меню, показаного на рис. 7.1.
Завдання 2. В ході виконання завдання студенти доповнюють додаток прикладу 2 новими можливостями, які дозволяють розглядати це додаток як простий текстовий редактор.
Варіант 1 CommonDialogреалізувати команди меню Fontі Color(З підміню колір символіві Колір фону). За допомогою цих команд має забезпечуватися вибір шрифту (його найменування, накреслення і розміру) для виділеного фрагмента тексту у вікні RichTextbox, А також вибір кольору символів виділеного фрагмента і вибір кольору фону всього цього вікна.
вказівка:Під час налаштування об'єкта CommonDialogдля вибору шрифту за допомогою властивості (Custom) обов'язково слід встановити значення властивості Flags рівним 1, 2 або 3 (див. посібник, стор. 183).
Варіант 2. За допомогою елемента управління CommonDialogреалізувати команди меню Edit(підміню Copy, Cutі Paste), Призначенням яких є копіюванняабо видаленняв буфер обміну виділеного фрагмента тексту, а також вставкав виділене місце тексту вмісту буфера обміну.
вказівка:До буферу обміну (об'єкту Clipboard) Можна застосовувати методи SetText і GetText:
Clipboard. SetText RichTextBox1.SelText
RichTextBox1.SelText = Clipboard. GetText
Кожна програма повинна зберігати дані на диск і читати їх з диска. Це необхідно, наприклад, для збереження налаштувань програми, навряд чи користувачу сподобається програма, яку при наступному запуску доведеться налаштовувати заново.
У даній статті мова піде про роботу з текстовими файлами засобами Visual Basic.
дескриптор файлу
Для роботи з файлами операційна системавикористовує канали введення / виводу, тобто кожен відкритий файл має свій номер.
У Visual Basic існує функція FreeFile, Яка повертає номер вільного каналу, який можна використовувати для роботи з файлом. Якщо вільних каналів немає, то виникає помилка.
FreeFile [(RangeNumber) ]
RangeNumber-необязательний параметр, який дозволяє визначити діапазон значень вільних каналів, якщо RangeNumber= 0 (за замовчуванням), то повертається номер каналу з діапазону 1 - 255, а якщо 1, то з діапазону 256 - 511.
MyFile = FreeFile "Перемінної MyFile присвоєно вільний каналі тепер її можна використовувати для роботи з файлами
Робота з текстовими файлами
Найбільш часто доводиться зустрічатися з текстовими файлами. Текстові файли складаються з набору символів ASCII (American Standard Code for Information Interchange - Американський стандартний код для обміну інформацією).
Перш ніж почати записувати / зчитувати дані, файл необхідно відкрити, робиться це за допомогою оператора Open (Ім'я файлу) For As #Номер_файла, Де:
Input- відкрити файл для читання, якщо файл не існує, то виникає помилка;
Output- для запису, якщо файл не існує, то він буде створений, а якщо файл існує, то він буде перезаписаний;
Append- для додавання, якщо файл не існує то він буде створений, а якщо файл існує, то дані будуть додаватися в кінець файлу.
Читання текстових файлів можна здійснювати двома способами: читати посимвольний, для цього використовується функція Input (Колічество_счітиваемих_сімволов, #Номер_файла) і через підрядник, для цього використовується функція Line Input #Номер_файла, Куда_счітивать.
Dim MyFile
Dim S As String "Змінна для зберігання лічених даних
MyFile = FreeFile
Open ( "C: \ TEST.txt") For Input As #MyFile
Line Input #MyFile, S "Прочитуємо перший рядок з файлу TEST.TXT в змінну S
Dim MyFile "Оголошуємо змінну для вільного файлу
Dim i As Integer "Змінна для циклу
Dim tS As String "Змінна для зчитування рядків
Dim S As String "Змінна для зберігання остаточних даних
MyFile = FreeFile "Надаємо вільний канал, для роботи з файлами
"Відкриваємо файл TEST.TXT для читання
For i = 1 To 5
Line Input #MyFile, tS "Читаємо файл TEST.TXT через підрядник
If i => 5 Then S = tS "Якщо п'ятий рядок, то запам'ятовуємо її в змінну S
Next i
Close #MyFile "Закриваємо файл
Dim MyFile "Оголошуємо змінну для вільного файлу
Dim S As String "Змінна для зберігання лічених даних
MyFile = FreeFile "Надаємо вільний канал, для роботи з файлами
Open ( "C: \ TEST.txt") For Input As #MyFile "Відкриваємо файл TEST.TXT для читання
S = Input $ (LOG (1), 1) "Прочитуємо весь файл в змінну S
Close #MyFile "Закриваємо файл
Для запису в файл існують оператори Print #Номер_файла, даніі Write #Номер_файла, дані. Відрізняє ці оператори тільки те, що Writeзаписує дані в лапках, а Printбез лапок.
Нижче наступний код створить на диску C: \ новий файл TEST.TXT і запише в нього два рядки, першу без лапок, а другу в лапках:
Dim MyFile "Оголошуємо змінну для вільного файлу
MyFile = FreeFile "Надаємо вільний канал, для роботи з файлами
Open ( "C: \ TEST.txt") For Output As #MyFile "Відкриваємо файл TEST.TXT для запису
Print #MyFile, "Цей рядок записана оператором Print, вона без лапок ..."
Write #MyFile, "Цей рядок записана оператором Write, вона в лапках ..."
Close #MyFile "Закриваємо файл
Ось власне і все. Як ви вже напевно зрозуміли, для закриття файлу служить оператор Close #Номер_файла, при цьому, # Номер_файлавказувати не обов'язково.
Стаття трохи сирувата, але для початківців програмістів буде корисна. Наступного разу я розповім про роботу з бінарними файлами.
8. ЗБЕРЕЖЕННЯ ТА ЗЧИТУВАННЯ ІНФОРМАЦІЇ
Щоб після завершення роботи програми всі дані, створені в пам'яті, не пропали, потрібно вміти зберігати інформацію на жорсткому диску. В іншому випадку вся інформація безслідно зникне. Зберігати дані і зчитувати їх можна різними способами. Для роботи з інформацією різного об'єму і формату можна використовувати двійкові і текстові файли. Для зберігання малих обсягів інформації можна використовувати реєстр Windows. А для самих складних завдань розумно скористатися базами даних.
8.1. Відкриття файлів за допомогою оператора «Open »
Файл - іменована область будь-якого зовнішнього накопичувача інформації. Дані «живуть» в пам'яті комп'ютера, а файли - на жорсткому диску. Програма не працює з файлами безпосередньо, а використовує в якості посередника операційну систему.
Імена файлів бувають двох видів: повні - крім імені файлу вказується також місце розташування файлу на зовнішньому носії (наприклад «C: \ Program Files \ Microsoft Visual Studio \ VB98 \ VB 6.EXE») і короткі - тільки ім'я файлу (VB 6.EXE ). Якщо місце розташування файлу не вказано, то він буде шукатися в цій папці, за замовчуванням - папка, де знаходиться ваше додаток. Безпосереднє ім'я файлу складається з двох частин: власне унікальне ім'я файлу і його розширення. Власне ім'я ідентифікує файл, а розширення зазвичай вказує на формат файлу або на те, якою програмою він створений.
Перед початком роботи з файлом необхідно запросити у операційної системи покажчик (дескриптор) файлу. Для його отримання користуються функцією «FreeFile». Потім за допомогою оператора «Open» цей покажчик зв'язується з необхідним файлом. Тільки після цього програма зможе працювати з ним. Синтаксис відкриття файлу наступний:
'Отримуємо вільний покажчик файлу і присвоюємо його змінної
FileHandle% = FreeFile
'откриваемфайл
Open FilePath _
As [#] FileHandle%
... (работасфайлом)
Close [#] FileHandle
· FileHandle% - змінна, в якій зберігається покажчик файлу;
· FreeFile - ім'я функції, що повертає покажчик файлу;
· Open - ім'я оператора;
· FilePath - повне ім'я файлу;
· For - ключове слово, за яким йде опис режиму доступу до файлу;
· Mode - режим доступу до файлу (див. Табл. 15);
Таблиця 15
Режими доступу до файлу
режими доступу |
опис |
Append |
Додавання даних в кінець існуючого текстового файлу. Якщо файл не існує, він буде створений |
Binary |
Відкриття файлу в двійковому режимі, тобто у вигляді набору байтів. Якщо файл не існує, але буде створений |
Input |
Відкриття файлу для читання в текстовому форматі |
Output |
Відкриття файлу для запису текстового файлу. При цьому вся стара інформація буде видалена. Якщо файл не існує, але буде створений |
Random |
Відкриття файлу в режимі довільного доступу. Такий режим використовується для роботи з простими записами. Якщо файл не існує, але буде створений |
· Access - необов'язкове ключове слово, за яким слід опис типу доступу;
· AccessType - опис типу доступу:
· Read - читання;
· Write - запис;
· Read Write - читання і запис.
Примітка |
При режимах доступу Append і Output доступний тільки тип доступу Write, при Input - тільки Read, а при Binary і Random доступні всі три типи доступу. |
· LockType - необов'язковий параметр, що визначає, чи зможуть інші програми використовувати цей файл, поки з ним працює ваша програма. Зазвичай воно пов'язане з роботою в мережі (див. Табл. 16).
Таблиця 16
Можливі значення параметра LockType
значення |
опис |
Shared |
До файлу матимуть повний доступ всі користувачі з необхідними правами |
Lock Read |
Блокується читання файлу, а запис дозволена |
Lock Write |
Блокується запис в файл, а читання дозволено |
Lock Read Write |
Забороняється і читання, і запис в нього |
· As - ключове слово, за яким слід покажчик файлу.
· # - символ, який вказує, що наступне за ним значення є покажчиком файлу.
· Len - необов'язкове ключове слово, за яким має слідувати параметр, що визначає довжину запису.
· CharInBuffer% - довжина запису для файлу, відкритого в режимі довільного доступу (Random).
· Close - оператор, що закриває файл, пов'язаний із зазначеним дескриптором.
Важливо закривати файл після закінчення роботи з ним. Оператор «Close» звільняє покажчик файлу і пов'язану з ним область пам'яті.
При роботі з файлом, а саме при читанні з нього, дуже важливо визначення кінця файлу. Його можна визначити за допомогою функції EOF (End Of File):
EOF (FileHandle)
· EOF - ім'я функції;
· FileHandle - покажчик файлу, кінець якого визначається.
Функція повертає True (істина), якщо кінець файлу досягнутий, в іншому випадку повертається False (Брехня).
8.2. Читання і запис в текстовий файл
Текстовий файл відкривають у режимі доступу «Input», «Output» або «Append» (див табл. 15). Особливість цього режиму в тому, що в ньому працюють тільки з конкретними друкувати символами. Зі службовими символами працювати марно.
Для запису інформації використовують два оператора «Print» і «Write», синтаксис яких наступний:
Print # FileHandle%, VarBuffer [;]
Write # FileHandle%, VarBuffer [;]
· Print / Write - ключові слова операторів.
· #FileHandle% - покажчик файлу, в який буде поміщена інформація.
· VarBuffer - значення, яке буде записано в файл.
· ; - необов'язковий параметр, що використовується під час запису в текстовий файл, означає, що в такому значенні буде записано в цю ж сходинку, а при його відсутності - в наступну.
Для читання інформації з файлу застосовують оператори «Input» і «Line Input». Сінтаксісіханалогічендругдругу:
Line Input # FileHandle%, VarBuffer
Input # FileHandle%, VarBuffer
· Line Input / Input - ключові слова операторів.
· #FileHandle% - покажчик файлу, з якого буде зчитана інформація.
· VarBuffer - змінна, в яку буде зчитуватися інформація.
Різниця операторів «Line Input» і «Input» полягає в тому, що перший призначений тільки для текстових файлів, а другий - для будь-яких. У разі текстових файлів «Input» зчитує дані, що знаходяться в одному рядку, до першого роздільника (для текстових даних роздільником є «,» (кома), а для числових - «» (пропуск) і «,»), а «Line Input »зчитує відразу всю рядок, ігноруючи будь-які роздільники.
Примітка |
У Visual Basic немає засобів контролю формату раніше створених файлів. Тому символ «2» може бути лічений як відповідне число і навпаки. |
8.3. Робота з бінарними файлами
Файли відкриваються в бінарному форматіоператором «Open» в режимі «Binary». Відмінною рисою цього режиму є те, що робота з файлом орієнтована виключно на конкретні байти. Оскільки Visual Basic може адресуватися безпосередньо до потрібного місця файлу, цей режим також називається - режимом прямого доступу. Інша особливість цього режиму - наявність можливості одночасного запису і зчитування інформації в різні частини файлу не переоткривая його. Запис в файл, відкритий в бінарному режимі, здійснюється наступним синтаксисом:
Put # FileHandle%,, NameVar
· Put - ім'я оператора записи інформації.
· RecNumber - номер байта файлу, в який буде записана інформація (необов'язковий параметр).
· NameVar - змінна, вміст якої буде записано в файл.
Зчитування інформації з файлу в бінарному режимі відбувається за допомогою наступного оператора:
Get # FileHandle%,, NameVar
· Get - ім'я оператора записи інформації.
· FileHandle% - файловий покажчик.
· RecNumber - номер байта файлу, з якого буде зчитана інформація (не обов'язково параметр).
· NameVar - ім'я змінної, в яку буде поміщена зчитана інформація.
Оскільки бінарний режим орієнтований на байти інформації, то при читанні з файлу буферна змінна повинна мати строго певний тип: або «Byte», тоді буде лічено числове значення байта, або символьний фіксованої довжини в один символ, тоді байт буде лічений у вигляді символу, ANSI , код якого відповідає величині байта. Цей символ може бути навіть керуючий, чого не можна домогтися у випадку з текстовими файлами.
Примітка |
При відсутності параметра «RecNumber» запис або зчитування інформації буде відбуватися в наступному байті файлу після того, з яким до цього працювали.
8.4. маніпуляції графікою
Зберігати в файлах і витягати з них можна і графічні зображення. Щоб витягти з реєстрового файлу або файлу піктограми і привласнити його властивості «Picture» елементів управління «PictureBox» і «Image», використовується функція «LoadPicture ()» з наступним синтаксисом:
ImageCtrl.Picture = LoadPicture (FilePath)
· ImageCtrl - ім'я елемента управління вікном з малюнком, елемента управління зображенням або форми;
· LoadPicture - ім'я функції;
· FilePath - повне ім'я файлу.
SavePicture ImageCtrl .Picture, FilePath
· SavePicture - ім'я оператора;
· ImageCtrl - ім'я елемента управління вікном з малюнком, елемента управління зображенням або форми;
· Picture - ім'я властивості об'єкта, що відповідає за зображення;
· FilePath - повне ім'я файлу із зазначенням його розташування на диску.
8.5. Робота з даними в реєстрі
Для зберігання невеликих фрагментів інформації символьного формату можна використовувати реєстр Windows. У Visual Basic є чотири процедури, які можна використовувати для доступу до нього. Вони дуже прості в застосуванні, але мають один головний недолік: можна отримати доступ до даних тільки з певного розділу реєстру: «MyComputer \ HKEY _CURRENT _USER \ Software \ VB and VBA Program Settings». Щоб отримати доступ до інших розділів реєстру, потрібно скористатися спеціальними функціями «Win 32 API».
Щоб отримати значення параметра з присвяченого Visual Basic розділу реєстру Windows, потрібно використовувати наступну функцію:
MyString = GetSetting (VBKeyName, Section, Key [, Default])
· MyString - рядок для зберігання повертається функцією значення;
· GetSetting - ім'я функції.
· VBKeyName - строкове значення, яке є ім'ям внутрішнього підрозділу VB / VBA.
· Key - строкове значення, яке представляє ім'я параметра в розділі.
· Default - необов'язковий аргумент, значення якого буде повернуто, в разі помилки (відсутність параметра).
Для збереження деякого значення в реєстрі Windows використовується наступний оператор:
SaveSetting VBKeyName, Section, Key, MyString
· SaveSetting - ім'я оператора.
· MyString - строкова змінна, в яку буде поміщено знайдене значення.
Для отримання з реєстру масиву, що містить всі значення параметрів з певного підрозділу, використовується наступна функція:
MyVariant = SetAllSettings (VBKeyName, Section)
· MyVariant - повертається функцією масив значень типу «Variant».
· SetAllSettings - ім'я функції.
· Section - строкове значення, що представляє розділ або підрозділ конкретного додатка.
Для видалення цілого розділу параметрів застосовується оператор з наступним синтаксисом:
DeleteSetting VBKeyName, Section, Key
· DeleteSetting - ім'я оператора.
Контрольні питання для самоперевірки
- Як можна довгостроково зберігати деяку інформацію?
- Що таке файл?
- Які імена файлів ви знаєте?
- Наведіть синтаксис оператора «Open». Поясніть призначення його параметрів.
- Як можна організувати спільний доступ декількох додатків до одного файлу одночасно?
- Як визначити, що інформація у файлі вичерпана?
- Чому після роботи з файлом його рекомендується закривати?
- У чому ви бачите різницю режимів текстового та бінарного файлів?
- Як відбувається зчитування та запис даних в режимі текстового файлу?
- Як відбувається зчитування та запис даних в режимі бінарного файлу?
- У чому різниця операторів «Print» і «Write» при роботі з файлами?
- У чому різниця операторів «Input» і «Line Input» при роботі з файлами?
- Як можна працювати з графічними даними?
- Які основні принципи роботи з реєстром Windows?