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

ΜΑΘΗΜΑ: ΧΕΙΡΙΣΜΟΣ ΑΡΧΕΙΩΝ ΜΕ ΔΕΔΟΜΕΝΑ

Στις περισσότερες εφαρμογές δεν θέλουμε να χρησιμοποιήσουμε τις προεπιλεγμένες εισόδους (πληκτρολόγιο) ή εξόδους (οθόνη) γιατί τα δεδομένα μας είναι ήδη αποθηκευμένα σε αρχεία ή τα αποτελέσματα πρέπει να τοποθετηθούν και αυτά σε αρχεία για να χρησιμοποιηθούν από άλλα προγράμματα.

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

Ένας διαφορετικός τρόπος σύνταξης των δεδομένων σε ένα αρχείο είναι η χρήση της εντολής NAMELIST.


αρχή

ΟΙ ΕΝΤΟΛΕΣ OPEN & CLOSE

Αν θέλουμε να διαβάσουμε τα δεδομένα a & b από ένα αρχείο data.txt που έχουμε στον φάκελο /temp, πρέπει πρώτα να το 'βαφτίσουμε' με έναν αριθμό και να το ανοίξουμε χρησιμοποιώντας την εντολή OPEN, πριν από τη πρώτη εντολή READ:

OPEN ( 15, FILE='/temp/data.txt')
...
READ (15,*) a, b

Αντίστοιχα, για να γράψουμε τα αποτελέσματα μας σε ένα αρχείο π.χ., apotel.txt στον ίδιο φάκελο /temp, θα χρησιμοποιήσουμε τις εντολές:

OPEN ( 16, FILE='/temp/apotel.txt')
...
WRITE (16,*) ' Ta apotelesmata einai: ', a, b

Όταν τελειώσει ένα πρόγραμμα με την END θα κλείσει τα αρχεία που ανοίξαμε για Ι/Ο. Αν θέλουμε να τα κλείσουμε νωρίτερα, χρησιμοποιούμε την εντολή CLOSE και τον αριθμό του αρχείου που ορίσαμε με την OPEN, Π.χ.:

CLOSE (15)

Η απλούστερη μορφή σύνταξης των εντολών ανακατεύθυνσης Ι/Ο είναι:

OPEN (n, FILE='διαδρομή/αρχείου/στο/δίσκο')
...
READ (n, * ) [μεταβλητή, μεταβλητή ...]
WRITE (n, * ) [μεταβλητή, μεταβλητή ...]
...
CLOSE (n)


αρχή

ΟΙ ΕΝΤΟΛΕΣ REWIND, BACKSPACE & ENDFILE

Η εντολή REWIND μετακινεί το δείκτη του αρχείου στην αρχή του.

REWIND (unit)

Η εντολή BACKSPACE μετακινεί το δείκτη του αρχείου μια γραμμή πίσω.

BACKSPACE (unit)

Η εντολή ENDFILE μετακινεί το δείκτη του αρχείου στο τέλος του.

ENDFILE (unit)


αρχή

Η ΕΝΤΟΛΗ NAMELIST

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

Η χρήση της NAMELIST μας βοηθά να ξεπεράσουμε το πρόβλημα της αυστηρής διάταξης των δεδομένων. Δημιουργούμε μια λίστα με τις μεταβλητές που επιθυμούμε να διαβάσουμε και την κοινοποιούμε στη READ με την παράμετρο NML. Στο αρχείο με τα δεδομένα γράφουμε τα ονόματα των μεταβλητών μαζί με τις τιμές τους. Όταν εκτελεστεί η READ αναζητά τα ονόματα των μεταβλητών στο αρχείο, παίρνει τις τιμές που τις συνοδεύουν κα τις μεταφέρει στις μεταβλητές του προγράμματος.

Η χρήση της εντολής NAMELIST είναι ιδανική για προγράμματα που εκτελούν προσομοιώσεις μοντέλων ή επιλύσεις και δέχονται σαν είσοδο μικρά αρχεία με παραμέτρους ή μετρήσεις. Στις περιπτώσεις αυτές είναι πολύ πιο ασφαλές να υπάρχει έτοιμο ένα αρχείο δεδομένων με τα ονόματα των μεταβλητών και απλά να συμπληρώνεται δίπλα από το (=) η τιμή τους, πράγμα που γίνεται πολύ εύκολα ακόμη και από έναν αρχάριο, αντί να συντάσσουμε αυστηρά φορμαρισμένα αρχεία όπου το παραμικρό λάθος μπορεί να απορρίψει εντελώς την εκτέλεση του προγράμματος. Π.χ.:

PROGRAM
INTEGER:: stathmos, xeiristis, minas, mera, etos=2006
REAL:: thermokrasia, ygrasia, piesi, ogkos
...
NAMELIST /ID/ stathmos, xeiristis
NAMELIST /CHRONOS/ etos, minas, mera
NAMELIST /DEDOMENA/ thermokrasia, ygrasia, piesi, ogkos
...
OPEN(unit=10, FILE='data.txt')
READ(10, NML= ID)
READ(10, NML= DEDOMENA)
READ(10, NML= CHRONOS)
...
END

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

Αρχείο Δεδομένων (data.txt):

&ID  stathmos= 14, xeiristis= 5 /
&CHRONOS minas= 11, mera= 20 /
&DEDOMENA ygrasia= 55.1,
          piesi= 1.2,
          ogkos= 8.43,
          thermokrasia= 28.5 /


αρχή

Prev Μάθημα Next


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

Ερωτήσεις


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