6. Текстові файли
Текстовий файл — це файл, що містить рядки тексту. Розглянемо створення та використання таких файлів на прикладах.
6.1. Створення та використання
Програма |
![]() |
Результати |
Коментарі
- у рядку 7 створюється об’єкт файлу типу «Scripting.FileSystemObject» за допомогою функції CreateObject(«Scripting.FileSystemObject»). Такий об’єкт дозволяє отримати доступ до будь-якого файлу в системі, а не лише до текстових файлів.
- У рядку 9 створюється об’єкт «TextStream». Створення цього об’єкта пов’язане зі створенням файлу testfile.txt. Цей файл позначається не абсолютним іменем на кшталт c:\dir1\dir2\....\testfile.txt, а відносним іменем testfile.txt. Отже, він буде створений у каталозі, з якого буде запущено команду на виконання файлу.
- Файлова система Windows не розрізняє таких понять, як «текстовий файл» чи «нетекстовий файл». Вона розпізнає лише файли. Тому саме програма, яка використовує цей файл, повинна вирішити, чи обробляти його як текстовий файл, чи ні.
- У рядку 9 створюється об’єкт, з якого походить команда set, що використовується для присвоєння. Створення об’єкта текстового файлу передбачає створення двох об’єктів:
- створення об’єкта Scripting.FileSystemObject (рядок 7)
- а потім — створення об’єкта «TextStream» (текстовий файл) за допомогою методу OpenTextFile об’єкта Scripting.FileSystemObject, який приймає кілька параметрів:
- ім’я файлу, що обробляється (обов’язкове)
- режим використання файлу. Це ціле число з 3 можливими значеннями:
- 1: використання файлу для читання
- 2: використання файлу для запису. Якщо файл ще не існує, а третій параметр присутній і має значення true, файл створюється; інакше — ні. Якщо файл уже існує, його перезаписують.
- 8: використання файлу в режимі додавання, c.a.d. запис у кінець файлу. Якщо файл ще не існує, а третій параметр присутній і має значення true, файл створюється; інакше — ні.
- У рядку 11 записується рядок тексту за допомогою методу WriteLine створеного об’єкта TextStream.
- У рядку 13 файл «закривається». Після цього в нього більше не можна ні записувати, ні читати.
- У рядку 16 створюється новий об’єкт «TextStream» для роботи з тим самим файлом, що й раніше, але цього разу в режимі «додавання». Нові рядки будуть записані після існуючих.
- У рядку 18 записуються два нових рядки, враховуючи, що константа vbCRLF є позначкою кінця рядка у текстових файлах.
- У рядку 20 файл знову закривається
- у рядку 23 файл знову відкривається в режимі «читання»: ми будемо читати вміст файлу.
- У рядку 27 зчитується рядок тексту за допомогою методу ReadLine об’єкта TextStream. Коли файл щойно «відкрито», курсор розташовується на першому рядку тексту цього файлу. Після того, як цей рядок прочитано методом ReadLine, курсор переміщується на другий рядок. Таким чином, метод Readline не тільки зчитує поточний рядок, але й автоматично «переходить» до наступного рядка.
- Щоб обробити всі рядки тексту, метод ReadLine потрібно застосовувати повторно в циклі. Цей цикл (рядок 26) завершується, коли атрибут AtEndOfStream об’єкта TextStream набуває значення true. Це означає, що у файлі більше немає рядків для зчитування.
6.2. Випадки помилок
Існують два типові випадки помилок:
- відкриття для читання файлу, який не існує
- відкриття для запису або додавання файлу, якого не існує, при цьому третій параметр у виклику методу OpenTextFile має значення «false».
Наступна програма демонструє, як виявити ці помилки:
6.3. Додаток IMPOTS із текстовим файлом
Повернемося до програми розрахунку податку, припустивши, що дані, необхідні для розрахунку податку, містяться у текстовому файлі з назвою data.txt:
12620 13190 15640 24740 31810 39970 48360 55790 92970 127860 151250 172040 195000 0
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 0,55 0,6 0,65
0 631 1290,5 2072,5 3309,5 4900 6898,5 9316,5 12106 16754,5 23147,5 30710 39312 49062
Ці три рядки містять, відповідно, дані з таблиць граничних значень coeffR та coeffN програми. Завдяки модульній структурі нашої програми зміни в основному стосуються процедури getData, яка відповідає за формування цих трьох таблиць. Нова програма має такий вигляд:
Програма |
|
Коментарі:
- у текстовому файлі data.txt значення можуть бути розділені одним або кількома пробілами, тому неможливо використати функцію split для вилучення значень із рядка. Довелося скористатися регулярним виразом
- функція getData, окрім трьох масивів меж (coeffR, coeffN), повертає результат, що вказує, чи сталася помилка. Цей результат є масивом, що складається з двох елементів. Перший елемент — це код помилки (0, якщо помилки немає), другий — повідомлення про помилку, якщо вона сталася.
- Функція getData не перевіряє правильність значень, знайдених у файлі data.txt. У реальних умовах вона повинна це робити.
