Чтение онлайн

на главную

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

В этой главе ...

~ Получение доступа к файлу по номеру

~ Выбор режима доступа к файлу

~ Чтение и запись в файлы с использованием не объектно-ориентированных методов

В дополнение к объектно-ориентированным методам работы с файлами данных, описанным в главе 12, VBA предлагает альтернативный метод для чтения и записи данных с дисковых файлов. Эта старая система по-прежнему обладает определенными достоинствами. Хоть вы и не можете работать со свойствами файла и методами, вы получаете более полный контроль над тем, как данные организуются в файле, и над тем, какие данные читаются и записываются. В отличие от объектно-ориентированной файловой системы операторы и функции, описанные здесь, встроены в VBA и не требуют внешних

библиотек.

Номер - это ключ.

После того как файл открыт для доступа VBA, обращение к нему осуществляется по номеру, а не по имени. Если приходится работать с несколькими файлами одновременно, отслеживать то, какой файл вам необходим в данный момент, совсем не просто. В принципе, никто не запрещает работать таким образом. Но дальше в данной главе, в разделе "Не идите на поводу у номеров", показан простой способ решения данного вопроса. Для работы с содержимым файла необходимо его открыть. Для этого используется оператор Open (Открыть). Вот его синтаксис в простейшей форме:

Open "pathname" Formode Asfilenumber

А вот пример типичного оператора Open:

Open "С:\Мои документь\Мои данные.dat" For Binary As #1

Оператор использует три аргумента:

* pathname (путь). Полный путь (с указанием диска и каталога), определяющий файл, который должен быть открыт как строчное выражение. При вводе строки текста необходимо заключать ее в кавычки, как это сделано в приведенном выше примере. Вместо этого можно использовать строку переменных, а также любое выражение, значение которого будет правильной строкой VBA.

* mode (режим). Ключ VBA, определяющий то, каким образом вы планируете работать с файлом; подробности - в разделе "Выбор режима доступа к файлу".

* filenumber (номер файла). Аргумент filenumber принимает целочисленное значение от 1 до 511, если оно не было присвоено другому файлу. Традиционно, но не обязательно, в номере перед числом помешают знак #. В дальнейшем присвоение номеров не обязательно, однако при желании это можно делать (можно воспользоваться функцией FreeFile, которая возвращает следующее доступное значение filenumber ).

Оператор Open может принимать еще некоторые опциональные аргументы. Все они здесь не рассматриваются, но в следующем разделе рассмотрен один из них - Len=reclength, необходимый при работе с файлами произвольного доступа.

Выбора режима доступа к файлу

При открытии дискового файла с помощью оператора Open необходимо включить в него аргумент mode. Данный аргумент говорит VBA об организации файла и о том, каким образом планируется осуществлять доступ к информации. Хотя в качестве аргумента mode может быть любое из пяти возможных ключевых слов, в действительности выбор проводится из трех основных режимов. Каждый из режимов имеет свои достоинства и недостатки, описанные ниже.

Режим доступа к файлу в операторе Open

Описание работы

Ключевые слова

Произвольный доступ

Сохраняет данные в записях идентичной длины, так что чтение или запись могут вестись до тех пор, пока известно положение в файле, Запись в режиме произвольного доступа соответствует любому типу данных VBA фиксированной длины или определенному пользователем типу, содержащему исключительно типы данных фиксированной длины

Random

Последовательный

Данные сохраняются в виде серии символов.

Подходит для текстовых файлов, а также для файлов баз данных в кодировке ASCII, использующих разделители-запятые

Input (для чтения данных из файла); Out put (для записи данных в файл); Append (для записи данных в конец файла)

Двоичный

Данные сохраняются в строчной форме, в любом заданном порядке

Binary

Не

идите на поводу у номеров

Хотя в VBA рекомендуется обращаться к открытым файлам по номеру, запоминать то, с чем связаны какие-то числа, достаточно трудно и неудобно. Вместо номеров файлов можно использовать константы или переменные с понятным названием. Если наперед известен номер, который будет использоваться для отдельного файла, объявите для него константу. Данную константу затем можно использовать в операторе, воздействующем на файл. Вот пример:

Const PetsFile = 1, BdayFile = 2

Open "C:\MiscData\PetsLog.txt" For Input As PetsFile

Open "C:\MiscData\Birthdays.txt" For Random As BdayFile

Input #PetsFile, strPetlnfo ‘ чтение одного элемента из файла

Close PetsFile

Put BdayFile, 45, usrBDay ' запись одного элемента в файл

CloseBdayFile

Применяйте данный прием без опасения: вместо того чтобы собственноручно присваивать файлам номера, используйте функцию FreeFile, определяющую следующий доступный номер файла. Если значение, возвращаемое функцией, присвоить переменной, необходимость в запоминании номера просто отпадет. Вот пример применения данного приема: Dim DiaryFile As Integer DiaryFile = FreeFile Open

"C:\MySecrets\Diary.txt" For Input As DiaryFile

Закрытие открытых файлов

Будьте аккуратными - после того как работа с файлами завершена, их следует закрыть.

Закрытие файла гарантирует, что все хранимые в памяти изменения действительно будут записаны на диск, а ресурсы, занимаемые файлами, освободятся и станут доступными для других приложений.

Для выполнения подобной задачи нужен, конечно же, оператор Close. Для закрытия определенного файла используется оператор вроде Close #2 (или Close PetsFile, как в предыдущем примере). Для закрытия всех открытых файлов оператор Close используется сам по себе.

Чтение и запись данных

Есть несколько VBA-команд для записи и извлечения данных из файла. В приведенной ниже таблице описана их работа.

Пример команды

Использование

Пояснение

Оператор Put

Предназначен для записи переменных в файл

Put #1, 1800, StrQuote (записывает переменную StrQuote в двоичный файл, начиная с позиции 1800);

Put #1, 15, usrCustomData (записывает переменную usr Cus t ornDa t a в файле с произвольным доступом в запись 15)

Оператор Get

Предназначен для чтения из файла переменной, сохраненной с помощью оператора Put

Get t #1, 1800, StrQuote (читает строку данных из двоичного файла с позиции 1800 в переменную Str Quot e); Get #1, 15, usrCustomDat a (читает определенные пользователем данные, хранимые в 15-й записи переменной usrCustomData)

Функция Input

Предназначена для чтения из файла данных, сохраненных с помощью оператора Put

StrBigText = Input ( 400,#1) (читает 4000 символов в переменную StrBigText)

Oneparop write #

Предназначен для записи списка перемены в последовательный файл, с созданием новой строки после каждого прохода

Write #3, strShortString, strLongString, intLittleNumber (записывает три переменные в строку последовательного файла)

Оператор input #

Предназначен для чтения списка из последовательного файла переменных, для трех сохраненных с помощью onepaтopa Write #

Input #3, strShort String, strLong String, intLittleNumber (читает данные переменных из последовательного файла)

Поделиться:
Популярные книги

Пустоши

Сай Ярослав
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Пустоши

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Темный охотник 6

Розальев Андрей
6. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный охотник 6

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Камень Книга седьмая

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Большие дела

Ромов Дмитрий
7. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Большие дела

Адъютант

Демиров Леонид
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Адъютант

Внешники

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Я – Орк. Том 6

Лисицин Евгений
6. Я — Орк
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 6

Менталист. Революция

Еслер Андрей
3. Выиграть у времени
Фантастика:
боевая фантастика
5.48
рейтинг книги
Менталист. Революция

Титан империи 2

Артемов Александр Александрович
2. Титан Империи
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Титан империи 2

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10