Способы доступа к файлам

QBASIC поддерживает основные существующие методы доступа к данным в файлах:

- последовательный,

- прямой,

- бинарный.

При последовательном доступе запись можно прочитать, лишь просмотрев все предыдущие. Данные файлов последовательного доступа записаны в кодах ASCII. Записи такого файла можно просматривать с экрана, обрабатывать всеми текстовыми редакторами. Однако при большом объеме такого файла процесс его обработки занимает больше времени по сравнению с файлом другого метода доступа.

Файлы прямого доступа хранят данные в виде отдельных записей определенной, одинаковой для всех длины. Работа с их данными осуществляется быстрее, хотя они могут занимать больше места на носителе. Файлы такого типа могут размещаться лишь на устройствах обеспечивающих считывание данных практически из любого места носителя. Таким устройством, например, не является накопитель на магнитной ленте.

Бинарный способ доступа к данным позволяет рассматривать содержимое файла как последовательность байтов и оперировать непосредственно с байтами

Действия с файлами

Одни и те же файлы могут обрабатывать различные программы. Любые действия с файлами состоят из следующих обязательных операций:

- открытия файла;

- чтения или записи обрабатываемых данных:

- закрытия файла.

Нельзя использовать открытый файл одновременно и для чтения, и для записи данных.

Оператор OPEN открытия файла

Синтаксис:

OPEN “имя файла” FOR<режим> AS<#номер_файла>[LEN <длина_записи>]

где

< режим> – режим работы с файлом,

<номер_файла> – целое число от 1 до 255,

# - необязательный знак, предваряющий номер файла,

<длина записи> – по умолчанию - 128 байт для файлов прямого доступа, для файлов последовательного доступа – 512 байт).

Режимы работы с файлами

Этот параметр в QBASIC может иметь одно из следующих значений:

OUTPUT – создает и открывает новый файл для записи в него данных,

APPEND – открывает имеющийся файл для добавления в него новых данных,

INPUT – открывает существующий файл для чтения записанных в нем данных.Если файла нет, то будет выдано сообщение об ошибке.

BINARY - бинарный режим файла. В бинарном режиме можно считывать или записывать информацию в позицию любого байта, используя операторы GETи PUT.

RANDOM - файл открыт в режиме прямого доступа к записям файла.

Если в режиме OUTPUT открыть существующий файл, то уже записанные в нем данные будут стерты.

В режиме APPEND новые данные всегда помещаются в конец файла, после последней записи.

Номер файла

Оператор OPENприсваивает открываемому файлу задаваемый номер для более удобного использования в качестве имени файла. Данный номер нельзя присваивать никакому другому файлу, пока файл с этим номером открыт.

Пример:

OPEN “DATA” FOR INPUT AS FILE #2

Этот оператор открывает доступ к уже созданному файлу с именем DATA. Номер файла данных 2. Записи будут считываться из внешней памяти в оперативную память. То есть для чтения.

Пример:

OPEN “READ” FOR OUTPUT AS FILE #1

Этот оператор открывает файл для записи данных (говорят - для. создания набора данных).

Чтение данных из файла прямого доступа и бинарного файла оператором GET

Считывает запись из файла в переменную.

Синтаксис:

GET [#]номер_файла [,[номер_записи][, переменная]] ,

где

<номер_файла> - номер открытого файла,

<номер_записи> - номер записи для чтения (для файлов прямого доступа) или позиция байта, где начинается чтение записи (для двоичных файлов),

<переменная> - переменная, используемая для приема данных из файла (обычно определенного пользователем типа данных).

Чтение данных из файла последовательного доступа оператором INPUT

Синтаксис:

INPUT# <номер файла>, <переменные> ,

где

<переменные> - список переменных, куда размещаются считанные данные.

Запись данных в файл прямого доступа и бинарный файл оператором PUT

PUT записывает содержимое переменной в файл прямого доступа или бинарный файл.

Синтаксис:

PUT #номер_файла[,[номер_записи][, переменная]] ,

Где

<номер_записи> - номер записи (для файлов прямого доступа) или позиция байта (для двоичных файлов), куда будут записаны данные из переменной,

<переменная> - переменная, содержащая данные для записи в файл (обычно определенного пользователем типа данных).

Запись данных в файл последовательного доступа оператором PRINT или WRITE

Синтаксис:

PRINT # <номер_файла>, <выражения>

WRITE # <номер_файла>,< выражении>я ,

где

< выражения> - список констант и/или переменных, значения которых записываются в файл.

Результаты работы операторов одни и те же. Операторы записывают данные в таком виде, чтобы они могли быть считаны оператором INPUT.

Пример:

CLS

INPUT "Введите имя файла: ", n$

OPEN n$ FOR OUTPUT AS #1

PRINT #1, "Это хранится в файле"

Закрытие файла

После окончания работы с файлом - чтения или записи его необходимо закрыть. Закрытие фала осуществляется операторомCLOSE.

Синтаксис: CLOSE {# номер_файла}

Оператор закрывает файл с указанным номером. Если номер опустить, то оператор закроет все файлы, открытые в данный момент в программе. При отсутствии оператора CLOSE все открытые файлы закрываются оператором END.

Пример. Открытие файла прямого доступа, запись в него и закрытие файла:

‘Определение пользовательского типа данных – содержит две переменных разных типов

TYPE TestRecord

Student AS STRING * 20

Score AS SINGLE

END TYPE

‘резервируем в памяти переменную заданного выше типа

DIM MyClass AS TestRecord

OPEN "FINAL.DAT" FOR RANDOM AS #1 LEN = LEN(MyClass)

MyClass.Student = "Олег Дворченко"

MyClass.Score = 99

PUT #1, 1, MyClass

CLOSE #1

OPEN "FINAL.DAT" FOR RANDOM AS 1 LEN = LEN(MyClass)

GET #1, 1, MyClass

PRINT "СТУДЕНТ:", MyClass.Student

PRINT "СЧЕТ:", MyClass.Score

CLOSE #1

KILL "FINAL.DAT"

Проверка достижения конца файла.

Достижение конца файла можно определить при помощи функции EOF. При достижении конца файла она возвращает "истинно" (не ноль).

Синтаксис функции: EOF <#номер_файла > ,

где #номер_файла - номер открытого файла.

Пример:

CLS

OPEN "ТЕСТ.ДАН" FOR OUTPUT AS #1

FOR i% = 1 TO 10

WRITE #1, i%, 2 * i%, 5 * i%

NEXT i%

CLOSE #1

OPEN "ТЕСТ.ДАН" FOR INPUT AS #1

DO

LINE INPUT #1, a$

PRINT a$

LOOP UNTIL (EOF(1))

Удаление файлов

Удалить файл или группу файлов можно оператором KILL.

Синтаксис оператора: KILL<список файлов>

В списке файлов могут быть полные имена файлов. Допустимо применять символы-заменители ? и * для выделения группы файлов.

CLOSE

OPEN n$ FOR INPUT AS #1

INPUT #1, a$

PRINT "Чтение из файла: "; a$

CLOSE

Лекция 14

Наши рекомендации