2


ΒΑΣΙΚΕΣ ΠΡΑΞΕΙΣ ΕΠΕΞΕΡΓΑΣΙΑΣ ΑΡΧΕΙΟΥ

 

2.1. Φυσικά και Λογικά Αρχεία

Όταν αναφερόμαστε για αρχεία (files) σε δίσκο ή σε ταινία αναφερόμαστε σε συγκεκριμένη συλλογή από bytes αποθηκευμένα στον δίσκο ή στην ταινία. Όταν η λέξη αρχείο χρησιμοποιείται μ’ αυτή την έννοια τότε λέμε ότι το αρχείο υπάρχει φυσικά (physical file). Ένας δίσκος μπορεί να περιέχει εκατοντάδες ακόμη και χιλιάδες από φυσικά αρχεία.

Από την άποψη ενός προγράμματος εφαρμογής η έννοια του αρχείου είναι διαφορετική. Για ένα πρόγραμμα εφαρμογής το αρχείο θα μπορούσαμε να πούμε ότι είναι όπως η τηλεφωνική γραμμή συνδεδεμένη σ’ ένα τηλεφωνικό δίκτυο. Το πρόγραμμα μπορεί να δέχεται ή να στέλνει bytes μέσω αυτής της τηλεφωνικής γραμμής, χωρίς να γνωρίζει από που ή προς τα που αυτά τα bytes κατευθύνονται. Το πρόγραμμα γνωρίζει ότι βρίσκεται στη τηλεφωνική γραμμή. Ένας δίσκος είναι δυνατόν να περιλαμβάνει χιλιάδες αρχεία ενώ ένα πρόγραμμα περιορίζεται στη χρήση μόνο 20 αρχείων. Το πρόγραμμα εφαρμογής βασίζεται στο Λ.Σ. για όλες τις λεπτομέρειες που αφορούν το τηλεφωνικό σύστημα.

Τα bytes μπορούν να φτάνουν μέσω της γραμμής στο πρόγραμμα προερχόμενα από ένα τρέχον φυσικό αρχείο ή από το πληκτρολόγιο ή άλλη συσκευή εισόδου. Όμοια τα bytes που στέλνει ένα πρόγραμμα μέσω της γραμμής μπορεί να καταλήγουν σ’ ένα αρχείο ή να εμφανίζονται στην οθόνη. Το πρόγραμμα δεν γνωρίζει ποια γραμμή χρησιμοποιεί. Αυτή συνήθως η γραμμή την αναφέρουμε ως λογικό αρχείο (logical file ) για να το διακρίνουμε από το φυσικό αρχείο που βρίσκεται πάνω στον δίσκο ή την ταινία.

Πριν το πρόγραμμα ανοίξει ένα αρχείο για να το χρησιμοποιήσει, το Λ.Σ. πρέπει να λάβει οδηγίες για να συνδέσει το λογικό αρχείο (μια τηλεφωνική γραμμή) με το φυσικό αρχείο ή συσκευή. Όταν χρησιμοποιούνται Λ.Σ. όπως το ΙΒM, OS/MVS αυτές οι εντολές βρίσκονται στην JCL (Job Control Language). Οι μίνι ΗΥ ή μικρο ΗΥ με πιο μοντέρνο Λ.Σ. όπως το Unix, MS-Dos, VMS διαθέτουν αυτές της εντολές μέσα στο πρόγραμμα εφαρμογής π.χ. στην turbo Pascal η αντιστοίχηση μεταξύ του λογικού και του φυσικού αρχείου γίνεται με την εντολή

assign(input_file, ‘myfile.dat’);

Μ’ αυτή την εντολή ζητείται από το Λ.Σ. να βρει ένα φυσικό αρχείο με το όνομα “myfile.dat” και να το αντιστοιχίσει με το λογικό όνομα αρχείου “input_file” (τηλεφωνική γραμμή). Αυτό το λογικό όνομα χρησιμοποιείται μέσα στο πρόγραμμα.

Συνεχίζοντας τον παραλληλισμό με την τηλεφωνική γραμμή, έστω ότι το τηλέφωνο του γραφείου μου έχει 6 τηλεφωνικές γραμμές. Όταν λαμβάνω κλήση τότε η τηλεφωνήτρια λέει “έχετε τηλεφώνημα στην 3η γραμμή” και δεν λέει “έχετε τηλεφώνημα από το 891890”. Γίνεται φανερό ότι χρειάζεται να προσδιορίσω το τηλεφώνημα λογικά και όχι φυσικά.

 

