Файлы произвольного доступа
Произвольный (Random) доступ для ввода или вывода применяется в случае, когда записи в файле имеют фиксированную длину.
Открывается файл для произвольного доступа с помощью оператора
Open имя_файлаFor Random [Access доступ] [Lock] As # номер [Len = длина_записи]
В квадратных скобках указаны необязательные параметры.
ПараметрAccess позволяет задать тип доступа к открываемому файлу. Если он не указан, то по умолчанию используется значение ReadWrite (возможно как чтение, так и запись).
Параметр Lock позволяет задать права доступа к открытому файлу и указывается, если один и тот же файл может использоваться несколькими пользователями или приложениями. Он может принимать следующие значения:
1) Shared (общий) – файл может использоваться всеми процессами для считывания и для записи;
2) LockRead (закрыт для чтения) – никакой другой процесс не может считывать данные из файла;
3) LockWrite (закрыт для записи) – никакой другой процесс не может записывать данные в файл;
4)LockReadWrite (закрыт для чтения и записи) – никакой другой процесс не может ни считывать, ни записывать данные в файл;
Параметр Len задает длину одной записи в байтах
Для чтения данных используется операторGet:
Get # номер , номер_записи, переменная
Для записи – оператор Put:
Put # номер , номер_записи, переменная
В качестве примера рассмотрим следующую задачу. Необходимо создать файл с именем Spisok.dat, в котором каждая запись состоит из двух полей. Первое поле для записи фамилии (типа String длиной 20 символов), вторая для записи личного номера (типа Ineger).
Для того, чтобы в одной записи сохранить значения данных различных типов используем в программе пользовательский тип данных, которому присвоим наименование Person. Кроме того, опишем массив Mass из 100 элементов типа Person.
Type Person
FamAs String* 20
Nom As Integer
End Type
DimMass(1 to 100) AsPerson
В процедуре, которая открывает файл для записи сформированного массива с фамилиями и номерами будут следующие операторы
Private Sub Command1_Click()
Open “Spisok.dat”For Random As #1 Len = 22
For i =1 to 100
Put #1, i , Mass(i)
Nexti
Close #1
End Sub
Предположим, что в дугой процедуре нужно открыть файл Spisok.dat, прочитать записи и вывести значения полей каждой записи на печать.
Private Sub Command2_Click()
DimzapAsPerson
DimnomerAs Integer
Open “Spisok.dat”For Random As #1 Len = 22
nomer = 1
Do until EOF(1)
Get #1, nomer , zap
Printzap.Fam, zap.Nom
nomer = nomer +1
Loop
Close #1
End Sub
Примечание. В приведенных выше примерах операторе Open параметру Len присвоено значение 22. Это длина в байтах считываемой записи (20 байт занимает поле Fam и 2 байта поле Nom). Можно было бы поступить по-другому, воспользовавшись функциейLen(переменная), указав в качестве аргумента имя zap – переменной введенного нами типа Person.:
Open “Spisok.dat”For Random As #1 Len = Len(zap)
Файлы прямого доступа можно использовать и для записи стандартных типов данных. Длина каждой записи при этом определяется типом данных (см. табл. 3).
Дата добавления: 2016-02-11; просмотров: 814;