|
|||
Учебник QbasicСтр 1 из 2Следующая ⇒ Учебник Qbasic 3. ФАЙЛЫ. РАБОТА В БЕЙСИКЕ С ФАЙЛАМИ ПОСЛЕДОВАТЕЛЬНОГО И ПРЯМОГО ДОСТУПА Если необходимо использовать набор данных или программу многократно, то необходимо сохранить их на внешнем устройстве памяти (например, диске или дискете). Для этого создается файл. Файл должен иметь имя. Имя состоит из двух частей: собственно имя и расширение имя.расширение Имя может содержать до 8 символов, расширение - до трех. Могут использоваться следующие символы A - z 0 - 9 ( ) @ # $ % ^ & ! - _ / ' ~ Полное имя файла в MS DOS содержит весь путь по дереву от корневой директории к нужному файлу. Например, C:\ST\LAB\work.bas, где C - имя диска, ST - имя директории на диске, LAB - имя поддиректории директории ST, work.bas - имя программы на Бейсике. Далее речь пойдет только о файлах данных. 3.1. Файлы последовательного доступа Последовательный файл состоит из записей, доступ к которым осуществляется последовательно, т.е. n-я запись следует за (n - 1)-ой как при формировании файла, так и при считывании из него. Создание последовательного файла включает следующие шаги: открытие файла (оператор OPEN), вывод данных в файл (операторы PRINT#, WRITE#, или PRINT# USING) и закрытие файла (оператор CLOSE). Считывание из последовательного файла включает следующие шаги: открытие файла, ввод данных из файла (операторы INPUT#, INPUT$, LINE INPUT#), закрытие файла. Оператор OPEN подготавливает файл для чтения из файла (INPUT) или записи в файл (OUTPUT, если создается новый файл, APPEND, если добавляются записи в уже существующий файл). INPUT OPEN имя файла FOR OUTPUT AS #номер файла APPEND Оператор CLOSE закрывает файл, т.е. делает невозможным чтение или запись. CLOSE [#номер файла] Оператор CLOSE без параметров закрывает все открытые файлы. Единицей информации, которая передается при записи в файл или чтении из файла, является запись (логическая запись). Запись делится на поля. Каждое поле связано с одним элементом данных. Могут быть созданы два типа последовательных файлов: 1) с разделителями полей, когда каждое поле автоматически отделяется специальным символом (например, запятой). Для создания такого файла используется оператор WRITE#, для чтения из него - оператор INPUT#. Данные в файле хранятся в таком виде, как если бы они набирались на клавиатуре при выполнении оператора INPUT, т.е. разделены запятыми и каждая запись заканчивается переводом строки. Оператор INPUT# имеет вид INPUT #номер файла, список переменных где переменные в списке по типу должны соответствовать данным в файле. 2) поля не разделены, и каждая запись точно такая же, как если бы эти данные отображались на экране или печатались на принтере. Для создания такого файла используется оператор PRINT#, для чтения из него - операторы INPUT$ или LINE INPUT#. Оператор INPUT$ передает из файла сразу всю строку (запись) указанной длины n в символьную переменную, например, ST$ ST$ = INPUT$ (n, #номер файла) Оператор LINE INPUT# передает в указанную переменную ST$ всю строку независимо от ее длины LINE INPUT #номер файла, ST$ Пример (с разделителями полей): OPEN "SEQU.DAT" FOR OUTPUT AS #1 ST$ = " ИВАНОВ " INT% = 1972 FLOT! = 75.3 'теперь записываем строку в файл WRITE #1, ST$, INT%, FLOT! ST$ = " ПЕТРОВ " INT% = 1975 FLOT! = 62.5 'записываем другую строку в файл WRITE #1, INT%, ST$, FLOT! CLOSE #1 END Созданный файл будет следующим " ИВАНОВ ", 1972, 75.3 1975, " ПЕТРОВ ", 62.5 Следующая программа читает из этого файла: OPEN "SEQU.DAT" FOR INPUT AS #1 ST$ = " " INT% = 0 FLOT! = 0 'теперь читаем строку текста из файла INPUT #1, ST$, INT%, FLOT! PRINT ST$, INT%, FLOT! ST$ = " " INT% = 0 FLOT! = 0 'читаем другую строку INPUT #1, INT%, ST$, FLOT! PRINT INT%, ST$, FLOT! CLOSE #1 END Пример (без разделителей полей): OPEN "SEQUEN.DAT" FOR OUTPUT AS #1 ST$ = " ИВАНОВ " INT% = 1972 FlOT! = 73.1 'записываем строку текста в файл PRINT #1, ST$, INT%, FLOT! ST$ = " ПЕТРОВ " INT% = 1975 FLOT! = 64.3 'запишем другую строку, используя оператор PRINT #1, USING "+####$#.##^^^^"; INT%, ST$, FLOT! CLOSE #1 END Содержание созданного файла будет таким: ИВАНОВ 1972 73.1 1975 ПЕТРОВ 6.43Е+01 Следующая программа читает из этого файла: OPEN "SEQUEN.DAT" FOR INPUT AS #1 ST$ = " " ST$ = INPUT$ (80,#1) PRINT ST$ LINE INPUT #1, ST$ PRINT ST$ CLOSE #1 END ================================
|
|||
|