2.2 Γενικό Σύστημα

Στην ενότητα αυτή παρουσιάζονται βασικές πράξεις (operations) συστημάτων αρχείου (file systems). Οι πράξεις που περιγράφονται είναι γενικές και προφανώς παρουσιάζουν διαφορές από Λειτουργικό Σύστημα σε Λειτουργικό Σύστημα αλλά όλες επιτελούν παρόμοιο έργο. Εκείνο που ποικίλει είναι το συντακτικό τους, αλλά οι αρχές είναι οι ίδιες. Πριν από την χρήση ενός οποιουδήποτε συστήματος αρχείων χρειάζεται να χρησιμοποιείται το manual για το συντακτικό τους.

OPEN(filename)

Λειτουργίες : 1. Επιτρέπει πρόσβαση στο αρχείο.

2. Τοποθετεί τον ΤΔ ακριβώς πριν την 1η εγγραφή.

Παράμετρος :

1. filename : προσδιορίζει το αρχείο που θα «ανοιχθεί»

CLOSE(filename)

Λειτουργίες : 1. Διακόπτει κάθε πρόσβαση στο αρχείο.

Παράμετρος :

1. filename : προσδιορίζει το αρχείο που θα «ανοιχθεί»

READ_NEXT(filename, buffer)

Λειτουργίες : 1. Προχωράει τον ΤΔ στην επόμενη μη σημειωμένη (καταλημένη) εγγραφή.

2. Αντιγράφει την εγγραφή από το αρχείο στην αντίστοιχη μεταβλητή buffer.

3. Aν δεν υπάρχει επόμενη εγγραφή, η EOF γίνεται true και δεν πραγματοποιείται μεταφορά δεδομένων.

Παράμετροι :

1. filename : Προσδιορίζει το αρχείο που θα «ανοιχθεί».

2. buffer : Μεταβλητή όπου μεταφέρεται η εγγραφή

READ_DIRECT(filename, buffer, record_nbr)

Λειτουργίες : 1. Τοποθετεί τον ΤΔ στην εγγραφή της οποίας ο αριθμός εγγραφής είναι ίσος με record_nbr.

2. Αντιγράφει την εγγραφή από το αρχείο στην αντίστοιχη μεταβλητή buffer.

3. Αν η εγγραφή record_nbr είναι εκτός των θέσεων του αρχείου ή αν η θέση που αντιστοιχεί σ’ αυτή την εγγραφή είναι κενή, η VALID γίνεται false και δεν πραγματοποιείται μεταφορά δεδομένων.

Παράμετροι :

1. filename : Προσδιορίζει το αρχείο που θα «ανοιχθεί».

2. buffer : Μεταβλητή όπου μεταφέρεται η εγγραφή.

3. record_nbr : μη αρνητικός αριθμός που δηλώνει τον αριθμό εγγραφής που διαβάζεται.

UPDATE(filename, buffer)

Λειτουργίες : 1. Αντιγράφει μια εγγραφή από την μεταβλητή buffer στη θέση που βρίσκεται ο ΤΔ.

      Η VALID γίνεται false αν ο ΤΔ δεν δείχνει σε νόμινη εγγραφή.

Παράμετροι :

1. filename : Προσδιορίζει το αρχείο που θα «ανοιχθεί».

2. buffer : Μεταβλητή όπου είναι αποθηκευμένη η εγγραφή.

APPEND(filename, buffer)

Λειτουργίες :  1. Τοποθετεί τον ΤΔ στη θέση ακριβώς μετά την τελευταί εγγραφή του αρχείου.

2. Προσθέτει μια νέα εγγραφή στη θέση που δείχνει ο ΤΔ.

3. Αντιγράφει μια εγγραφή από τη μεταβλητή buffer στη θέση που δείχνει ο ΤΔ

Παράμετροι :

1. filename : Προσδιορίζει το αρχείο που θα «ανοιχθεί».

2. buffer : Μεταβλητή όπου είναι αποθηκευμένη η εγγραφή.

WRITE_NEXT(filename, buffer)

Λειτουργίες : 1. Προχωρά τον ΤΔ στην επόμενη εγγραφή στο αρχείο.

2. Προσθέτει μια νέα εγγραφή στη θέση που δείχνει ο ΤΔ αν δεν υπάρχει επόμενη εγγρφαή στο αρχείο.

