Προγραμματισμός FORTRAN > Μαθήματα > Μορφοποίηση-Ανακατεύθυνση Ι/Ο
Αρχική-HomeΠαραδείγματαΕντολές-ΣυναρτήσειςΟδηγίες-FAQsΣυνδέσεις-Links

ΜΑΘΗΜΑ: ΜΟΡΦΟΠΟΙΗΣΗ & ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ/ΕΞΟΔΟΥ (Ι/Ο)

Όταν τα δεδομένα δεν προέρχονται από το πληκτρολόγιο ή τα αποτελέσματα δεν προορίζονται για την οθόνη τότε έχουμε ανακατεύθυνση εισόδου/εξοδου. Ο πρώτος αστερίσκος στις εντολές I/O (*,...) αντικαθίσταται από τον αριθμό του Αρχείου από ή πρός το οποίο θα σταλούν τα δεδομένα μας. Ο αριθμός αυτός θα πρέπει να έχει δηλωθεί νωρίτερα με την εντολή OPEN η οποία ανοίγει το αντίστοιχο αρχείο προς χρήση. Μετά τη χρήση του, το αρχείο κλείνει με την εντολή CLOSE ή με το τέλος του προγράμματος (END).

Όταν απαιτείται ορισμένη μορφή στα δεδομένα ή τα αποτελέσματα, τότε χρησιμοποιούμε την εντολή μορφοποίησης FORMAT. Ο δεύτερος αστερίσκος στις εντολές I/O (...,*) αντικαθίσταται από τον αριθμό του FORMAT το οποίο περιγράφει το τρόπο διαμόρφωσης των δεδομένων στην είσοδο ή των αποτελεσμάτων στην έξοδο. Η εντολή FORMAT χρησιμοποιεί ειδικούς κωδικούς περιγραφής format για τη μορφοποίηση των δεδομένων και έχει συγκεκριμένους κανόνες σύνταξης & χρήσης.


αρχή

ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ/ΕΞΟΔΟΥ

Η βασική και συνηθέστερη σύνταξη της εντολής READ περιέχει, τη μονάδα (unit) από την οποία προέρχονται τα δεδομένα, τον τρόπο (format) με το οποίο γράφτηκαν τα δεδομένα, και, τη λίστα των μεταβλητών (Ι/Ο list) στις οποίες θα αποθηκευτούν τα δεδομένα:

READ (unit, format) [λίστα μεταβλητών]

H εντολή READ μπορεί να περιέχει και άλλες παραμέτρους σχετικές με τη διαδικασία ανάγνωσης των δεδομένων, π.χ.:

READ (unit, format [, iostat] [, end] ...) [λίστα μεταβλητών]

Η παράμετρος IOSTAT είναι από τις πιο σημαντικές, και μας επιστρέφει: το 0 όταν η εντολή λειτουργεί κανονικά, γίνεται αρνητική όταν συναντήσει το τέλος του αρχείου, και, παίρνει θετικές τιμές αν συμβεί κάποιο άλλο λάθος (ανάλογα με το σύστημα του Η/Υ). Π.χ.:

DO
  READ(unit=10, format=5, iostat=k) a, b, c
  IF (k /= 0) EXIT
  ...
END DO

Από όλες τις παραμέτρους μόνο οι δυο πρώτες μπορούν να παραληφθούν σαν λέξεις και να γραφεί μόνο η τιμή τους. Όταν οι δύο αυτές παράμετροι πάρουν τη τιμή (*) τότε, χρησιμοποιούνται οι προεπιλογές του συστήματος για την είσοδο, που συνήθως είναι (πληκτρολόγιο, χωρίς format). Π.χ.:

READ(unit=10, format=5) a, b, c
5 FORMAT(3F5.1)
READ(10,5) a, b, c ! από τη μονάδα 10 με το format 5
READ(*,*) a, b, c ! από το πληκτρολόγιο χωρίς format
READ(5,*) a, b, c ! από το πληκτρολόγιο χωρίς format


