Пользовательский тип данных

Файлы

Информация хранится на разнообразных носителях в файлах. Процесс работы с файлами состоит из нескольких этапов:

· получение дескриптора файла;

· открытие файла;

· чтение или запись файла;

· закрытие файла.

Дескриптор файла

Для связи системы или приложения с файлом имеется канал ввода/вывода. При открытии файлу ставится в соответствие канал с определенным номером. Допустимо использование номеров 1- 511. Каждый открытый файл имеет собственный канал, с помощью которого записываются или считываются данные. Следовательно, для ввода и вывода данных в файл имеет значение не имя файла, а номер канала. Операционная система должна иметь сведения о наличии свободных каналов, которые можно использовать для открытия файлов.

VISAUL BASIC имеет функцию FreeFile[(дапазонНомеров)], возвращающую номер свободного канала, который можно использовать для работы с файлом. Если свободных каналов нет (открыто максимально допустимое количество каналов), возникает ошибка выполнения. Необязательный параметр дапазонНомеров позволяет определить диапазон значений, из которых выбирается очередной свободный номер канала:

- если 0 (по умолчанию) - возвращается номер канала из диапазона 1-255,

- если 1 - то из диапазона 256 - 511.

Типы доступа

В VISAUL BASIC реализованы три типа доступа к файлам:

· последовательный (для обработки текстовых файлов);

· произвольный (для обработки текста или структурированных двоичных файлов с записями фиксированной длины);

· двоичный (для обработки произвольно структурированных файлов).

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

Способ открытия файла с последовательным доступом (для чтения, записи или добавления) задается при вызове оператора открытия файла:

Open имяФайла For режим As дескрипторФайла

Где: имяФайла определяет имя открываемого файла; это либo строка символов, заключенная в кавычки, либо выражение, значением которого является строка символов. Она представляет собой путь к открываемому файлу;

режим - это режим доступа, который может иметь значения:

Input (Ввод) - если файл открывается для чтения из него текстовых данных.

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

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

дескрипторФайла - целое число, по которому идентифицируется открываемый файл. Файловые номера используются при выполнении файловых операций в программе.

Все открытые файлы закрываются оператором:

Close [ списокДескрипторов ]

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

Для записи в файл используются операторы:

Print # ДескрипторФайла, [ СписокЗначений ]

Write # ДескрипторФайла, [ СписокЗначений ]

Где: СписокЗначений - это записанные через разделитель значения (или выражения).

Оба оператора записывают данные в файл текстовыми строками. Текстовая строка - это последовательность символов, которая заканчивается символом перехода на новую текстовую строку или символом возврата каретки (коды 13 и 10). Текстовый файл представляет собой последовательность текстовых строк.

Логика работы операторов Write и Print различна.

Оператор Write

Разделителем в списке значений является запятая. Список значений просматривается последовательно, и элементы этого списка записываются в одну текстовую строку файла через запятую. Элементы типа String заключаются в кавычки. После записи последнего элемента записывается символ перехода на новую строку.

Например, напишем программу записи в текстовый файл следующих строк:

"Иванов", 1982

"Петров", 1984

"Сидорова", 1983

"Крылов", 1980

В каждой строке - фамилия и год рождения.

Оператор Print

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

· если (;) - значения будут записываться подряд, без промежутков между ними;

· если (,) - значения будут записываться в 14-символьные зоны вывода.

Кроме того, в списке значений оператора могут присутствовать функции:

· Spc(n) - для вставки n пробелов между значениями в текстовой строке;

· Tab(n) - для указания номера n позиции для записи следующего значения.

На рис. 69 в окне редактора кодов приведен текст процедуры создания текстового файла с использованием оператора Print.

Для чтения из файла используются:

- оператор Input # ДескрипторФайла СписокПеременных

-оператор Line Input # ДескрипторФайла Переменная

- функция Input ( ЧислоСимволов, дескрипторФайла )

Оператор Input

Список переменных - это записанные через запятую переменные любого типа. В каждой текстовой строке файла количество и тип значений должны совпадать с количеством и типом переменных в списке переменных.

Оператор Line Input

Переменная - это переменная типа String или Variant. Результатом работы этого оператора является присвоение Переменной значения - всей очередной текстовой строки файла.

Функция Input

ЧислоСимволов - это количество символов, которое надо прочесть из входного файла. Функция возвращает текст в виде символьной строки. Чаще всего эту функцию используют для одновременного чтения всего текстового файла и размещения его в текстовом поле экранной формы.

Рассмотрим примеры чтения созданного в предыдущем примере файла ГодР1.txt:

Аналогичный результат дает работа программы, использующей оператор Line Input:

Private Sub Command3_Click()

Dim ts As String

Open "c:\ГодР1.txt" For Input As #1

Do Until EOF(1)

Line Input #1, ts

Print ts

Loop

Close #1

End Sub

Пример использования функции Input:

Private Sub Command3_Click()

Dim ks As Integer

Open "c:\ГодР1.txt" For Input As #1

ks = LOF(1)

Print Input(ks, #1)

Close #1

End Sub

При обработке файлов также используются функции: EOF (дескрипторФайла) - возвращает значение True, если обнаружен конец файла и False - в противном случае.

LOF (дескрипторФайла) - возвращает размер текстового файла в символах.

Файлы произвольного доступа хранят структурированные данные и состоят из записей.

Запись – это некоторая порция данных, которая имеет строго определенный размер и свой номер в файле.

Доступ к данным произвольного доступа осуществляется по номеру записи. Чтение данных или запись данных в файл произвольного доступа также выполняется записями. Запись файла должна иметь определенную структуру.

Для определения переменных, которые могли бы хранить структуру в VISUAL BASIC, нет встроенных типов таких как, например Integer, String и т.д. Однако VISUAL BASIC позволяет создавать на основе встроенных типов так называемые пользовательские типы. К пользовательским типам относиться тип запись. Запись позволяет хранить совокупность данных разного типа и представляет собой структуру, компоненты которой являются полями записи.

Все пользовательские типы необходимо объявлять. Это делается следующим образом:

{ Private| Public} Type ИмяТипаДанных

Элемент1 As ТипЭлемента1

...

ЭлементN As ТипЭлементаN


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: