![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Вже в ранніх діалектах мови Бейсік (наприклад, у QBasic) використовувалися засоби для роботи з файлами. Зрозуміло, ці засоби збереглися й у сучасних версіях мови Visual Basic. Це оператори для роботи з текстовими файлами.
Текстові файли називають також файлами з послідовним доступом чи просто послідовними файлами. Так вони називаються тому, що запис і читання фрагментів даних при роботі з цими файлами робиться строго послідовно. Їх можна порівняти з аудіо чи відео записами на магнітофонній стрічці: для пошуку потрібного Вам місця на стрічці Ви змушені перемотувати стрічку і послідовно її переглядати (чи прослухувати).
Послідовні файли використовують для збереження інформації в текстовому форматі (у вигляді ланцюжка ASCII кодів). Вони можуть оброблятися будь-яким текстовим редактором.
Оператори мови, призначені для роботи з послідовними файлами, дозволяють:
Відкриття файлу. Для відкриття текстового файлу використовується оператор Open, що має наступний синтаксис:
Open Ім’яФайлу For РежимРоботи As #ДескрипторФайлу |
Ім’яФайлу — це або рядок символів, взятий у лапки, або вираз, значенням якого є рядок символів. Він являє собою шлях (маршрут) до файлу, що відкривається.
Якщо зазначене тільки ім'я файлу (наприклад, «Tecm.txt»), файл повинен знаходитися в поточному каталозі (папці).
РежимРоботи — це одне з трьох ключових слів:
ДескрипторФайлу — це будь-яке ціле число від 1 до 511. Воно служить ідентифікатором файлу в програмі.
3акpиття файлів. Усі відкриті текстові файли закриваються однаково — за допомогою оператора Close. Його синтаксис наступний:
Close # [ СписокДескрипторів ] |
СписокДескрипторів — це записані через кому дескриптори (ідентифікатори) файлів, що повинні бути закриті. Якщо СписокДескрипторів відсутній, будуть закриті усі відкриті файли.
Приклад 4.1. Допустимо, що в папці Тести знаходяться 2 файли з іменами Tecml.txt і Tecm2.txt. У них міститься інформація, необхідна для створення третього файлу з ім'ям Результат.txt. Цей файл повинен бути поміщений у папку Результати. Допустимо також, що обидві згадані папки знаходяться в папці VB на пристрої С. Наступні рядки програмного коду демонструють відкриття і закриття зазначених файлів:
Код 4.1. |
Open "C:\VB\Тести\Тест1.txt" For Input As #1 Open "C:\VB\Тести\Тест2.txt" For Input As #2 Open "C:\VB\Результати\Результат.txt" For Oput As #3 |
Запис у файл. Записати дані в текстовий файл можна двома способами:
Обидва оператори записують дані у файл текстовими рядками.
Текстовий рядок (не слід плутати поняття текстового рядка з поняттям рядка як типу даних String) (рядок тексту) — це послідовність символів, що закінчується знаком переходу на новий текстовий рядок чи знаком повернення каретки (коди 13 і 10 ASCII).
Текстовий файл являє собою послідовність текстових рядків.
Синтаксис операторів запису в текстовий файл однаковий:
Write # ДескрипторФайлу, [ СписокЗначень ] Print # ДескрипторФайлу, [ СписокЗначень ] |
ДескрипторФайлу — це ціле число, що збігається з ідентифікатором відкритого для запису файлу.
СписокЗначень — це записані через Роздільник значення (чи вирази, значення яких обчислюються, зокрема змінні). Якщо СписокЗначень відсутній, у файл буде записаний порожній рядок.
Логіка роботи операторів Write і Print різна.
Оператор Write. Роздільником у СпискуЗначень є кома. СписокЗначень проглядається послідовно, і елементи цього списку записуються в один текстовий рядок файлу через кому. Елементи типу String беруться у лапки. Після запису останнього елемента записується символ переходу на новий рядок.
Оператор Print. Елементи СпискуЗначень у цьому операторі повинні бути розділені або крапкою з комою, або комою. Від цього залежить, як вони будуть записані в текстовий рядок файлу:
Крім того, у СпискуЗначень оператора Print можуть бути присутніми наступні функції:
Оператор Print зручний для ретельного редагування тексту вихідного файлу, а оператор Write краще застосовувати в тому випадку, коли вихідний файл використовуватиметься надалі як вхідний для інших програм.
Приклад 4.2. Напишемо програму запису в текстовий файл з ім'ям РікНародження.txt наступних рядків:
«Іванов», «Іван», 1989
«Кузьмук», «Микола», 1990
«Гаврилюк», «Степан», 1986
«Сушко», «Людмила», 1985
(У кожнім рядку — прізвище, ім'я і рік народження.)
Випадок 1. Будемо мати на увазі, що вихідний файл надалі буде використовуватися в роботі інших програм. Тому в якості оператора запису текстового рядка скористаємося оператором Write:
Код 4.2 |
![]() |
Випадок 2. А тепер створимо текстовий файл з ім'ям РікНародження2.txt, що містить ту ж інформацію, що і попередній файл з ім'ям РікНародження1.txt. Але для його створення ми використовуємо не оператор Write, а оператор Print:
Код 4.3 |
![]() |
Як будуть виглядати текстові рядки файлів РікНародження1.txt і РікНародження2.txt, можна довідатися, відкривши ці файли для читання, прочитавши їх і надрукувавши кожен рядок на екранній формі. (Про це ми поговоримо трохи пізніше.)
Результати цієї роботи представлені на мал. 4.1:
![]() | ![]() |
а) | б) |
Мал. 4.1. Результат читання текстового файлу: а — записаного за допомогою оператора Write; б — записаного за допомогою оператора Print |
Читання з файлу. Читати дані з текстового файлу можна різними способами:
Оператор Input. Оператор Input має наступний синтаксис:
Input #ДескрипторФайлу СписокЗмінних |
ДескрипторФайлу — це ціле число, що збігається з ідентифікатором відкритого для читання файлу.
СписокЗмінних — це записані через кому змінні будь-якого типу. Наприклад:
Прізвище$, Ім'я$, РікНародження%
(Нагадаємо, що суфікси $ і % вказують на тип змінних — String і Integer відповідно. Їх можна використовувати замість оголошення типу змінних за допомогою оператора Dim.)
Неважко догадатися, що в кожному текстовому рядку файлу кількість і тип значень повинні збігатися з кількістю і типом змінних у СпискуЗмінних. Якщо ж такого збігу не буде, результатом читання може виявитися щось несподіване для Вас. Наприклад, якщо Ви помилково замість типу String припишете змінній який-небудь числовий тип, замість рядка символів (прізвища, імені і т.п.) Ви одержите 0.
Найчастіше читання з текстового файлу робиться циклічно, за допомогою оператора циклу з умовою (Do While... Loop чи Do Until... Loop). Умовою закінчення циклу є спроба прочитати дані після читання останнього текстового рядка. Ця спроба приводить до того, що значенням функції EOF (Ім'я функції EOF складено з перших букв словосполучення end of file. Єдиним аргументом функції є дескриптор файлу, відкритого для читання.) буде True (Істина).
Приклад 4.3. Представимо програму, що поміщає всі прізвища, імена і дати народження з приведеного вище файлу з ім'ям «РікНародження1.txt» у 3 вікна списку — об'єкти класу ListBox екранної форми:
Код 4.4 |
![]() |
![]() |
Мал. 4.2. Читання текстового файлу за допомогою оператора Input і розміщення даних у трьох вікнах списку |
Оператор Line Input. Оператор Line Input має наступний синтаксис:
Line Input #ДескрипторФайлу Змінна |
ДескрипторФайлу — це ціле число, що збігається з ідентифікатором відкритого для читання файлу.
Змінна — змінна типу String чи Variant.
Результатом роботи оператора Line Input є присвоєння Змінній значення — всього чергового текстового рядка файлу.
Приклад 4.4. Як приклад роботи оператора Line Input розглянемо читання одного з двох файлів прикладу 4.2:
Код 4.5 |
![]() |
Результати роботи програми коду 4.5 були показані на мал. 4.1 (а — для файлу РікНародження1.txt і б — для файлу РікНародження2.tхt).
Функція Input — це функція двох аргументів. Перший її аргумент — це кількість символів, який треба прочитати із вхідного файлу. Другий аргумент — ідентифікатор (дескриптор) файлу, відкритого для читання. Значення, що повертається, - прочитаний текст у вигляді символьного рядка.
Найчастіше цю функцію використовують для одночасного читання всього текстового файлу і розміщення його в текстовому полі екранної форми. Для цього необхідно з'ясувати розмір файлу в символах. Робиться це за допомогою функції LOF (Ім'я функції LOF складено з перших букв словосполучення length of file — довжина файлу. Значення функції LOF має тип Long.), єдиним аргументом якої є ідентифікатор файлу, відкритого для читання.
Приклад 4.5. Як приклад розглянемо 4 рядки коду, що служать для того, щоб записати в об'єкт Text1 класу Текстове поле вміст усього текстового файлу з ім'ям РікНародження1.txt і ідентифікатором #1:
Код 4.6 |
![]() |
Результат роботи цієї програми — на мал. 4.3.
Слід зазначити, що для текстового поля, в яке поміщається вміст файлу, варто встановити значення властивості MultiLine рівним True, а значення властивості ScrollBars рівним Vertical. Дивлячись на мал. 4.3, неважко догадатися про призначення цих властивостей: властивість MultiLine забезпечує багаторядкову видачу даних у текстове поле, а властивість ScrollBars дозволяє встановити на текстовому полі смуги прокручування (у даному випадку, вертикальну смугу).
![]() | Мал. 4.3. Текстове поле, у яке поміщений вміст текстового файлу |
Нові поняття:
Дата публикования: 2014-12-28; Прочитано: 1088 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!