ЯЗЫК ПРОГРАММИРОВАНИЯ VISUAL BASIC. ОБЩИЕ СВЕДЕНИЯ О ФАЙЛАХ
Процесс работы с
файлами состоит из нескольких этапов:
- получение дескриптора
файла;
- открытие файла;
- чтение или запись
файла;
- закрытие файла.
Для связи системы
или приложения с файлом имеется канал ввода/вывода. При открытии файлу
ставится в соответствие канал с определенным номером. Допустимо использование
номеров 1-511. Каждый открытый файл имеет собственный канал, с помощью
которого записываются или считываются данные. Следовательно, для ввода
и вывода данных в файл имеет значение не имя файла, а номер канала.
Операционная
система должна иметь сведения о наличии свободных каналов, которые можно
использовать для открытия файлов. Visual Basic имеет функцию FreeFile[(диапазонНомеров)],
возвращающую номер свободного канала, который можно использовать для
работы
с файлом. Если свободных каналов нет (открыто максимально допустимое
количество каналов), возникает ошибка выполнения. Необязательный параметр
ДиапазонНомеров
позволяет определить диапазон значений, из которых выбирается очередной
свободный номер канала:
- 0 (по умолчанию)
— возвращается номер канала из диапазона 1—255;
- 1 — возвращается
номер канала из диапазона 256-511. В Visual Basic реализованы три типа
доступа к файлам:
- последовательный
(для обработки текстовых файлов);
- произвольный (для
обработки текста или структурированных двоичных файлов с записями фиксированной
длины);
- двоичный (для
обработки произвольно структурированных файлов).
Последовательный
файл состоит из текстовых строк ASCII-формата. Любая информация
считывается или сохраняется в текстовом виде построчно. Последовательные
файлы могут обрабатываться любым текстовым редактором.
Способ открытия файла
с последовательным доступом (для чтения, записи или добавления) задается
при вызове оператора открытия файла:
Open <ИмяФайла>
For <Режим> As <Дескриптор Файла>,
где ИмяФайла определяет
имя открываемого файла — это либо строка символов, заключенная в кавычки,
либо выражение, значением которого является строка символов. Она представляет
собой путь к открываемому файлу; режим
— это режим доступа, который может иметь значения:
- Input (Ввод) —
если файл открывается для чтения из него текстовых данных;
- Output (Вывод)
— если файл открывается для записи в него данных, начиная с первой позиции.
Вся имевшаяся в нем старая информация будет стерта;
- Append (Дополнение)
— если файл открывается для записи в него данных не с первой, а с конечной
позиции, так что вся имевшаяся в нем старая информация будет сохранена.
ДескрипторФайла —
целое число, по которому идентифицируется открываемый файл. Файловые номера
используются при выполнении файловых операций в программе.
Все открытые файлы
закрываются оператором:
Close [<СписокДескрипторов>]
СписокДескрипторов
— это записанные через запятую дескрипторы файлов, которые должны быть
закрыты. При отсутствии этого параметра будут закрыты все открытые файлы.
Для записи в файл
используются операторы;
Print # <ДескрипторФайла>,
[<СписокЗначений>] Write .# <ДескрипторФайла>, [<СписокЗначений>],
где СписокЗначений
— это записанные через разделитель значения (или выражения).
Оба оператора записывают
данные в файл текстовыми строками. Текстовая строка — это последовательность
символов, которая заканчивается символом перехода на яовую текстовую строку
или символом возврата каретки (коды
13 и 10). Текстовый файл представляет собой последовательность текстовых
строк.
При использовании
оператора Write разделителем в списке значений является запятая. Список
значений просматривается последовательно, и элементы этого списка записываются
в одну текстовую строку файла через запятую. Элементы типа String заключаются
в кавычки. После записи последнего элемента записывается символ перехода
на новую строку.
При использовании
оператора Print элементы списка значений в этом операторе должны быть
разделены либо точкой с запятой, либо запятой. От этого зависит, как они
будут записаны в текстовую строку файла:
- — значения будут
записываться подряд, без промежутков между ними;
- — значения будут
записываться в 14-символьные зоны вывода.
Кроме того, в списке
значений оператора могут присутствовать функции:
- Spc(n) — для вставки
п пробелов между значениями в текстовой строке;
- Tab(n) — для указания
номера п позиции для записи следующего значения.
Для чтения из файла
используются:
- оператор Input
# <ДескрипторФайла> <СписокПеременных>;
- оператор Line
Input # <ДескрипторФайла> <Переменная>;
- функция Input
(<ЧислоСимволов>, <дескриптор Файла>);
- Оператор Input.
Список Переменных
— это записанные через запятую переменные любого типа. В каждой текстовой
строке файла количество и тип значений должны совпадать с количеством
и типом переменных в списке переменных.
При использовании
оператора Line Input Переменная — это переменная типа String или Variant.
Результатом работы этого оператрра является присвоение Переменной значения
— всей очередной текстовой строки файла.
При использовании
функции Input ЧислоСимволов — это количество символов, которые надо прочесть
из входного файла. Функция возвращает текст в виде символьной строки.
Чаще всего эту функцию используют для одновременного чтения всего текстового
файла и размещения его в текстовом поле экранной формы.
Функции, используемые
при обработке файлов:
- EOF (<ДескрипторФайла>)
— возвращает значение True, если обнаружен конец файла, и False — в
противном случае;
- LOР (<ДескрипторФайла>)
— возвращает размер текстового файла в символах.
В файлах с произвольным
доступом и в базах данных используются структуры данных, называемые пользовательским
типом. Главное отличие этой структуры данных от ранее рассмотренных заключается
в том, что она содержит отдельные данные, которые могут иметь разные типы.
Такая структура данных называется записью, а отдельные компоненты этой
структуры — полями записи.
Пользовательский
тип данных объявляется следующим образом:
{Private| Public}
Type <ИмяТипаДанных> <Элемент1> As <ТипЭлемента1>
<ЭлементN> As <ТипЭлементаN> End Type
ИмяТипаДанных — это
имя, которое присваивается определяемому типу данных.
После определения
пользовательского типа данных необходимо объявить переменные, которые
будут иметь этот тип.
Открытие файлов
произвольного доступа выполняется командой:
Open <ИмяФайла>
For Random As #<Дескриптор-Файла> _Len = <ДлинаЗаписи>
В отличие от текстовых
файлов здесь не делается различия между файлами для записи и файлами для
чтения: все они открываются в одном режиме Random.
ДлинаЗаписи — целое
число. Оно должно быть равно длине переменной пользовательского типа,
которая применяется для хранения одной .записи файла.
Для включения в файл
произвольного доступа новой записи используется оператор:
Put # <ДескрипторФайла>,
<НомерЗаписи>, <ИмяПеременной>
НомерЗаписи — это
номер (целое положительное число), который будет иметь запись, помещаемая
в файл.
ИмяПеременной — это
имя переменной пользовательского типа, значением которой является запись,
помещаемая в файл.
Для извлечения записи
из файла произвольного доступа применяется оперйтор:
Get # <ДескрипторФайла>,
<НомерЗаписи>, <Имя-Переменной>
НомерЗаписи — это
номер извлекаемой из файла записи. .
ИмяПеременной — это
имя переменной пользовательского типа, значением которой является запись,
извлекаемая из файла.
Для работы как с
текстовыми файлами, так и с файлами произвольного доступа можно использовать
операторы:
• оператор переименования
файла:
Name <СтароеИмя>
As <НовоеИмя>
СтароеИмя и Новое
Имя — строки, определяющие маршрут к файлу со старым именем и маршрут
к этому же файлу с новым именем;
• оператор копирования
файла:
FileCopy <ИмяИсходногоФайла>,
<ИмяФайлаКопии>
ИмяИсходногоФайла
и ИмяФайлаКопии — строки, определяющие маршрут к файлу-оригиналу и маршрут
к создаваемой копии оригинала;
• оператор уничтожения
файла:
Kill <ИмяУничтожаемогоФайла>
Для удобства работы
с файлом его упорядочивают (сортируют), т. е. переставляют записи файла
так, чтобы значения
какого-нибудь поля были расположены в алфавитном порядке, а если значение
поля числовое --- в порядке его возрастания или убывания. Такое поле называется
ключом сортировки.
В качестве ключа
сортировки можно выбрать как одно поле, так и объединение полей. Однако
во многих случаях лучшим решением проблемы является введение специального
поля (идентификационного номера записи). Это обычно число, которое однозначно
определяет запись.
Для открытия двоичного
файла применяется оператор:
Open <ИмяФайла>
For Binary As # <ДескрипторФайла>
Как и в файл произвольного
доступа, в двоичный файл можно помещать записи с полями различного типа.
Однако этот файл может содержать записи различной длины. Поэтому при объявлении
типа данных у строковых полей длина может быть не фиксирована.
Запись данных в файл
происходит при помощи оператора:
Put # <ДескрипторФайла>,
<НомерБайта>, <ИмяПеременной>
НомерБайта — номер
байта в файле, т. е. то место в файле, куда надо поместить данные.
Чтение данных из
двоичного файла осуществляется оператором:
Get # <ДескрипторФайла>,
<НомерБайта>, <ИмяПеременной>
НомерБайта — номер
байта в файле, т. е. то место в файле, откуда надо прочитать данные.
Найти этот номер
байта бывает очень трудно. В этом заключается недостаток двоичного доступа.
|