Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Текстові файли



Вже в ранніх діалектах мови Бейсік (наприклад, у 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

Запис у файл. Записати дані в текстовий файл можна двома способами:

  1. за допомогою оператора Write;
  2. за допомогою оператора Print.

Обидва оператори записують дані у файл текстовими рядками.

Текстовий рядок (не слід плутати поняття текстового рядка з поняттям рядка як типу даних 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; Прочитано: 1062 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...