![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Произвольный доступ
Произвольный доступ также применяется для извлечения данных из ASCII-файлов, однако по сравнению с последовательным доступом он отличается большей гибкостью. Произвольный доступ позволяет в любой момент перейти к любой позиции файла и прочитать требуемые данные. В результате происходящее больше похоже на операции с базой данных, чем на работу с последовательным файлом. Кроме того, произвольный доступ ускоряет обращение к данным, так как при нем задается конкретная позиция файлового указателя внутри файла. Чтобы открыть файл для произвольного доступа, задайте параметр Random:
Open " C: \data\test.txt" For Random As FileNo Len=10
Перед тем как задавать параметр Len, необходимо определить длину каждой строки данных в символах. Строка данных называется записью (по аналогии с записями баз данных). В данном разделе будет использоваться именно этот термин. Предположим, каждая запись содержит информацию о некотором человеке — фамилию, имя и краткое описание. Все эти параметры можно объединить в одну строку и записать в файл, но это затруднит дальнейшее чтение данных и их преобразование в осмысленный формат. Например, если воспользоваться следующим фрагментом:
Private Sub SaveFile() Dim FileNo As Integer Dim RecNo As Integer Dim FName As Integer Dim LName As Integer Dim Lineout As Integer
FName = " Джейн" LName = " Доу" Desc = " Супруга Джона Доу" LineOut = LName & FName & Desc FileNo = FreeFile RecNo = 1
Open " C: \test.txt" For Random As FileNo Put #FileNo, RecNo, LineOut Close FileNo End Sub
то прочитанная запись будет выглядеть так:
ДоуДжейнСупруга Джона Доу
Некрасиво! К тому же было бы нерационально писать код для извлечения имен из этой строки, поскольку у разных людей имена имеют разную длину. Вместо этого в подобной ситуации следует объявить свой собственный тип переменной с помощью ключевых слов Type...End Type. Оператор Type предназначен для определения нестандартных типов переменных. Он особенно полезен в ситуациях наподобие той, что описана выше. Однако перед тем, как использовать оператор Type, необходимо убедиться, что в проекте присутствует хотя бы один программный модуль. Visual Basic не позволяет объявлять типы переменных в модулях форм. Следовательно, новый тип переменных должен быть объявлен в секции (General)(Declarations) программного модуля. Добавьте следующий фрагмент:
Type UserInfoRecord LName As String * 15 FName As String * 15 Desc As String * 50 End Type
и приведите процедуру формы к следующему виду:
Private Sub SaveFile() Dim FileNo As Integer Dim RecNo As Integer Dim usr As UserInfoRecord
usr.FName = " Джейн" usr.LName = " Доу" usr.Desc = " Супруга Джона Доу"
FileNo = FreeFile RecNo = 1
Open " C: \test.txt" For Random As FileNo Len = 80 Put #FileNo, RecNo, usr Close FileNo End Sub
Сейчас я кратко поясню смысл оператора Type. Чтобы создать тип переменной, следует вставить объявления нескольких переменных внутрь конструкции Type...End Type. Тип, созданный в нашем примере, делится на три самостоятельные строковые переменные — LName, FName и Desc. Обратите внимание на то, что при объявлении переменной указывается ее длина. LName и FName определяются как строковые переменные с максимальной длиной 15 символов, а длина Desc может достигать 50 символов. Если сложить вместе все длины строк-компонентов, получается 80 символов. Поскольку в файл будет записываться именно эта переменная, суммарная длина совпадает с размером записи. Чтобы воспользоваться переменной типа User.InfoRecord, необходимо объявить ее с ключевым словом Dim, как и любую другую переменную. Тем самым вы сообщаете Visual Basic, к какому типу она относится. Затем можно обращаться к любой из внутренних переменных, указав имя составной переменной, за ним — оператор «точка» и имя внутренней переменной. Внутренней переменной можно присвоить нужное значение или же прочитать ее оператором Get#. Если запустить предыдущий фрагмент, запись сохраняется в файле. На рис. 8.4 показано, как выглядит содержимое этого файла в программе Notepad.
Рис. 8.4. Запись в текстовом файле
Произвольный доступ удобен для работы со списками данных, которые поставляются в виде ASCII-файлов. Тем не менее многие файлы не укладываются в этот формат. Они могут иметь заголовки различной длины или другие отклонения в структуре файла. Возможно, реляционная база данных окажется более удобной. Эта тема рассматривается после двоичного режима доступа.
|