2-9 FORMATTED / LIST-DIRECTED / UNFORMATTED I/O
************************************************
A small glossary
----------------
I/O STATEMENT WRITE (UNIT=10, FMT='(1X,A,I6)', END=999) ' i= ', i
CONTROL LIST (UNIT=10, FMT='(1X,A,I6)', END=999)
SPECIFIERS:
FORMAT FMT='(1X,A,I6)', FMT=*
RECORD REC=nrecord (Only for files opened DIRECT)
ERROR ERR=999
END-OF-FILE END=999 (Not for files opened DIRECT)
I/O STATUS IOSTAT=intvar (Values are implementation-dependant)
I/O LIST ' i= ', i (should be compatible with the format)
Formatted vs. unformatted - two ways to store numbers
-----------------------------------------------------
There are two different ways to represent integer and floating
point numbers:
1) UNFORMATTED - is just the binary representation the computer
uses in the CPU registers and in the main memory. Such files
can be read/written efficiently because no translations are
needed, they also take less space on disk.
2) FORMATTED representation is the sequence of characters used to
describe the number in some radix (usually 10), it may contain
the ten digits and few more characters like '+', '-', or 'E'.
For example, the integer 1024 may be represented as:
3 2 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Unformatted representation
We assume here INTEGER*4 data type. remember that: 1024 = 2 ** 10
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|0|0|1|1|0|0|0|1| |0|0|1|1|0|0|0|0| |0|0|1|1|0|0|1|0| |0|0|1|1|0|1|0|0|
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
Formatted representation
The four digits '1', '0', '2', '4' are kept each in a byte, the
bytes are ordered here from left to right.
An excerpt from the ASCII table will help here:
Character ASCII value ASCII in binary
--------- ----------- ---------------
0 48 00110000
1 49 00110001
2 50 00110010
3 51 00110011
4 52 00110100
5 53 00110101
6 54 00110110
7 55 00110111
8 56 00111000
9 57 00111001
+ 43 00101011
- 45 00101101
E 69 01000101
Floating point numbers will need '+', '-', 'E'
A formatted file contents are a sequence of printable characters
which may be displayed on the screen, or viewed with a text editor.
An unformatted file contain sequences of compiler/machine dependent
representations of data values, and is not suitable for viewing.
Note that for character data there is no difference between the
formatted and unformatted methods of recording data.
The three I/O methods
---------------------
FORTRAN I/O is record-oriented, see the chapter on files and records
for more info on records and the structure of files.
There are three I/O processing methods (not record attributes):
1) UNFORMATTED - Data is copied between file and memory as is.
2) FORMATTED - Radix conversion (decimal-binary) and editing
3) LIST-DIRECTED - Like formatted, but with default formats
When reading/writing unformatted files it is enough to specify the
variables you wish to read/write. Since you are using the compiler-
defined internal representations, the compiler has all information.
Reading/Writing formatted files requires specifying more information,
e.g. how many digits should be displayed for the mantissa of a REAL
number, the solution adopted by many programming languages is using
a FORMAT SPECIFICATION.
Comparison of the three I/O methods
===================================
INPUT/OUTPUT characteristics:
---------------|--------------------|-------------------|---------------------
| List-directed | Formatted | Unformatted
---------------|--------------------|-------------------|---------------------
Syntax | FMT=* | FMT='(format)' | No format
| | | specifier is used
---------------|--------------------|-------------------|---------------------
Type of | Printable chars | Printable chars | Binary, like in
representation | only, radix 10 | only, radix 10 | registers & memory
---------------|--------------------|-------------------|---------------------
Record | Sequence of | Sequence of | Sequence of internal
content | characters | characters | representations
---------------|--------------------|-------------------|---------------------
Natural unit | Character storage | Character storage | Numeric/character
of size | unit, usually byte | unit, usually byte| storage unit
---------------|--------------------|-------------------|---------------------
CPU time | High | High | Low
consumption | | |
---------------|--------------------|-------------------|---------------------
File size | Larger | Larger | Smaller
| | |
---------------|--------------------|-------------------|---------------------
(continued...)
---------------|--------------------|-------------------|---------------------
| List-directed | Formatted | Unformatted
---------------|--------------------|-------------------|---------------------
Precision loss | Yes | Yes | No
| | |
---------------|--------------------|-------------------|---------------------
Separators | Blank (Space) | No, pre-determined| No, pre-determined
in input? | Comma | offsets in record | offsets in record
---------------|--------------------|-------------------|---------------------
Multi-record | Yes, automatic | Yes, with a '/' | No, one record
Input/output | and manual | or format re-scan | for each statement
---------------|--------------------|-------------------|---------------------
File opened | | Allowed | Not allowed
formatted | | |
---------------|--------------------|-------------------|---------------------
File opened | | Not allowed | Allowed
unformatted | | |
---------------|--------------------|-------------------|---------------------
Internal files | No | In sequential | No
are allowed? | | access mode |
---------------|--------------------|-------------------|---------------------
Direct files | No | Yes | Yes
are allowed? | | |
---------------|--------------------|-------------------|---------------------
INPUT characteristics:
======================
---------------|--------------------|-------------------|---------------------
| List-directed | Formatted | Unformatted
---------------|--------------------|-------------------|---------------------
Character | Should be enclosed | No quotes needed | No quotes needed
input quoted? | in quotes | |
---------------|--------------------|-------------------|---------------------
Null values | Yes, corresponding | |
are supported | var doesn't change | |
---------------|--------------------|-------------------|---------------------
Repeat-counts | Yes, for constants | |
are allowed | and null values | |
---------------|--------------------|-------------------|---------------------
Blank | Yes, except within | |
Collapsing | character constant | |
---------------|--------------------|-------------------|---------------------
Auto-skip of | | |
empty records | | |
---------------|--------------------|-------------------|---------------------
OUTPUT characteristics:
=======================
---------------|--------------------|-------------------|---------------------
| List-directed | Formatted | Unformatted
---------------|--------------------|-------------------|---------------------
Carriage | Prefixes a blank | Chops first char. | Carriage-control
control | before each record | sent to 'printers'| is inactive
---------------|--------------------|-------------------|---------------------
Repeat-counts | May be implemented | |
are allowed | | |
---------------|--------------------|-------------------|---------------------
Values cut at | Starts on a new | | No
end of record | line if it helps | |
---------------|--------------------|-------------------|---------------------
Blank | | |
Collapsing | | |
---------------|--------------------|-------------------|---------------------
Auto-skip of | | |
empty records | | |
---------------|--------------------|-------------------|---------------------
List-directed (free-field) I/O vs. the other methods
=====================================================
Advantages | Disadvantages
----------------------------------|-------------------------------------
Flexible input - values don't | Slower than unformatted
have to be at fixed offsets |
from the record beginning |
----------------------------------|-------------------------------------
Simplicity - gives nice results | Larger files than in unformatted
with minimal effort |
----------------------------------|-------------------------------------
Accepts repeat-counts and null | Some precision is lost on
values (leave corresponding | internal/ASCII conversions
variable unchanged) |
----------------------------------|-------------------------------------
Accepts two types of value- | Character input requires
delimiters: COMMA and SPACE | apostrophe delimiting
----------------------------------|-------------------------------------
Portable output | Internal files not allowed
|
----------------------------------|-------------------------------------
Record spanning - reading/writing | Direct files not allowed
automatically advances to next |
record if needed, no exceptions |
are generated |
----------------------------------|-------------------------------------
Overflowing and underflowing I/O transfers
==========================================
SEQUENTIAL ACCESS METHOD
-------------------|------------------------|-------------------------
| Record length smaller | Record length larger
| than I/O list size | than I/O list size
| [and format size] | [and format size]
===================|========================|=========================
List-directed | Automatically starts |
input | a new record |
-------------------|------------------------|-------------------------
List-directed | Automatically starts |
output | a new record |
===================|========================|=========================
Formatted input | Not allowed |
| |
-------------------|------------------------|-------------------------
Formatted output | Not allowed | Padding with blanks
| | (SPACE characters)
===================|========================|=========================
Unformatted input | Not allowed | Ignores rest of record
| |
-------------------|------------------------|-------------------------
Unformatted output | |
| |
===================|========================|=========================
DIRECT ACCESS METHOD
-------------------|------------------------|-------------------------
| Record length smaller | Record length larger
| than I/O list size | than I/O list size
| [and format size] | [and format size]
===================|========================|=========================
List-directed | Not allowed | Not allowed
input | |
-------------------|------------------------|-------------------------
List-directed | Not allowed | Not allowed
output | |
===================|========================|=========================
Formatted input | |
| |
-------------------|------------------------|-------------------------
Formatted output | Not allowed | Padding with blanks
| | (SPACE characters)
===================|========================|=========================
Unformatted | |
input | |
-------------------|------------------------|-------------------------
Unformatted | Not allowed | Rest of record
output | | contains garbage
===================|========================|=========================
An example program:
PROGRAM READFL
C ------------------------------------------------------------------
INTEGER
* I, SMALL(5), BIG(15)
C ------------------------------------------------------------------
OPEN( UNIT = 10,
* FILE = 'tmp.inp',
* ACCESS = 'SEQUENTIAL',
* STATUS = 'OLD',
* FORM = 'FORMATTED')
C ------------------------------------------------------------------
WRITE (*,*)
WRITE (*,'(6X,A)') ' Reading less than a record (Formatted): '
WRITE (*,'(6X,A)') ' ======================================= '
C ------------------------------------------------------------------
DO I = 1, 3
READ(UNIT=10, FMT='(5I4)') SMALL
WRITE(UNIT=*, FMT='(6X,5I4)') SMALL
ENDDO
C ------------------------------------------------------------------
WRITE (*,*)
WRITE (*,'(6X,A)') ' Reading less than a record (List-directed): '
WRITE (*,'(6X,A)') ' =========================================== '
REWIND(UNIT=10)
C ------------------------------------------------------------------
DO I = 1, 3
READ(UNIT=10, FMT=*) SMALL
WRITE(UNIT=*, FMT='(6X,5I4)') SMALL
ENDDO
C ------------------------------------------------------------------
WRITE (*,*)
WRITE (*,'(6X,A)') ' Reading more than a record (Formatted): '
WRITE (*,'(6X,A)') ' ======================================= '
REWIND(UNIT=10)
C ------------------------------------------------------------------
DO I = 1, 3
READ(UNIT=10, FMT='(15I4)') BIG
WRITE(UNIT=*, FMT='(6X,15I4)') BIG
ENDDO
C ------------------------------------------------------------------
WRITE (*,*)
WRITE (*,'(6X,A)') ' Reading more than a record (List-directed): '
WRITE (*,'(6X,A)') ' =========================================== '
REWIND(UNIT=10)
C ------------------------------------------------------------------
DO I = 1, 3
READ(UNIT=10, FMT=*) BIG
WRITE(UNIT=*, FMT='(6X,15I4)') BIG
ENDDO
C ------------------------------------------------------------------
END
The input file for this example is:
11, 12, 13, 14, 15, 16, 17, 18, 19
21, 22, 23, 24, 25, 26, 27, 28, 29
31, 32, 33, 34, 35, 36, 37, 38, 39
41, 42, 43, 44, 45, 46, 47, 48, 49
51, 52, 53, 54, 55, 56, 57, 58, 59
61, 62, 63, 64, 65, 66, 67, 68, 69
71, 72, 73, 74, 75, 76, 77, 78, 79
81, 82, 83, 84, 85, 86, 87, 88, 89
91, 92, 93, 94, 95, 96, 97, 98, 99
A possible output of the example program:
Reading less than a record (Formatted):
=======================================
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
Reading less than a record (List-directed):
===========================================
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
Reading more than a record (Formatted):
=======================================
11 12 13 14 15 16 17 18 19 0 0 0 0 0 0
21 22 23 24 25 26 27 28 29 0 0 0 0 0 0
31 32 33 34 35 36 37 38 39 0 0 0 0 0 0
Reading more than a record (List-directed):
===========================================
11 12 13 14 15 16 17 18 19 21 22 23 24 25 26
31 32 33 34 35 36 37 38 39 41 42 43 44 45 46
51 52 53 54 55 56 57 58 59 61 62 63 64 65 66
Mixing "formatted" and "unformatted" I/O
----------------------------------------
Formally these are incompatible I/O processing methods, and should
never be mixed in the same file, however it is useful to include a
textual header at the beginning of an unformatted file, and there
is a simple workaround technique to do it.
This technique can be used to store in the first records of an
unformatted file all the information needed to read the file on
a different machine: internal structure, type of floating-point
numbers used, etc.
Unformatted files may contain text, as it is just character data,
but some file-viewing programs don't "like" unformatted files,
because they may contain control bytes that can't be interpreted
as printable characters.
It's difficult to arrange that these first records can be viewed by
all file-viewing programs, without displaying "garbage", or causing
undesirable effects to the terminal. A FORTRAN routine can easily
do it, and another one can write this "header records" (see the
examples appendix).
Advancing and non-advancing I/O
-------------------------------
FORTRAN 77 I/O is always advancing, i.e. every WRITE statement
starts a new record, and every READ statement starts reading
at the beginning of the next record, even if the preceding
READ didn't 'exhausted' the preceding record.
With non-advancing I/O, WRITE and READ continue in the
current record, until explicitly told to start a new one.
To make FORTRAN 77 formatted I/O non-advancing you need a
library of buffering routines.
Fortran 90 supports both I/O types.
Status values returned by the IOSTAT specifier
----------------------------------------------
IOSTAT values are not standard, as I/O errors are implementation
dependant, the standard says only that no-error has a zero value,
and the error conditions have strictly positive values.
One advantage of using the IOSTAT specifier over the ERR and END
specifiers, is that you can use a block IF condition to deal with
the status returned, for example:
OPEN(...., IOSTAT=ios, ....)
IF (ios .GT. 0) THEN
WRITE(*,*) ' OPEN error no. ', ios
STOP
ELSE
WRITE(*,*) ' File was opened... '
ENDIF
The disadvantage of this method is that you lose the diagnostic
message from the I/O run-time library, and have to translate
yourself the error number, a system-dependant process.
Sometimes you need to know the IOSTAT values in order to write
a program (non-portable) that can gracefully handle various
error conditions.
You can find IOSTAT values in:
SYS$LIBRARY:FORIOSDEF.FOR (OpenVMS)
the perror manpage (IRIX)
Remember that if you use IOSTAT you give up the protection of the
compiler, if an I/O error occurs, the variables you tried to read
may be trashed and unusable, and even your position in the file
may be lost and you will have to find it again. Having used IOSTAT
the program will not abort and it's up to you to handle the situation.
A much more important factor in the social movement than those already mentioned was the ever-increasing influence of women. This probably stood at the lowest point to which it has ever fallen, during the classic age of Greek life and thought. In the history of Thucydides, so far as it forms a connected series of events, four times only during a period of nearly seventy years does a woman cross the scene. In each instance her apparition only lasts for a moment. In three of the four instances she is a queen or a princess, and belongs either to the half-barbarous kingdoms of northern Hellas or to wholly barbarous Thrace. In the one remaining instance208— that of the woman who helps some of the trapped Thebans to make their escape from Plataea—while her deed of mercy will live for ever, her name is for ever lost.319 But no sooner did philosophy abandon physics for ethics and religion than the importance of those subjects to women was perceived, first by Socrates, and after him by Xenophon and Plato. Women are said to have attended Plato’s lectures disguised as men. Women formed part of the circle which gathered round Epicurus in his suburban retreat. Others aspired not only to learn but to teach. Arêtê, the daughter of Aristippus, handed on the Cyrenaic doctrine to her son, the younger Aristippus. Hipparchia, the wife of Crates the Cynic, earned a place among the representatives of his school. But all these were exceptions; some of them belonged to the class of Hetaerae; and philosophy, although it might address itself to them, remained unaffected by their influence. The case was widely different in Rome, where women were far more highly honoured than in Greece;320 and even if the prominent part assigned to them in the legendary history of the city be a proof, among others, of its untrustworthiness, still that such stories should be thought worth inventing and preserving is an indirect proof of the extent to which feminine influence prevailed. With the loss of political liberty, their importance, as always happens at such a conjuncture, was considerably increased. Under a personal government there is far more scope for intrigue than where law is king; and as intriguers women are at least the209 equals of men. Moreover, they profited fully by the levelling tendencies of the age. One great service of the imperial jurisconsults was to remove some of the disabilities under which women formerly suffered. According to the old law, they were placed under male guardianship through their whole life, but this restraint was first reduced to a legal fiction by compelling the guardian to do what they wished, and at last it was entirely abolished. Their powers both of inheritance and bequest were extended; they frequently possessed immense wealth; and their wealth was sometimes expended for purposes of public munificence. Their social freedom seems to have been unlimited, and they formed combinations among themselves which probably served to increase their general influence.321 The old religions of Greece and Italy were essentially oracular. While inculcating the existence of supernatural beings, and prescribing the modes according to which such beings were to be worshipped, they paid most attention to the interpretation of the signs by which either future events in general, or the consequences of particular actions, were supposed to be divinely revealed. Of these intimations, some were given to the whole world, so that he who ran might read, others were reserved for certain favoured localities, and only communicated through the appointed ministers of the god. The Delphic oracle in particular enjoyed an enormous reputation both among Greeks and barbarians for guidance afforded under the latter conditions; and during a considerable period it may even be said to have directed the course of Hellenic civilisation. It was also under this form that supernatural religion suffered most injury from the great intellectual movement which followed the Persian wars. Men who had learned to study the constant sequences of Nature for themselves, and to shape their conduct according to fixed principles of prudence or of justice, either thought it irreverent to trouble the god about questions on which they were competent to form an opinion for themselves, or did not choose to place a well-considered scheme at the mercy of his possibly interested responses. That such a revolution occurred about the middle of the fifth century B.C., seems proved by the great change of tone in reference to this subject which one perceives on passing from Aeschylus to Sophocles. That anyone should question the veracity of an oracle is a supposition which never crosses the mind of the elder dramatist. A knowledge of augury counts among the greatest benefits222 conferred by Prometheus on mankind, and the Titan brings Zeus himself to terms by his acquaintance with the secrets of destiny. Sophocles, on the other hand, evidently has to deal with a sceptical generation, despising prophecies and needing to be warned of the fearful consequences brought about by neglecting their injunctions. The stranger had a pleasant, round face, with eyes that twinkled in spite of the creases around them that showed worry. No wonder he was worried, Sandy thought: having deserted the craft they had foiled in its attempt to get the gems, the man had returned from some short foray to discover his craft replaced by another. “Thanks,” Dick retorted, without smiling. When they reached him, in the dying glow of the flashlight Dick trained on a body lying in a heap, they identified the man who had been warned by his gypsy fortune teller to “look out for a hidden enemy.” He was lying at full length in the mould and leaves. "But that is sport," she answered carelessly. On the retirement of Townshend, Walpole reigned supreme and without a rival in the Cabinet. Henry Pelham was made Secretary at War; Compton Earl of Wilmington Privy Seal. He left foreign affairs chiefly to Stanhope, now Lord Harrington, and to the Duke of Newcastle, impressing on them by all means to avoid quarrels with foreign Powers, and maintain the blessings of peace. With all the faults of Walpole, this was the praise of his political system, which system, on the meeting of Parliament in the spring of 1731, was violently attacked by Wyndham and Pulteney, on the plea that we were making ruinous treaties, and sacrificing British interests, in order to benefit Hanover, the eternal millstone round the neck of England. Pulteney and Bolingbroke carried the same attack into the pages of The Craftsman, but they failed to move Walpole, or to shake his power. The English Government, instead of treating Wilkes with a dignified indifference, was weak enough to show how deeply it was touched by him, dismissed him from his commission of Colonel of the Buckinghamshire Militia, and treated Lord Temple as an abettor of his, by depriving him of the Lord-Lieutenancy of the same county, and striking his name from the list of Privy Councillors, giving the Lord-Lieutenancy to Dashwood, now Lord Le Despencer. "I tell you what I'll do," said the Deacon, after a little consideration. "I feel as if both Si and you kin stand a little more'n you had yesterday. I'll cook two to-day. We'll send a big cupful over to Capt. McGillicuddy. That'll leave us two for to-morrer. After that we'll have to trust to Providence." "Indeed you won't," said the Surgeon decisively. "You'll go straight home, and stay there until you are well. You won't be fit for duty for at least a month yet, if then. If you went out into camp now you would have a relapse, and be dead inside of a week. The country between here and Chattanooga is dotted with the graves of men who have been sent back to the front too soon." "Adone do wud that—though you sound more as if you wur in a black temper wud me than as if you pitied me." "Wot about this gal he's married?" "Don't come any further." "Davy, it 'ud be cruel of us to go and leave him." "Insolent priest!" interrupted De Boteler, "do you dare to justify what you have done? Now, by my faith, if you had with proper humility acknowledged your fault and sued for pardon—pardon you should have had. But now, you leave this castle instantly. I will teach you that De Boteler will yet be master of his own house, and his own vassals. And here I swear (and the baron of Sudley uttered an imprecation) that, for your meddling knavery, no priest or monk shall ever again abide here. If the varlets want to shrieve, they can go to the Abbey; and if they want to hear mass, a priest can come from Winchcombe. But never shall another of your meddling fraternity abide at Sudley while Roland de Boteler is its lord." "My lord," said Edith, in her defence, "this woman has sworn falsely. The medicine I gave was a sovereign remedy, if given as I ordered. Ten drops would have saved the child's life; but the contents of the phial destroyed it. The words I uttered were prayers for the life of the child. My children, and all who know me, can bear witness that I have a custom of asking His blessing upon all I take in hand. I raised my eyes towards heaven, and muttered words; but, my lord, they were words of prayer—and I looked up as I prayed, to the footstool of the Lord. But it is in vain to contend: the malice of the wicked will triumph, and Edith Holgrave, who even in thought never harmed one of God's creatures, must be sacrificed to cover the guilt, or hide the thoughtlessness of another." "Aye, Sir Treasurer, thou hast reason to sink thy head! Thy odious poll-tax has mingled vengeance—nay, blood—with the cry of the bond." HoME古一级毛片免费观看
ENTER NUMBET 0017 www.voiov.com.cn dusu0.com.cn k-led.com.cn zhangshe.com.cn tjfxj.com.cn hamama.com.cn www.385531.org.cn zaore4.net.cn www.ahmmwang.org.cn xiaqi5.net.cn