Sequential Files

Sequential file techniques provide a straightforward way to read and write files.  PowerBASIC's sequential file commands manipulate text files: files of ANSI or WIDE characters with carriage-return/linefeed pairs separating records.

Quite possibly, the best reason for using sequential files is their degree of portability to other programs, programming languages, and computers.  Because of this, you can often look at sequential files as the common denominator of data processing, since they can be read by word-processing programs and editors (such as PowerBASIC's), absorbed by other applications (such as database managers), and sent over the Internet to other computers.

The idea behind sequential files is simplicity itself: write to them as though they were the screen and read from them as though they were the keyboard.

Create a sequential file using the following steps:

  1. Open the file in sequential output mode.  To create a file in PowerBASIC, you must use the OPEN statement.  Sequential files have two options to prepare a file for output:

OUTPUT: If a file does not exist, a new file is created.  If a file already exists, its contents are erased, and the file is then treated as a new file.

APPEND: If a file does not exist, a new file is created.  If a file already exists, PowerBASIC appends (adds) data at the end of that file.

  1. Output data to a file.  Use WRITE# or PRINT# to write data to a sequential file.

  2. Close the file.  The CLOSE statement closes a file after the program has completed all I/O operations.

To read a sequential file:

  1. First, OPEN the file in sequential INPUT mode.  This prepares the file for reading.

  2. Read data in from the file.  Use PowerBASIC's INPUT# or LINE INPUT# statements.

  3. Close the file.  The CLOSE statement closes a file after the program has completed all I/O operations.

The drawback to sequential files is, not surprisingly, that you only have sequential access to your data.  You access one line at a time, starting with the first line.  This means if you want to get to the last line in a sequential file of 23,000 lines, you will have to read the preceding 22,999 lines.

Sequential files, therefore, are best suited to applications that perform sequential processing (for example, counting words, checking spelling, printing mailing labels in file order) or in which all the data can be held in memory simultaneously.  This allows you to read the entire file in one fell swoop at the start of a program and to write it all back at the end.  In between, the information can be stored in an array (in memory) which can be accessed randomly.

Although the SEEK statement can be used to change the point in the file where the next read or write will occur, the calculations required to determine the position of the start of each record in a sequential file would add considerable overhead.  Sequential files typically consist of records of varying sizes.  Either you would have to maintain a separate index file indicating the starting byte position of each record, or you would have to seek randomly until you found the correct position.  However, SEEK does have its uses with sequential files.  For instance, after reading an entire file, you could use SEEK to reposition the file pointer to the start of the file, in order to process the data a second time.  This is certainly quicker than closing and re-opening the file.

Sequential files lend themselves to database situations in which the length of individual records is variable.  For example, suppose an alumni list had a comments field.  Some people may have 100 bytes or more of comments.  Others, perhaps most, will have none.  Sequential files handle this problem without wasting disk space.

The OPEN statement provides an optional LEN parameter for use with sequential files.  This instructs PowerBASIC to use internal buffering to speed up reading of sequential files, using a buffer of the size specified by the LEN parameter.  A buffer of 8192 bytes is suggested for best general performance, especially when networks are involved.  However, this value can be increased in size to gain additional performance - the best value will always be specific to a particular combination of hardware and software, and may vary considerably from PC to PC, network to network, etc.

The OPEN statement also provides an optional character mode parameter. This specifies the character mode for this file: ANSI or WIDE (Unicode).  Since sequential files consist of text alone, the selected mode is enforced by PowerBASIC.  All data read or written to the file is automatically forced to the selected mode, regardless of the type of variables or expressions used.  With binary or random files, this specification has no effect, but it may be included in your code for self-documentation purposes.

ANSI characters in the U.S. range of CHR$(0) to CHR$(127) are known as ASCII, and are always represented by a single byte.  International ANSI characters in the range of CHR$(128) to CHR$(255) may be followed by one or more additional bytes in order to accurately represent non-U.S. characters.  The exact definition of these characters depends upon the character set in use.  WIDE characters are always represented by two bytes per character.  If the Chr option is not specified, the default mode is ANSI.


See Also


Random Access Files

Binary Files