3. Αντιγράφει μια εγγραφή από τν μεταβλητή buffer στη θέση που δείνχει ο ΤΔ.

Παράμετροι :

1. filename : Προσδιορίζει το αρχείο που θα «ανοιχθεί».

2. buffer : Μεταβλητή όπου είναι αποθηκευμένη η εγγραφή.

WRITE_DIRECT(filename, buffer, record_nbr)

Λειτουργίες :  1. Τοποθετεί τον ΤΔ στην εγγραφή της οποίας ο αριθμός εγγραφής είναι ίσος με record_nbr.

2. Αντιγράφει την εγγραφή από τη μεταβλητή buffer στο αρχείο.

3. Αν η εγγραφή record_nbr είναι εκτός των θέσεων του αρχείου ή αν η θέση που αντιστοιχεί σ’ αυτή την εγγραφή είναι κενή, η VALID γίνεται false και δεν πραγματοποιείται μεταφορά δεδομένων.

Παράμετροι :

1. filename : Προσδιορίζει το αρχείο που θα «ανοιχθεί».

2. buffer : Μεταβλητή από όπου μεταφέρεται η εγγραφή.

3. record_nbr : μη αρνητικός αριθμός που δηλώνει τον αριθμό εγγραφής όπου η εγγραφή θα αποθηκευθεί.

logical EOF(filename)

Λειτουργίες : 1. Γίνεται true, αν ο ΤΔ είναι μετά την τελευταία εγγραφή του αρχείου, αλλιώς false.

Παράμετρος :

1. filename : Προσδιορίζει το αρχείο που θα «ανοιχθεί».

logical VALID(filename)

Λειτουργία : 1. Γίνεται false, αν οποιαδήποτε λειτουργία αποτυγχάνει ή αν η εγγραφή έχει λογικά διαγραφεί, αλλιώς
                            γίνεται true.H VALID πάντα ελέγχει την πλέον πρόσφατη λειτουργία που εφαρμόσθηκε στο αρχείο.

Παράμετρος :

1. filename : Προσδιορίζει το αρχείο που θα «ανοιχθεί».

ALLOCATE(filename, pointer)

Λειτουργίες : 1. Επιλέγει ελεύθερο χώρο μεγέθους όσο το bucket του συγκεκριμένου αρχείου.

2. Αντιστοιχεί το bucket με το συγκεκριμένο αρχείο.

3. Επιστρέφει ένα δείκτη που δείχνει προς το νέο bucket.

Παράμετροι :

1. filename : Προσδιορίζει το αρχείο όπου θα προστεθεί το bucket.

2. pointer : «αριθμός εγγραφής» που επιτρέπει τις πράξεις ανάγνωσης και εγγραφής να προσπελάσουν το νέο bucket.

DEALLOCATE(filename, pointer)

Λειτουργίες : 1. Απομακρύνει το bucket που δηλώνεται από τον ΤΔ από το αρχείο.

2. Ελευθερώνει τον χώρο που καταλάμβανεται το bucket .

Παράμετροι :

1. filename : Προσδιορίζει το αρχείο που αντιστοιχεί το bucket.

2. pointer : «αριθμός εγγραφής» που δηλώνει το bucket που απομακρυνθεί από το αρχείο.

  • Τρέχον δείκτης (Currency pointer)

Βασική έννοια σ’ όλες τις παραπάνω πράξεις είναι η έννοια του τρέχοντα δείκτη. Ο τρέχον δείκτης (ΤΔ) είναι ένας λογικός δείκτης που δείχνει την τρέχουσα εγγραφή του αρχείου. Κάποια συστήματα αρχείου διαθέτουν εντολές για να μετακινούν τον ΤΔ (π.χ. η Turbo Pascal διαθέτει την εντολή SEEK). Στις παραπάνω βασικές γενικές πράξεις σχετικά με τα αρχεία η μετακίνηση του ΤΔ γίνεται έμμεσα. Οι πράξεις OPEN (RESET, REWRITE), APPEND τοποθετούν τον ΤΔ στην αρχή του αρχείου και στο τέλος αντίστοιχα.

  • Ειδικοί Χαρακτήρες στα Αρχεία

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

Σε αρχεία δημιουργημένα σε PC’s συνήθως προστίθεται στο τέλος του αρχείου ο χαρακτήρας Control-Z (ASCII τιμή 26). Μερικές εφαρμογές προσθέτουν αυτόν τον χαρακτήρα μόνες τους.

