The PUT # file or port statement writes data to a specific byte or record location.
Syntax
PUT #filenumber&, [position][, {holdingvariable holdingarray()}]
- File/port number is the number used in the OPEN statement.
- The INTEGER or LONG file byte position in a BINARY file or the record position in a RANDOM file must be greater than zero.
- The file byte or record position can be omitted if the PUT or GET is consecutive or when creating new file data sequentially.
- The holding variable TYPE determines byte size and the next byte position in the file when the position is ommitted.
- The first byte or record position is 1. This may require adding one to an offset value when documentation uses that position as 0.
- Both the file position and holding variable(and comma) can be omitted when using a FIELD definition.
- If a LEN = record length statement is omitted in an OPEN FOR RANDOM statement the record size defaults to 128 bytes!
- Warning: Not designating a PUT position can overwrite previous file data based on the current file position!
- When using a numeric holding variable, values do NOT require conversion using MKI$, MKL$, MKS$ or MKD$.
- QB64 can load Arrays data directly(brackets required) to a BINARY file using one PUT to a BINARY file: PUT #1, , array()
Example(s)
Using a TYPE record variable(Contact) to enter a new RANDOM record to a file.
TYPE ContactType
first AS STRING * 10
last AS STRING * 20
age AS INTEGER
END TYPE
DIM Contact AS ContactType
INPUT "Enter a first name: ", Contact.first
INPUT "Enter a last name: ", Contact.last
INPUT "Enter an age: ", Contact.age
OPEN "Record.lst" FOR RANDOM AS #1 LEN = LEN(Contact)
NumRecords% = LOF(1) \ LEN(Contact)
PRINT NumRecords%; "previous records"
PUT #1, NumRecords% + 1, Contact ' add a new record TYPE record value
CLOSE #1
Note: The DOT record variable values were created or changed before the PUT. The record length is 32 bytes.
Placing the contents of a numerical array into a BINARY file. You may want to put the array size at the beginning too.
DIM SHARED array(100) AS INTEGER
FOR i = 1 TO 100
array(i) = i
NEXT
showme 'display array contents
OPEN "BINFILE.BIN" FOR BINARY AS #1
PUT #1, , array()
ERASE array 'clear element values from array and display empty
showme
CLOSE #1
OPEN "BINFILE.BIN" FOR BINARY AS #2
GET #2, , array()
CLOSE #2
showme 'display array after transfer from file
END
SUB showme
FOR i = 1 TO 100
PRINT array(i);
NEXT
PRINT "done"
END SUB
Note: Use empty brackets in QB64 when using GET to create an array or PUT to create a BINARY data file.