Get (Файловый ввод\вывод)
 
Читает данные из файла в буфер

Синтаксис

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, чтобы проверить, сколько байтов успешно прочитано.

См. также