Як працювати з файлами (бейсик)
Як працювати з файлами (Бейсік)
До сих пір ми вводили дані з клавіатури, а результати виводили на дисплей. Якщо ви працюєте з великими масивами вихідних даних, вводити їх з клавіатури вкрай незручно: немає можливості заздалегідь підготувати і перевірити інформацію, та й набирати її за запитами програми вельми втомлює. Дисплей в свою чергу не дозволяє зберегти отримані дані на машинному носії і використовувати їх в подальшій роботі.
Засоби обробки файлів, наявні в мові BASIC, різко розширюють ваші можливості.
Щоб почати роботу з файлом, перш за все треба його відкрити - оператором OPEN. Після цього ви можете видавати або команди читання чергової порції байтів з файлу-оператора INPUT, або команди записи в файл чергової порції байтів - оператором PRINT.
Працюючи з файлами в середовищі QBASIC (як і в будь-який інший середовищі), необхідно пам'ятати, що програма розрізняє файли за двома ознаками: за типом і за способом доступу до байтів, записаних у файлі.
1. Файли можна розділити по типу на текстові і нетекстові (виконавчі). Там же підкреслена умовність цього поділу: будь-який текстовий файл програміст може вважати і двійковим (але не навпаки).
Порція байтів, яку Новомосковскет програма при виконанні однієї команди INPUT (або яку записує програма командою PRINT), називається записом файлу.
У текстовому файлі записом вважається знайома вам рядок файлу, т. Е. Послідовність байтів до роздільників - символів Повернення каретки (код 13) і "Новий рядок" (код 10). Ці символи в запис не включаються.
За замовчуванням QBASIC вважає файли текстовими, т. З. Новомосковскет порцію байтів до символів 13 і 10, а при записі чергової порції байтів автоматично додає в її кінець символи 13 і 10.
Якщо ви явно оголосили файл двійковим (BINARY), програма перестає відрізняти звичайні символи від роздільників. Ви повинні явно вказувати довжину запису в байтах (наприклад, 14, 68, 160), і комп'ютер механічно пересилає зазначену вами бітову конфігурацію в програму (при читанні) або на диск (при записі), не цікавлячись їх змістом.
2. Програма розрізняє файли послідовного доступу (INPUT, OUTPUT, APPEND) і файли довільного доступу (RANDOM)
Якщо вказано довільний доступ, в будь-який момент можна звернутися до будь-якої порції даних в межах існуючого файлу - для читання або оновлення.
Ми будемо розглядати тільки текстові файли послідовного доступу, що відкриваються як вхідні (для читання -INPUT) або як вихідні (для запису - OUTPUT). На рис. 3.30 показані стандартні схеми обробки файлу послідовного доступу.
3.21.2. Техніка роботи з файлом
Для відкриття файлу використовується оператор OPEN:
OPEN ім'я файлу FOR режим AS #N
Файл - звичайна рядок символів, режим - ключове слово INPUT (вхідний) або OUTPUT (вихідний), N - порядковий номер файлу, що відкривається (N == 1,2.). Всі оператори роботи з файлом, описані нижче, працюють тільки з відкритим файлом і звертаються до нього не по імені, а просто за номером. Тому не можна одночасно відкрити два файли з одним і тим же номером. Закривши файл, ви можете використовувати його номер для відкриття іншого файлу.
Для освоєння роботи з вхідним і вхідним файлом вирішимо наступну задачу:
а) набрати в текстовому файлі кілька чисел;
б) ввести їх засобами BASIC, підсумувати і знайти середнє;
в) вивести в файл TESTO.TXT кількість чисел, суму м середнє.
'Блок 1. Читання вхідного файлу.
10 OPEN "TESTI.TXT" FOR INPUT AS # 1
20 sum = 0. k = 0 'сума і кількість
30 WHILE NOT EOF (1)
50 sum = sum + a. k = k + 1
'Блок 2. Запис вихідного файлу.
100 OPEN "TESTO.TXT" FOR OUTPUT AS # 1
110 PRINT # 1, k; sum; sred
130 PRINT k; sum; sred
Читання вхідного файлу організовано циклом WHILE. WEND.
Оператор CLOSE #N закриває файл із зазначеним номером.
Командами 100-120 ми відкриваємо вихідний файл TESTO.TXT, виводимо в нього значення k, sum і sred і закриваємо його.
Відкрийте отриманий текстовий файл (команда [File-Open]) і переконайтеся, що в єдиному рядку файлу дійсно записані кількість чисел, сума і середнє.
Рекомендуємо вам застосовувати для читання файлу не оператор INPUT ( "Введення"), а оператор LINE INPUT ( "Введення рядка"). Принципова різниця між цими операторами полягає в наступному. INPUT, Новомосковський запис (рядок файлу), як би імітує введення даних з дисплея: відкидає початкові і хвостові прогалини в рядку, а кому інтерпретує як роздільник даних. LINE INPUT Новомосковскет рядок цілком, до роздільників 13 і 10.
Приклад. Познайомившись зі способами обробки текстових файлів, ви без зусиль зможете написати коротку "концертну" програму, яка буде виконувати будь-яку мелодію, записану в текстовому файлі. Наприклад, наберіть текст мелодії "Елізе" в текстовому файлі ELIZA.TXT (опустіть PLAY і лапки):
L8 Оз е. Напишіть програму:
INPUT "Введіть ім'я файлу-мелодії", fl $
OPEN fl $ FOR INPUT AS # 1
LINE INPUT # 1. ml $
Доступ до файлів. (Бейсік)
# 9; Щоб почати роботу з файлом його необхідно відкрити командою OPEN. Після цього можна проводітm команду читання оператором INPUT або команду записи в файл оператором PRINT. Працюючи з файлами необхідно пам'ятати, що програма розрізняє файли за двома ознаками: за типом і за способом доступу.
Якщо вказано довільний доступ, то в будь-який момент часу можна звернутися до будь-якого фрагменту файлу і прочитати його або зробити запис.
Надалі ми будемо розглядати тільки текстові файли послідовного доступу, що відкриваються як вхідні, (для читання -INPUT) або як вихідні (для запису - OUTPUT)
Текстовий файл трактується як сукупність рядків змінної довжини. Доступ до кожної можливий лише послідовно, починаючи з першої. При створенні текстового файлу в кінці кожного рядка ставиться спеціальний ознака EOLN, а в кінці всього файлу EOF.
Техніка роботи з файлом.
Для відкриття файлу використовується оператор OPEN:
OPEN ім'я файлу FOR режим AS # N
Файл звичайна рядок символів, режим - команда INPUT або OUTPUT N - порядковий номер файлу, що відкривається. Всі оператори розглядаються нижче працюють тільки з відкритим файлом і звертаються до нього не по імені а по номеру.
Завдання набрати в текстовому файлі test.txt кілька чисел
Ввести їх через БЕЙСІК, підсумувати і знайти середнє,
Ввести в файл ASD.txt кількість чисел, суму і середнє.
REM читання вхідного файлу.
OPEN "test.txt" FOR INPUT AS # 1
sum = sum + a: k = k + 1