αρχή

ΜΟΡΦΟΠΟΙΗΣΗ ΕΙΣΟΔΟΥ/ΕΞΟΔΟΥ

Τα FORMAT αποτελούνται από λίστες με έναν ή περισσότερους κωδικούς περιγραφής (format descriptors) οι οποίοι περιέχονται μέσα σε παρενθέσεις και διαχωρίζονται με κόμμα ή διά ( , / ). Κάθε Format είναι και μια σειρά χαρακτήρων η οποία:

  • είτε τοποθετείται στην αντίστοιχη θέση των εντολών READ & WRITE,
  • είτε γράφεται σαν ξεχωριστή εντολή FORMAT αριθμημένη ώστε να μπορούν να αναφερθούν σε αυτή οι εντολές READ & WRITE,
  • ή, δίνεται σαν μια μεταβλητή τύπου CHARACTER.

Όταν δεν δίνεται από τον προγραμματιστή η περιγραφή του FORMAT αλλά στη θέση του έχει τοποθετηθεί ο αστερίσκος ( * ), τότε χρησιμοποιείται η προεπιλεγμένη (default) μορφή του FORMAT, η οποία είναι συνήθως ικανοποιητική για τη πλειοψηφία των απλών προγραμμάτων.

Οι διαφορετικοί τρόποι ορισμού του FORMAT φαίνονται στο παρακάτω παράδειγμα:

WRITE (unit=20, format='(1Χ,3F8.3)' ) a, b, c
WRITE (20, '(1Χ,3F8.3)' ) a, b, c

ή,

WRITE (unit=20, format=6) a, b, c
WRITE (20,6) a, b, c
6 FORMAT (1Χ,3F8.3)

ή,

CHARACTER:: abc_format='(1Χ,3F8.3)'
WRITE (unit=20, format=abc_format) a, b, c
WRITE (20,abc_format) a, b, c

ή, χωρίς FORMAT (default),

WRITE (20,*) a, b, c


αρχή

ΚΩΔΙΚΟΙ ΠΕΡΙΓΡΑΦΗΣ FORMAT

Οι κωδικοί περιγραφής ρυθμίζουν την εμφάνιση των τιμών που περιέχουν οι μεταβλητές, ώστε η εσωτερική αναπαράστασή τους στον Η/Υ να μετατρέπεται στους σωστούς και κατανοητούς από τον άνθρωπο χαρακτήρες.

Κάθε κωδικός περιγραφής αντιστοιχεί και σε ένα από τα περιεχόμενα της λίστας (Ι/Ο) της αντίστοιχης εντολής READ ή WRITE. Οι κωδικοί διακρίνονται σε κωδικούς για δεδομένα και κωδικούς για έλεγχο.

Τα διαθέσιμα είδη κωδικών περιγραφής Format περιέχονται στους παρακάτω πίνακες:

Κωδικοί Δεδομένων

Κωδικός

Γραφή

Αποτέλεσμα

A[w] 

Για αλφαριθμητικές (Character) τιμές.

Bw[.m] 

Για δυαδικές (Binary) τιμές. 

Dw.d 

Για πραγματικές (Real) τιμές με εκθετικό D.  

Ew.d[Ee] 

Για πραγματικές (Real) τιμές με εκθετικό E.  

EN 

ENw.d[Ee] 

Για πραγματικές (Real) τιμές με εκθετικό E σε διατύπωση μηχανική (engineering).  

ES 

ESw.d[Ee] 

Για πραγματικές (Real) τιμές με εκθετικό E σε διατύπωση φυσική (scientific).  

Fw.d 

Για πραγματικές (Real) τιμές χωρίς εκθετικό.  

Gw.d[Ee] 

Για τιμές οποιουδήποτε τύπου (general).  

Iw[.m] 

Για ακέραιες (Integer) τιμές.  

Lw 

Για λογικές (Logical) τιμές (T, F)

