Files on the Cybiko are stored in the non-volatile memory. They are like files on the PC in that they have filenames and they hold data. They even have attributes (like file size), but these attributes are not accessible from B2C.
Open a file
Before a file can be accessed, it must be opened. In B2C, opening a file is accomplished with the Open command. The Open command has three parts the pathname, the mode, and the filenumber. The mode is optional.
open pathname [for mode] as filenumber
The pathname is the name of the file. This can be either a literal string ("filename.dat") or a variable which has been Dim'd previously. The mode is optional and is one of Read, Write, or Append. If left blank, the mode defaults to Read. When a file is opened for Read access the program may only read data from the file, no writing is permitted. Likewise, when a file is opened for Write, no data may be read from the file, only written. If the file already exists, the data in the file is erased. When a file is opened for Append, it is opened for write, but if the file exists, instead of destroying the data, the file pointer is positioned at the end of the file and writing begins there. Finally, the filenumber is a number from 0 to 7. It is used to identify the file for the rest of the program.
Dim fname[32] as char print "Enter fname" input fname open fname for read as 1
It is possible to open the same file for Read in more than one place in the program. But for Write and Append modes you must first close the file before reopening it.
Close a file
When you are done with a file, you must close it. The Close command takes as its only parameter the filenumber
open "filename.dat" as 1 'do some stuff close 1
Writing to a File : Put
The Put statement writes data from a variable to a file. It has three parts: filenumber, bytepos, and variable
Put filenumber, [bytepos][, variable]
The Put command keeps the concept of the file position. Each time data is written to the file the file position is incremented by the size of the variable in bytes. In this way, you can accurately control the data being written to the file. The first byte in the file is byte 0, the next is byte 1, etc
dim foo as int open "filename.dat" for write as 1 put 1, 0, foo ' write two bytes at the beginning of the file put 1, 100, foo ' write the same bytes at the 100th byte of the file
Leaving out the variable name positions the file pointer, but does not write
dim foo as int open "filename.dat" for write as 1 put 1, 0 ' position file pointer to the beginning of the file
To write to the current file pointer position without specifying the value, leave out the bytepos (but remember to include the delimiting commas). Unfortunately string variables and other arrays cannot be written with the Put command. You must create a loop and write each element individually.
dim a as double open "filename.dat for write as 1 input a put 1,,a ' write 8 bytes to the current location
Reading from a file : Get
The Get statement reads data from a file into a variable. It has three parts: filenumber, bytepos, and variable
Get filenumber, [bytepos][, variable]
The Get command keeps the concept of the file position. Each time data is read from the file the file position is incremented by the size of the variable in bytes. In this way, you can accurately control the data being read from the file. The first byte in the file is byte 0, the next is byte 1, etc
dim foo as int open "filename.dat" for read as 1 get 1, 0, foo ' read two bytes from the beginning of the file get 1, 100, foo ' read two different bytes from the 100th byte of the file
Leaving out the variable name positions the file pointer, but does not read
dim foo as int open "filename.dat" for read as 1 get 1, 0 ' position file pointer to the beginning of the file
To read from the current file pointer position without specifying the value, leave out the bytepos (but remember to include the delimiting commas).
dim a as double open "filename.dat for read as 1 get 1,,a ' read 8 bytes from the current location print a
Printing to the file : Print #
Printing to a file is possible with the print statement, which you are already familiar with. Just add a "#n" where n is the filenumber. This is an easy way to create text files. Strangely, there is no corresponding Input # command for reading data.
dim a[10] as char input "your name", a open "filename.txt" for write as 1 print #1, a close 1