Transcript Document

Input and output
Input streams


there are two ways of handling I/o
list-directed
– done using default settings
– PRINT*, num
– READ*, num

formatted
– controlled by the programmer
– you can specify every detail of what is
printed
Output statements

PRINT
– only used for output to the screen

WRITE
– used for output to files
PRINT statements

List directed
– PRINT*, num

Formatted
– PRINT ‘(1x, i5, f8.2)’, number, temperature

With format labels
– PRINT 10, number, temperature
– 10 FORMAT (1x, i5, f8.2)
Format descriptors

(1x, i5, f8.2)
– 1 space, followed by a 5-digit integer,
followed by a real number taking up 8
spaces total with two after the decimal
point.

A format descriptor designated the
exact number of characters that will be
printed and where they will be printed.
The integer format descriptor

i used for integers, can be repeated
(5i) and can have width specified (i5)
–
–
–
–
–
–
INTEGER :: num
num = 123
PRINT ‘(i3)’, num
PRINT ‘(3i)’, num
PRINT *, num
PRINT ‘(i2)’, num
-------------> 123
-------------> 123123123
------------->
123
-------------> **
The real number descriptor

F for ‘floating point’ (real) numbers.
– Followed by an integer total field width, ‘.’,
then an integer number of decimal digits.
–
–
–
–
–
–
REAL :: num
num = 123.45
PRINT ‘(f8.2)’, num
PRINT ‘(f6.2)’ , num
PRINT*, num
PRINT ‘(f3.2)’, num
---------------> 123.45
--------------->123.45
---------------> 123.4500
---------------> ***
The character data descriptor

a
–
–
–
–
–
–
used for ‘alpha-numeric data’
CHARACTER(10) :: name
name = “Washington”
PRINT ‘(a10)’, name ---------------> Washington
PRINT ‘(a15)’, name ---------------> Washington_____
PRINT*, name
---------------> Washington
PRINT ‘(a5)’
---------------> Washi
The spacing descriptors


X - stands for ‘print a blank space’
T - stands for ‘print a tab’
–
–
–
–
–
–
INTEGER :: num1, num2
num1 = 123
num2 = 456
PRINT ‘(1x,i5,5x,i3)’, num1, num2
___123_____456
PRINT ‘(t5, i3), num1 ---------------> _____123
Difference between x and t



5x gives five spaces
t5 tabs out to column 5 (gives only 4
spaces!)
When used in tables together they are
easy to confuse.
Repetition and width
nX if first, specifies line spacing
nX n blanks or spaces printed
A number of characters matches list item
Aw w characters are printed
Iw integer is right-justified in w columns
Fw.d real no. is in w columns, d is decimal
places
Carriage controls

FIRST EDIT DESCRIPTOR
– ‘ ‘ OR 1X
PRINTS A SPACE
– ‘0’
DOUBLE LINE SPACING
– ‘1’
PRINTS ON TOP OF PAGE
– ‘+’
PRINTS WITHOUT SPACING
(OVERPRINTS)
SOME COMPILERS DON’T RECOGNIZE ALL OF
THE ABOVE
Repeating Edit Descriptors

Place a number in front of descriptor
nI4
repeats I4 n times
3F5.2
repeats F5.2 3 times
4(5X,I2) repeats 5X & I2 4 times
More descriptors
Tw
/
n(/)
Ew.d
tabs over to column w
starts rest of statement on a new line
starts rest of statement in n lines
reads numbers in scientific
notation
Literals

Individual characters may also be
inserted in formats.
– PRINT ‘(“$”, f6.2)’, price ----------> $123.45
– PRINT ‘(10(“-”))’ ---------------> ==========
Printing tables


First print the heading
Then a loop fills in the body of the table
– PRINT ‘(t10, “Number”, t20, “Square”)’
– DO n=1, 5
–
PRINT ‘(9x, i6, t20, i6)’, n, n**2
– ENDDO
–
–
–
–
–
–
---------Number----Square
--------1---1
--------2---4
--------3---9
--------4---16
--------5---25
READ statements

List directed
– READ*, num

Formatted
– READ ‘(1x, i5, f8.2)’, number, temperature

With format labels
– READ 10, number, temperature
– 10 FORMAT (1x, i5, f8.2)
Reading real numbers

Data may come in in one of two ways
– Numbers without decimal points
• the decimal digits are always filled
– Numbers with decimal points
– REAL :: num
– READ ‘(f6.2)’, num
– The data entered may be either with decimal point
(123.45) or not ( 12345)
The WRITE statement




is used to write to files
Underlies the PRINT statement
PRINT*, is really WRITE (*,*) or WRITE (6,*)
By default, write will send output to the default
output device.
– This device is the monitor
– It is identified by a number (UNIT = 6)
– Often called ‘standard output’
WRITE default examples





WRITE (*, *) num1, num2
WRITE (*, ‘(i4,1x,i6)’) num1, num2
WRITE (*, 20) num1, num2
20 FORMAT (1x. I4, t12, i5)
WRITE (UNIT = 6, FMT = 30) num1, num2
READ default settings


is used to read from files
By default, read will read from the default
input device
– This device is the keyboard
– It is identified by the number (UNIT = 5)
– Often called ‘standard input’
Default devices



UNIT 6 is standard output
UNIT 5 is standard input
It is an error to try to read from standard
output or write to standard input.
File processing


Data commonly comes to us in files.
We will learn how to handle
– text files (ASCII characters)
– rectangular, “flat files”
– sequential access

Later the book will discuss
– binary files
– direct (random) access
Opening a file

To open a file use the OPEN statement.
– First specify the UNIT number of the file
– Then the name of the FILE
– Other specifiers are
•
•
•
•
STATUS (NEW, OLD, REPLACE)
ACTION (READ, WRITE, READWRITE)
POSITION (REWIND, APPEND, ASIS)
IOSTAT (0 = ok, >0 = error)
Examples



OPEN (UNIT=12, FILE=“mydata.dat”,
STATUS = “OLD”, ACTION=“READ”,
POSITION=“REWIND”, IOSTAT=OpenStatus)
OPEN(12,FILE=“mydat”)
Both forms yield the same results due to
default settings
Using IOSTAT




IOSTAT means Input/Output Status
If the value is placed in a variable it may be
used later in the program.
OPEN (12,FILE=“mydata.dat”,
IOSTAT=OpenStatus)
IF (OpenStatus > 0) STOP “**** Cannot open
file ****”
CLOSE



Any file that is OPENed should also be closed
after your program is done using it.
CLOSE (12)
Only the UNIT number needs to be specified.
READ, IOSTAT and END=





IOSTAT is used with READ to help a program
stop reading from a file when it encounters
the end of that file (eof).
READ (12, *, IOSTAT = InputStatus) num1,
num2
IF (InputStatus < 0) EXIT
Another method is READ (12,*, END=20)
num1, num2
20 PRINT*, “The end of the file has been
encountered”