Ow[.m] 

Για οκταδικές (Octal) τιμές. 

Zw[.m] 

Για Δεκαεξαδικές (Hexadecimal) τιμές. 

όπου:

  • w  είναι ο συνολικός αριθμός των θέσεων που θα χρησιμοποιηθούν,
  • m  είναι ο ελάχιστος αριθμός ψηφίων που πρέπει να υπάρχουν στο πεδίο
  • d  είναι ο αριθμός των ψηφίων δεξιά της υποδιαστολής
  • E  είναι το εκθετικό πεδίο
  • e  είναι ο αριθμός των ψηφίων του εκθετικού πεδίου

Κωδικοί Ελέγχου & Χαρακτήρων

Κωδικός

Γραφή

Αποτέλεσμα

BN 

BN 

Αγνοεί τα κενά στα πεδία εισόδου. 

BZ 

BZ 

Μετατρέπει τα κενά στα πεδία εισόδου σε μηδενικά.  

kP 

Αλλάζει τη κλίμακα εμφάνισης πραγματικών αριθμών. 

Q

Q

Επιστρέφει τον αριθμό των χαρακτήρων που απομένουν στην εγγραφή εισόδου. 

Αλλάζει την εμφάνιση / απόκρυψη του πρόσημου (+). 

SP 

SP 

Εμφανίζει το προαιρετικό θετικό πρόσημο (+). 

SS 

SS 

Κρύβει το προαιρετικό θετικό πρόσημο (+). 

Tn 

Τοποθετεί στο n Tab. 

TL 

TLn 

Τοποθετεί στο n Αριστερό Tab.

TR 

TRn 

Τοποθετεί στο n Δεξί Tab.  

nX 

Αφήνει έναν αριθμό θέσεων (n) και συνεχίζει μετά. 

Terminates format control if there are no more items in the I/O list. 

Αλλάζει γραμμή ή εγγραφή

\ 

\  

Συνεχίζει στην ίδια γραμμή ή εγγραφή. Ίδιο με το $. 

nHch[ch...] 

Μεταφέρει τους n χαρακτήρες που ακολουθούν το H στην έξοδο (Hollerith). 

'c'

"c"

'abcd'

"abcd"

Μεταφέρει τους χαρακτήρες που περιέχονται στα μονά ή διπλά εισαγωγικά, στην έξοδο. 


αρχή

ΚΑΝΟΝΕΣ ΤΗΣ FORMAT

Οι κανόνες σύνταξης και χρήσης της εντολής FORMAT είναι:

  1. Η εντολή FORMAT πρέπει να είναι πάντα αριθμημένη (labeled).
  2. Η εντολή FORMAT πρέπει να περιέχει τουλάχιστον ένα κωδικό δεδομένων όταν καλείται από εντολή που έχει λίστα Ι/Ο.
  3. Οι κωδικοί χωρίζονται με κόμμα. Το κόμμα μπορεί να παραληφθεί μόνο πριν και μετά από ( / ή, : ), ή, ανάμεσα στο κωδικό P και τον επόμενο του F, E, D, ή, G).
  4. Οι κωδικοί δεδομένων μπορεί να έχουν μπροστά τους ένα συντελεστή επανάληψης.
  5. Κενοί χαρακτήρες πριν και μετά τη παρένθεση του FORMAT αγνοούνται.
  6. Γενικά, δεν επιτρέπονται μεταβλητές μέσα στο FORMAT. Μόνον όταν ο κωδικός περιγραφής ακολουθείται από ακέραιο, μπορούμε να τον υπολογίσουμε από μια ακέραια παράσταση μέσα σε αγκύλες ( < και > ).

αρχή

Prev Μάθημα Next


Παραδείγματα

Ερωτήσεις


©2006 Δρ. Β. Χ. Μούσας, Επικ. Καθ., e-mail Τ.Ε.Ι. ΑθήναςΤμήμα Πολιτικών Έργων Υποδομής