|
Программирование >> Проектирование интерфейса пользователя
Следующий код позволяет выделить значение даты и значение времени из внутреннего представления даты и времени. Dim DatePart As Double Dim TimePart As Double DatePart = Fix(Now) TimePart = Now - Fix(Now) В 22.22, 7 марта 2001 года значение DatePart составляет 36957, а значение TimePart - 0.933206. Полное значение - это число дней, прошедших с 1 января 1900 года. Отрицательное значение даты свидетельствует о том, что используется дата до 1 января 1900 года. Время представляется в виде дробной части от 24 часов. Дробная часть, равная 0, соответствует полуночи, а 0,5 - полудню. 0,75 - это три четверти суток, или 18.00. Дата и время, вероятно, второй по значимости (после строк) тип данных, используемый в приложениях баз данных. И вам наверняка придется его применять - и в форматах даты/времени, и, реже, - в виде внутренних числовых представлений. Операции файлового ввода-вывода Вся информация хранится в файлах двоичного и текстового форматов. Пакетные и INI-файлы - это простейшие примеры файлов текстового формата. Всем вам знакомы также файлы формата HTML, документы текстовтх процессоров, электроннтх таблиц и графических редакторов. VBA предлагает ряд полезных средств управления файловыми данными. Для выполнения операций файлового ввода-вывода в программах на языке VBA применяются команды и функции Open, Close, FreeFile, Line Input, Input, Print, Write, Get и Put. Open осуществляет открытие файла, обеспечивая заданный уровень доступа - для чтения, записи или для чтения/записи. Close выполняет закрытие файла. Для обращения к открытым файлам применяются специальные дескрипторы-номера. Номеру открытого файла соответствует определенный ресурс операционной системы, поэтому во избежание его истощения каждый открытый файл после завершения использования должен обязательно закрываться. Функция FreeFile гарантирует, что выбранный номер файла не применяется другим процессом. Line Input обеспечивает возможность считывания строки текстового файла. Команды Write и Print позволяют записывать информацию в текстовый файл, причем Write заключает очередную порцию данных в двойные кавычки, a Print - нет. Get и Put предназначены, соответственно, для выполнения операций чтения и записи двоичных данных. Мы рассмотрим названные команды и функции по группам: вначале Open и Close совместно с FreeFile, затем Line Input, Input, Print, Write И, наконец, Get и Put. Команды Open и Close Команда Open описывается довольно сложным синтаксическим выражением - о ней речь пойдет ниже. Но зато Close довольно проста: Close #НомерФайла - это переменная для хранения числа двойной точности, которое возвращается функцией FreeFile, получающей свободный ресурс от операционной системы. Одно из правил хорошего тона в программировании гласит: следует использовать ресурсы в том же контексте, в котором они объявлены (открыты). Скажем, открыв файл внутри некоторой функции, вы должны закрыть его в этой же функции. Такой подход уменьшает вероятность повреждения файла, если тот случайно останется открытым. Если файл все-таки должен оставаться открытым во время выполнения целого ряда функций, удачным решением будет расширение контекста посредством включения операций открытия/закрытия в пределы одного класса. В этом случае перед удалением объекта класса последний сам должен позаботиться о закрытии всех файлов (подробнее см. главу 21-й час. Основы программирования классов ). Команда открытия файлов, Open, более сложна. С ее помощью можно открывать как текстовые, так и двоичные файлы, причем в нескольких режимах - для чтения, записи и чтения/записи. Различие между процессами обработки текстовых и двоичных данных состоит в том, что строки текста отделяются одна от другой парой символов - возврат каретки - перевод строки. В двоичном режиме объем блока даннтх диктуется вашими потребностями и может быть произвольным. Текстовый файл легко открывается и отображается с помощью любой программы-редактора, но двоичный файл в режиме просмотра будет выглядеть, как каша из беспорядочно расположенных символов. Приведем синтаксис команды Open: Ореп ИмяФайла [For Режим] [Access [#]НомерФайла [Ьеп=ДлинаЗаписи] Доступ] [Блокировка] As ИмяФайла - это символьная переменная или константа, содержащая имя файла (и, возможно, путь к нему). Аргумент Режим указывает, будет ли файл открыт для записи, чтения или одновременно записи и чтения, а также предписывает, каким образом трактовать данные - как текстовые или двоичные. В качестве значения Режим может применяться одно из служебных слов - Append, Binary, Input, Output или Random. Append означает, что файл открывается в режиме записи и указатель положения устанавливается в конец файла. Слово Binary достаточно красноречиво - файл открывается как бинарный input соответствует режиму чтения тек- стового файла, Output предполагает возможность записи в текстовый файл, a Random позволяет совмещать операции чтения и записи текста без закрытия файла и его повторного открытия. Если параметр Режим не задан, по умолчанию выбирается значение Random. Аргумент Доступ задается только в том случае, если режим отмечен служебным словом Binary, и допускает значения Read, Write или Read Write, которые не нуждаются в дополнительных пояснениях. Необязательный параметр Блокировка позволяет указать один из признаков блокировки для обеспечения возможности работы с файлом в многопользовательском режиме - Shared, Lock Read, Lock Write и Lock Read Write. НомерФайла - это целое число в интервале от 1 до Наиболее удачная тактика связана с вызовом функции FreeFile, которая запрашивает у операционной системы свободный ресурс и возвращает в виде числа. После этого число-номер следует сразу же использовать в команде открытия файла. Если на протяжении определенного времени номер файла остается невостребованным, многопоточная операционная система Windows может передать ресурс другому процессу. Параметр ДлинаЗаписи используется совместно с режимом Binary и указывает величину порции считываемых или записываем1х данных. Если вы будете работать только с одним символом, укажите Len=l. Довольно полезной оказывается конструкция Len=Size (ТипДанных), позволяющая определить верную величину записи в конкретной ситуации. Листинг 10.5 предлагает ряд примеров открытия и закрытия текстовых и бинарных файлов. Листинг 10.5. Примеры открытия/закрытия текстовых и бинарн1х файлов 2 3 4 5 6 7 8 9 10: 11: 12 : 13: 14 : 15: 16 : 17 : 18: 19: 20: 21: 22 : 23 : Type Email Name As String Email As String End Type Su todClose( ) Dim Handle As Double Handle = FreeFile Open test.txt For Output As #Handle Close #Handle Handle = FreeFile Open test.bin For Binary Access Write As ttHandle Dim Mail As Email Do While (1 = 1) Mail.Name = InputBox ( Введите имя (0=Выход): Добавление имени , ) If (Mail.Name= Q ) Then Exit Do Mail.Email = InputBox ( Введите адрес email: , Добавление адреса , ) Put #1, , Mail Loop ClosettHandle End Sub IB строках 1-4 определяется новый тип. Email. Подробнее о пользовательских типах см. главу 11-й час. От сложного к простому: создание собственных типов данных . В строке 7 объявляется переменная Handle типа Double, которая будет использоваться в качестве номера открытого файла. Строка 8 содержит обращение к функции FreeFile, получающей от операционной системы свободный файловый ресурс. В строке 9 выполняется команда открытия файла test.txt в режиме записи текста, а в строке 10 файл закрывается. Хотя никакой практической ценности подобный код не представляет, он служит для демонстрации приемов открытия и закрытия текстовых файлов. Строка 12 содержит повторный вызов функции FreeFile и оператор присваивания возвращенного ею результата переменной Handle. В строке 13 выполняется операция открытия файла test.bin в режиме записи двоичных данных. В строке 14 находится объявление объекта Mail ранее построенного пользовательского типа Email. Строки 16-21 задают бесконечный цикл вида Do While . . . Loop, предназначенный для интерактивного (с помощью функции InputBox) ввода информации
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |