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