Ниже приведен пример использования данной функции для считывания из файла первых 10 символов:
Sub WriteToFile()
Open «D:\MyTextFile.txt» For Output As 1
' Запись данных в файл
Write #1, «Значение», «Value», 154.32
Print #1, «Слово1», «Слово2», 14.28464
Close 1
End Sub
Далее целесообразно привести пример процедуры, в которой осуществляется чтение записанных данных из файла:
Sub ReadFromFile()
Dim strVal1, strVal2, dblNumber
Dim strString
Open «D:\MyTextFile.txt» For Input As 1
' Чтение данных из файла
Input #1, strVal1, strVal2, dblNumber
Line Input #1, strString
Close 1
End Sub
Кроме приведенных в табл. 1.11 инструкций, в VBA имеется встроенная функция Input, позволяющая считывать из файла заданное количество символов:
Input(Количество_символов, [#]Дескриптор)
Ниже приведен пример использования данной функции для считывания из файла первых 10 символов:
Sub TestInput()
Dim strText As String
Open «D:\MyTextFile.txt» For Input As 1
" Чтение из файла первых 10 символов
strText = input(10, 1)
Close 1
End Sub
При произвольном (Random) доступе файл представляется как совокупность записей, имеющих постоянную длину. Именно запись при данном типе доступа является элементарной единицей информации, которую можно считывать из файла или записывать в файл. Каждая запись имеет свой номер (нумерация начинается с единицы). Для работы с файлами при использовании произвольного доступа в VBA реализованы инструкции Put и Get для записи и чтения информации:
Put [#]Дескриптор, [Номер_записи], Переменная
Get [#]Дескриптор, [Номер_записи], Переменная
При выполнении инструкции Put значение переменной Переменная помещается в файл на место записи с номером Номерзаписи. Если номер записи не указывается, то данные помещаются в текущую запись файла.
Инструкция Get позволяет считать значение записи с номером Номерзаписи в переменную Переменная. Если номер записи не указан, то считывается текущая запись файла.
Рассмотрим пример, в котором две структуры сначала записываются в файл с помощью инструкции Put, а потом считываются из того же файла, но в обратном порядке:
Type Record
intVal As Integer
strName As String * 100
End Type
Sub TestRandomAccess()
Dim rec1 As Record, rec2 As Record
' Заполнение rec1 и rec2 значениями ...
Open «D:\MyRandomAccessFile.txt» For Random Access Read Write _
As 1 Len = Len(rec1)
' Запись данных в файл
Put 1, , rec1
Put 1, , rec2
' Теперь считывание данных из файла
Get 1, 2, rec2
Get 1, 1, rec1
Close 1
End Sub
Бинарный (Binary) доступ к файлу по своей сути идентичен произвольному доступу с тем лишь различием, что запись в файле имеет длину 1 байт. При бинарном доступе к файлу используются те же инструкции Put и Get, что и при произвольном доступе. Также при бинарном доступе для чтения определенного количества байт может быть использована функция Input, о которой было рассказано выше.
Определение конца файла
На практике часто приходится сталкиваться с необходимостью чтения данных из файла, размер которого заведомо неизвестен. Если достигается конец файла, а после этого производится попытка прочитать из него данные, то генерируется ошибка. Для предотвращения подобных ситуаций можно использовать функции EOF и LOF:
EOF(Дескриптор)
LOF(Дескриптор)
Функция EOF возвращает значение True, если достигнут конец файла, заданного параметром Дескриптор, и False – в противном случае. Если функция EOF возвратила значение False, то читать из файла больше нельзя. Для файлов, открытых в режиме Output, функция EOF всегда возвращает значение True.
Функция LOF позволяет узнать длину файла, заданного параметром Дескриптор. Эта функция возвращает значение типа Long, отражающее длину открытого файла в байтах.
Определение текущей позиции файла
Для определения текущей позиции файла в VBA предусмотрены функции Loc и Seek, имеющие следующий формат:
Loc(Дескриптор)
Seek(Дескриптор)