3.12 Read

Read( filename )

Read reads the input from the file with the filename filename, which must be a string.

Read first opens the file filename. If the file does not exist, or if GAP can not open it, e.g., because of access restrictions, an error is signalled.

Then the contents of the file are read and evaluated, but the results are not printed. The reading and printing happens exactly as described for the main loop (see Main Loop).

If an input in the file contains a syntactical error, a message is printed, and the rest of this statement is ignored, but the rest of the file is read.

If a statement in the file causes an error a break loop is entered (see Break Loops). The input for this break loop is not taken from the file, but from the input connected to the stderr output of GAP. If stderr is not connected to a terminal, no break loop is entered. If this break loop is left with quit (or ctr-D) the file is closed and GAP does not continue to read from it.

Note that a statement may not begin in one file and end in another, i.e., eof (end of file) is not treated as whitespace, but as a special symbol that must not appear inside any statement.

Note that one file may very well contain a read statement causing another file to be read, before input is again taken from the first file. There is an operating system dependent maximum on the number of files that may be open at once, usually it is 15.

The special file name "*stdin*" denotes the standard input, i.e., the stream through which the user enters commands to GAP. The exact behaviour of Read( "*stdin*" ) is operating system dependent, but usually the following happens. If GAP was started with no input redirection, statements are read from the terminal stream until the user enters the end of file character, which is usually ctr-D. Note that terminal streams are special, in that they may yield ordinary input after an end of file. Thus when control returns to the main read eval print loop the user can continue with GAP. If GAP was started with an input redirection, statements are read from the current position in the input file up to the end of the file. When control returns to the main read eval print loop the input stream will still return end of file, and GAP will terminate. The special file name "*errin*" denotes the stream connected with the stderr output. This stream is usually connected to the terminal, even if the standard input was redirected, unless the standard error stream was also redirected, in which case opening of "*errin*" fails, and Read will signal an error.

Read is implemented in terms of the function READ, which behaves exactly like Read, except that READ does not signal an error when it can not open the file. Instead it returns true or false to indicate whether opening the file was successful or not.

Previous Up Top Next
Index

GAP 3.4.4
April 1997