Get #
- Last UpdatedJul 18, 2023
- 4 minute read
Get statement reads data from a disk file into a variable.
The required FileNum argument is a system reference number associated with an open file. The optional RecNum argument is the byte position where the read starts for files opened in Binary mode. If you omit RecNum, the next record or byte following the last Get or Put statement (or pointed to by the last Seek function) is read. You must include delimiting commas.
The required VarName is the name of the variable where the file data is read (copied) to.
Random mode
For files opened in Random mode, the following rules apply:
-
If the length of the data being read is less than the length specified in the Lenclause of the Open statement, Get reads subsequent records on record-length boundaries. The space between the end of one record and the beginning of the next record is padded with the existing contents of the file buffer. Because the amount of padding data can't be determined with any certainty, it is generally a good idea to have the record length match the length of the data being read.
-
If the variable being read into is a variable-length string, Get reads a 2-byte descriptor containing the string length and then reads the data that goes into the variable. Therefore, the record length specified by the Lenclause in the Open statement must be at least 2 bytes greater than the actual length of the string.
-
If the variable being read into is a Variant of numeric type, Get reads 2 bytes identifying the VarType of the Variant and then the data that goes into the variable. For example, when reading a Variant of VarType 3, Get reads 6 bytes: 2 bytes identifying the Variant as VarType 3 (Long) and 4 bytes containing the Long data. The record length specified by the Lenclause in the Open statement must be at least 2 bytes greater than the actual number of bytes required to store the variable.
Note: You can use the Get statement to read a Variant array from disk, but you can't use Get to read a scalar Variant containing an array. You also can't use Get to read objects from disk.
-
If the variable being read into is a Variant of VarType 8 (String), Get reads 2 bytes identifying the VarType, 2 bytes indicating the length of the string, and then reads the string data. The record length specified by the Lenclause in the Open statement must be at least 4 bytes greater than the actual length of the string.
-
If the variable being read into is a dynamic array, Get reads a descriptor whose length equals 2 plus 8 times the number of dimensions, that is, 2 + 8 * NumberOfDimensions. The record length specified by the Lenclause in the Open statement must be greater than or equal to the sum of all the bytes required to read the array data and the array descriptor. For example, the following array declaration requires 118 bytes when the array is written to disk.
-
If the variable being read into is a fixed-size array, Get reads only the data. No descriptor is read.
-
If the variable being read into is any other type of variable (not a variable-length string or a Variant), Get reads only the variable data. The record length specified by the Lenclause in the Open statement must be greater than or equal to the length of the data being read.
Get reads elements of user-defined types as if each were being read individually, except that there is no padding between elements. On disk, a dynamic array in a user-defined type (written with Put) is prefixed by a descriptor whose length equals 2 plus 8 times the number of dimensions, that is, 2 + 8 * NumberOfDimensions. The record length specified by the Lenclause in the Open statement must be greater than or equal to the sum of all the bytes required to read the individual elements, including any arrays and their descriptors.
Binary mode
For files opened in Binary mode, all of the Random rules apply, except:
-
The Len clause in the Open statement has no effect. Get reads all variables from disk contiguously; that is, with no padding between records.
-
For any array other than an array in a user-defined type, Get reads only the data. No descriptor is read.
Get reads variable-length strings that aren't elements of user-defined types without expecting the 2-byte length descriptor. The number of bytes read equals the number of characters already in the string.
Syntax
Get #(FileNum, RecNum, VarName)
FileNum:
An Integer or numeric expression representing any valid number in the range 1 to 511 inclusive, which is referenced by the file system to be associated with an open file.
RecNum:
The byte position where the read starts for files opened in Binary mode. If you omit RecNum, the next record or byte following the last Get or Put statement (or pointed to by the last Seek function) is read.
VarName:
A string representing a valid variable name.
Related Functions
GetAttr | Input | Line Input # | Print # | Put # | Write #
Example
Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type
Dim recRecord As Record
Dim intPosition As Integer
Dim intFileNum as Integer
intFileNum = FreeFile 'retrieve next free file number
' Open sample file for random access.
Open "TESTFILE.txt" For Random As #intFileNum
' Read the sample file using the Get statement.
intPosition = 3 ' Define third record number.
Get #intFileNum, intPosition, recRecord ' Read third record.
Close #intFileNum ' Close file.