Читает данные из файла в буфер
Синтаксис
Get #filenum As Integer, [position As LongInt], ByRef data As Any [, [amount As Integer] [, ByRef bytesread As UInteger] ]
Get #filenum As Integer, [position As LongInt], data As String [, , ByRef bytesread As UInteger ]
Get #filenum As Integer, [position As LongInt], data() As Any [, , ByRef bytesread As UInteger ]
Использование
Get #filenum, position, data [, [amount] [, bytesread ] ]
varres = Get (#filenum, position, data [, [amount] [, bytesread ] ] )
Параметры
filenum
Значение, переданное в
Open
когда файл был открыт.
position
Место, с которого чтение может быть начато. Если файл был
открыт
For Random,
позиция считается в записях; в противном случае, в байтах. Если
опущено, чтение начинается с текущей позиции указателя файла.
Позиция на основе 1: то есть первая запись или байт файла
находится в позиции 1.
Если
position опущен или нулевой (
0),
чтение файла начнется с текущей позиции в файле.
data
Буфер, где будут записаны данные. Это может быть числовая
переменная, строка, массив, определяемый пользователем тип или
разыменованный указатель. Операция чтения не будет пытаться
заполнить полностью переменную, если
EOF
достигнут.
При получении в массивы,
data должна
сопровождаться пустой парой скобок: "
()".
Get
будет читать данные для всех значений в массиве.
amount
не допускается.
При получении в
String(строки),
количество считанных байтов является таким же, как число байтов
в данных строках.
amount не допускается.
Примечание: Если вы хотите прочитать значения в буфер, вы НЕ
должны передавать указатель на буфер; вместо этого вы должны
передать первую переменную в буфере. (Это может быть сделано
путем разыменования указателя с помощью
Оператора * (Значение из).)
Если вы передаете указатель непосредственно, то
Get
перезаписывает переменную указатель, а не память на которую он
указывает.
amount
Get читает
amount
последовательных переменных из файла в память, то есть он читает
(amount * SizeOf(data) )
байт данных из файла в память, начиная с
data
ячейки памяти. Если
amount опущен, по умолчанию
значение 1, это означает, что
Get просто читает
одну переменную.
bytesread
Переменная типа Uinteger,
которая принимает результат о количестве байт, успешно
прочитанных из файла.
Возвращаемое значение
Ноль (0) в случае успешного завершения; ненулевое в случае ошибки.
Примечание: если
EOF (конец файла)
достигается при чтении,
Get вернет успех. Количество байтов,
считанных на самом деле может быть проверено путем передачи переменной
bytesread.
Описание
Читает двоичные данные из файла в буфер переменной
Get может использоваться как функция, и вернет 0 в случае
успешного завершения или код ошибки в случае неудачи.
Для файлов, открытых в режиме
Random,
размер в байтах данных для чтения должен соответствовать указанному размеру
записи.
Пример
Dim Shared f As Integer
Sub get_integer()
Dim buffer As Integer ' переменная Integer
' Читаем в Integer (4 байта) из
файла в буфер, используя номер файла "f".
Get #f, , buffer
' распечатать результат
Print buffer
Print
End Sub
Sub get_array()
Dim an_array(0 To 10-1) As Integer ' массив Integers
' Читаем 10 Integers (10 * 4 = 40 байт) из
файла в an_array, используя номер файла "f".
Get #f, , an_array()
' распечатать
результат
For i As Integer = 0 To 10-1
Print an_array(i)
Next
Print
End Sub
Sub get_mem
Dim pmem As Integer Ptr
' выделим память для 5 Integers
pmem = Allocate(5 * SizeOf(Integer))
' Читаем 5 integers (5 * 4 = 20 байт) из
файла в выделенную память
Get #f, , *pmem, 5 ' Примечание:
pmem должна быть разыменована (*pmem, или pmem[0])
' распечатать результат с
помощью [] индекса указателя
For i As Integer = 0 To 5-1
Print pmem[i]
Next
Print
' Освободить указатель памяти для
предотвращения утечки памяти
Deallocate pmem
End Sub
' Найти первый свободный номер файла.
f = FreeFile
' Открыть файл "file.ext" для бинарного
использования , используя номер файла "f".
Open "file.ext" For Binary As #f
get_integer()
get_array()
get_mem()
' Закрыть файл.
Close #f
' Загрузить небольшой текстовый файл в строку
Function LoadFile(ByRef filename As String) As String
Dim h As Integer
Dim txt As String
h = FreeFile
If Open( filename For Binary Access Read As #h ) <> 0 Then Return ""
If LOF(h) > 0 Then
txt = String(LOF(h), 0)
If Get( #h, ,txt ) <> 0 Then txt = ""
End If
Close #h
Return txt
End Function
Dim ExampleStr As String
ExampleStr = LoadFile("smallfile.txt")
Print ExampleStr
Отличия от QB
- Get в FB может прочитать полностью массивы как VB или,
альтернативно, читать кратный размер данных в память.
- Get может использоваться как функция в FB, чтобы найти код
успеха/ошибки без использования процедуры обработки ошибок.
- FB позволяет параметр bytesread, чтобы проверить, сколько
байтов успешно прочитано.
См. также