Μερικά συστήματα αρχείων χρησιμοποιούν ένα ζεύγος χαρακτήρων για να δηλώσουν το τέλος της γραμμής στα αρχεία κειμένου (text files), όπως το Carriage return (CR = #13) και line feed (#10).

 

2.3 Οι 6 καθιερωμένες διαδικασίες στα αρχεία

Υπάρχουν αρκετές διαδικασίες που χρειάζεται να εφαρμοσθούν στα αρχεία, αλλά συνήθως η επεξεργασία αρχείου περιλαμβάνει 6 καθιερωμένες διαδικασίες. Μερικές απ’ αυτές τις διαδικασίες είναι καταλληλότερες για κάποιο τύπο αρχείου και άλλες για άλλους τύπους αρχείων. Παρ’ όλα αυτά είναι αναγκαίο να αναπτυχθούν μέθοδοι που θα υλοποιούν και τις 6 διαδικασίες γι’ όλους τους τύπους αρχείων. Αλγόριθμοι αναπτύσσονται με βάση τις βασικές πράξεις επί των αρχείων για να εφαρμοσθούν οι 6 διαδικασίες σε κάθε τύπο αρχείου που θα μελετηθεί. Η επιλογή μιας συγκεκριμένης δομής αρχείου (file structure) προσδιορίζει και τις βασικές πράξεις που μπορούμε να εφαρμόσουμε σ’ αυτό. Με τη σειρά τους οι αλγόριθμοι που μπορούν να αναπτυχθούν περιορίζονται λόγω των βασικών πράξεων. Συνεπώς η επιλογή μιας δομής αρχείου σημαίνει και ένα περιορισμένο σύνολο αλγόριθμων που μπορούν να αναπτυχθούν για τη λύση του προβλήματος.

Οι 6 καθιερωμένες διαδικασίες για τα αρχεία είναι :

  • Προσθήκη (Add). Προσθήκη μιας νέας εγγραφής στο αρχείο.

  • Διαγραφή (Delete). Διαγραφή μιας εγγραφής από το αρχείο

  • Ανάγνωση όλων των εγγραφών του αρχείο χωρίς μια συγκεκριμένη σειρά (Read all records in any order). Ανάγνωση όλων των εγγραφών του αρχείου χωρίς να απαιτείται να ακολουθηθεί συγκεκριμένη σειρά ανάγνωσης. Αυτή η διαδικασία είναι χρήσιμη όταν σύνολα δεδομένων, όπως συνολικά ποσά κτλ, υπολογίζονται από τα στοιχεία του αρχείου.

  • Ανάγνωση όλων των εγγραφών με βάση κάποιο συγκεκριμένο κλειδί (Read all records in key order). Εδώ απαιτείται να αναγνώσθουν όλες οι εγγραφές με τη σειρά που προσδιορίζεται από τις τιμές του κλειδιού των χαρακτηριστικών της εγγραφής (attributes). Π.χ. θέλουμε να διαβάσουμε τις εγγραφές ενός αρχείου υπαλλήλων έτσι ώστε τα επώνυμα των υπαλλήλων να είναι σε αύξουσα σειρά ώστε να παράγουμε μια αναφορά (report) ταξινομημένη με βάση το επώνυμο του υπαλλήλου.

  • Ανάγνωση μιας εγγραφής με βάση την τιμή κάποιου συγκεκριμένου κλειδιού (Read a record with a specific key value). Εδώ η απαίτηση είναι να εντοπισθεί και να αναγνωσθεί η εγγραφή της οποίας η τιμή του χαρακτηριστικού ταυτίζεται με την τιμή του κλειδιού. Είναι δυνατόν καμία ή περισσότερες εγγραφές να ικανοποιούν την συνθήκη.

  • Ενημέρωση της τρέχουσας εγγραφής (Update the current record). Απαιτείται κατ’ αρχήν ο εντοπισμός της εγγραφής και στη συνέχεια η ενημέρωση-διόρθωση της εγγραφής.

 

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

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

 


Up ] 1 ] [ 2 ] 3 ] 4 ] 5 ] 6 ] 7 ] 8 ] 9 ] 10 ]

Copyright Πανεπιστήμιο Μακεδονίας
Για σχόλια [Μ. Σατρατζέμη]
Τελευταία ενημέρωση : Δεκέμβριος 20, 2002