Transcript Document

FORTRAN 77
Programming.
Lecture 5 : January 2001
Dr. Andrew Paul Myers
17/07/2015
1
Screen Output.
So far the output of results to the screen
has been “messy”, because we have been
using “free format”. e.g.
PRINT*,’Radius = ‘,radius,’ cm’
typical screen output :
Radius =
17/07/2015
7.2345121
cm
2
Free Format.

Free format is simple and easy to use. e.g. with the
PRINT* and READ* statements.

Assumes numeric input, therefore limited.

Always uses greatest accuracy possible.

Pads out printed variable and text into columns.

17/07/2015
Lines that should fit on the screen “wrap around” onto
the next line, because of this padding.
3
Formatted I/O.
The solution to our problem is:
Formatted I/O (Input, Output)
You have seen formatted input
already!
READ’(A10)’,character_string
17/07/2015
4
Formatted I/O.
The general form of formatted I/O
Statements is as follows:
PRINT’(<Format>)’,<variable(s)>
READ’(<Format>)’,<variable(s)>
<Format> is a format specifier.
17/07/2015
5
Format Specifiers.
Format specifiers for variables
consist of a letter and a digit(s).




17/07/2015
A : Character variable.
I : Integer variable.
F : Real variable.
E : Real variable, exponential form.
6
Examples.
A10 : String variable 10 characters long.
e.g. ‘Hello ‘.
I8 : Integer, 8 digits long.
F6.2 : Real variable, 2 decimal places, 6 digits
long including decimal points and minus
signs.
17/07/2015
7
F6.2 again.
All these numbers are in F6.2 format.
Number
C1
C2
C3
C4
C5
C6
345.19
3
4
5
.
1
9
1
.
2
0
3
.
4
5
5
.
0
0
*
*
*
*
1.2
-23.45
-
2
5
9999.99
17/07/2015
*
*
8
Examples.
READ’(A30)’,string1
READ’(A30,2I4),string2,num1,num2
PRINT’(“Answer = “,F6.2)’,answer

“ / ” and “ X “ are new line and space.
PRINT’(/“A = “,I2,2X,”B = “,F10.1,//)’,a,b
PRINT’(“Enter a number “,$)’
READ*,number
17/07/2015
9
The old way…
Formatted I/O the old way, with
numeric labels.
100 FORMAT(/’A = ‘,I2,2X,’B = ‘,F10.1//)
PRINT 100,a,b
200 FORMAT(3I5)
READ 200,int1,int2,int3
17/07/2015
10
Data Files.



You must first open a data file.
Then read or write data.
Finally close the data file.
Data files are analogous to books.
Fortran OPEN statement.
OPEN(UNIT=x,FILE=y,STATUS=z)
17/07/2015
11
Opening Data Files.
Choose unit numbers >6
Unit 5 = keyboard and Unit 6 = screen!
OPEN(UNIT=20,FILE=‘data.dat’,STATUS=‘NEW’)
FILE=‘data.dat’
FILE=‘/disk/n/gps/data/data.dat’
FILE=file_name
STATUS=‘NEW’
STATUS=‘OLD’
STATUS=‘UNKNOWN’
17/07/2015
12
Reading and Writing.
Once a data file is opened use READ
And WRITE statements to access the
data file.
READ(<unit>,<format>),<variable(s)>
WRITE(<unit>,<format>),variable(s)>
17/07/2015
13
File I/O Examples.
e.g.
READ(1,*) num1,num2,num3
WRITE(20,’(5X,I5,10X,3F5.1)’) a,b,c,d
READ(25,’(2F10.5)’) data1(loop),data2(loop)
17/07/2015
14
Closing a data file.
CLOSE(UNIT=<unit> | <unit>)
CLOSE(UNT=20)
CLOSE(20)
Close data files when you have finished
with them!
17/07/2015
15
File Pointer.
The file pointer is positioned at the
beginning of a data file when it is
first opened.
REWIND(UNIT=<unit> | <unit>)
Moves the file pointer to the start.
REWIND(20) or REWIND(UNIT=20)
17/07/2015
16
Error Trapping I
IOSTAT : Used to test if a file exists if
opened with ‘OLD’ or ‘UNKNOWN’
status. e.g.
OPEN(IOSTAT=I,UNIT=20,
& FILE=‘test.dat’,STATUS=‘OLD’)
IOSTAT returns an INTEGER value.
17/07/2015
17
Error Trapping II.
Integer IOSTAT values returned are:



0 : File opened without errors.
>0 : Error, file not found?
<0 : As condition 0, but at end of
file (EOF), file empty.
What about EOF during reading data?
17/07/2015
18
Error Trapping III.
Using the END option with a READ
Statement you can test for EOF.
DO WHILE ( .NOT. 0 )
READ(25,’(I5)’,END=100 )data(i)
END DO
100 CONTINUE
17/07/2015
19