Προγραμματισμός ΗΥ Ενότητα 12: Αρχεία Δομών. Διδάσκων: Ηλίας Κ Σάββας,

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Ποιότητα Λογισμικού Ενότητα 4: Παράδειγμα Ελέγχου. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
Advertisements

Ποιότητα Λογισμικού Ενότητα 3: Σουίτες Ελέγχων. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 8: Πίνακας Συμβόλων Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
Διδακτική Πληροφορικής
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 4: Συμβολοσειρές και Δομές Ελέγχου. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Δομές Δεδομένων και Αρχεία Ενότητα 2: Αρχεία Δομών I (Binary Files) Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 7: Η δομή Στοίβα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 10: Κυκλικά και Διπλά Συνδεδεμένη Λίστα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I.
Δομές Δεδομένων και Αρχεία
Διδακτική Πληροφορικής Ενότητα 2: Η εξέλιξη των εργαλείων της Εκπαίδευσης. Διδάσκων: Γεώργιος Σούλτης, Επίκουρος Καθηγητής. Τμήμα Μηχανικών Πληροφορικής,
Δομές Δεδομένων και Αρχεία Ενότητα 1: Διαχείριση Αρχείων κειμένου. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Διδακτική Πληροφορικής Ενότητα 3: Η Πληροφορική στην Εκπαίδευση. Διδάσκων: Γεώργιος Σούλτης, Επίκουρος Καθηγητής. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής.
Δομές Δεδομένων και Αρχεία Ενότητα 4: Ευρετηριασμένα Αρχεία Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 6: Πίνακες και Παράμετροι στην main. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 2: Μεταβλητές και Τύποι Δεδομένων. Διδάσκων: Νικόλαος Θ Λιόλιος,
Προγραμματισμός ΗΥ Ενότητα 6: Δισδιάστατοι πίνακες.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
Δομές Δεδομένων και Αρχεία Ενότητα 8: Η δομή Ουρά Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Δομές Δεδομένων και Αρχεία Ενότητα 3: Αρχεία Δομών ΙΙ Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Αντικειμενοστραφής Προγραμματισμός Ι
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 10: Αφηρημένες τάξεις. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής.
Τεχνολογία Ξύλου 1 Ενότητα 13: Ποιότητα και Πιστοποίηση Ξυλείας Διδάσκων: Δρ. Μιχάλης Σκαρβέλης, Αναπληρωτής Καθηγητής. Τμήμα Σχεδιασμού και Τεχνολογίας.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Εκπαιδευτικά Προγράμματα με Χρήση Η/Υ ΙΙ Θέμα «παιγνίδια» (website address) Διδάσκουσα: Καθηγήτρια Τζένη.
Αρχές Διοίκησης και Διαχείρισης Έργων Ενότητα 12: Οικονομική Διαχείριση Έργων – Ταμειακές Ροές. Διδάσκων: Φιτσιλής Παναγιώτης, Καθηγητής. Τμήμα Διοίκησης.
Τμήμα Τεχνολόγων Γεωπόνων Τίτλος Μαθήματος: ΚΑΛΛΩΠΙΣΤΙΚΑ ΔΕΝΤΡΑ ΚΑΙ ΘΑΜΝΟΙ Ενότητα 12: Οδηγίες δημιουργίας φυτολογίου Γρηγόριος Βάρρας Αν. Καθηγητής Άρτα,
Ενότητα 7 : Χρήση Πινάκων στο Ηλεκτρονικό εμπόριο (I) Ιωάννης Τσούλος
Τεχνολογία και Προγραμματισμός Υπολογιστών
Αντικειμενοστραφής Προγραμματισμός Ι
Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου
Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι
Οργάνωση και Διοίκηση Επιχειρήσεων
Ενότητα # 1: ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΕΝΕΡΓΟΠΟΙΗΣΗ ΚΩΔΙΚΟΥ
Προγραμματισμός ΗΥ Ενότητα 11: Header Files. Διδάσκων: Ηλίας Κ Σάββας,
Τεχνολογία και Προγραμματισμός Υπολογιστών
Χρονικός Προγραμματισμός Έργων (Εργαστήριο)
Επιχειρησιακές Επικοινωνίες
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(9)
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου
ΕνΟτητα # 9: Ms Word VI CLAUDIA BOETTCHER ΤμΗμα ΙστορΙαΣ
Διαχείριση Κινδύνου Ενότητα 7: Παρακολούθηση Κινδύνων.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Συστήματα Αυτομάτου Ελέγχου II
Ενότητα 2 : Το σύστημα βάσεων δεδομένων MySQL (II) Ιωάννης Τσούλος
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Προγραμματισμός κινητών συσκευών
Προγραμματισμός κινητών συσκευών
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Επιχειρησιακές Επικοινωνίες
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(7)
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(4)
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΕνΟτητα # 8: Ms Word V CLAUDIA BOETTCHER ΤμΗμα ΙστορΙαΣ
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(5)
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(10)
ΑΝΑΓΝΩΡΙΣΗ ΠΡΟΤΥΠΩΝ ΝΕΥΡΩΝΙΚΑ ΔΙΚΤΥΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Επιχειρησιακές Επικοινωνίες
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Προγραμματισμός κινητών συσκευών
Προγραμματισμός & Εφαρμογές Η/Υ (Θ)
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Μεταγράφημα παρουσίασης:

Προγραμματισμός ΗΥ Ενότητα 12: Αρχεία Δομών. Διδάσκων: Ηλίας Κ Σάββας, Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 12: Αρχεία Δομών. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.

Άδειες χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται στην παρακάτω άδεια χρήσης Creative Commons (C C): Αναφορά δημιουργού (B Y), Μη εμπορική χρήση (N C), Μη τροποποίηση (N D), 3.0, Μη εισαγόμενο. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σκοποί ενότητας Ο αναγνώστης να μπορεί να: 1) αντιλαμβάνεται την έννοια του αρχείου δομών (αρχείο εγγραφών). 2) διαχειρίζεται πλήρως ένα αρχείο δομών. Αρχεία Δομών

Περιεχόμενα ενότητας 1) Αρχεία δομών 2) Δομή αρχείου 3) Παραδείγματα 4) Προσπέλαση και μετάβαση 5) Επέκταση, δημιουργία και αναζήτηση Αρχεία Δομών

Αρχεία δομών – Binary files Text files: Αποθηκεύουν τους αριθμητικούς τύπους δεδομένων σε ASCII μορφή. Παράδειγμα: char name[20]=“Γιώργος”; int v = 1 2 3; Binary File: Γιώργος 000000000111101. Text File: Γιώργος 1 2 3. Binary Files: Χρήσιμα για δομημένη πληροφορία, ταχύτατα, δύσκολα στην διαχείριση. Text files: Χρήσιμα για αδόμητη πληροφορία, εύκολη διαχείριση. Αρχεία Δομών

Δήλωση μεταβλητής αρχείου Μία μεταβλητή αρχείου είναι ένας δείκτης σε ένα αρχείο: FILE *f; /* f  μεταβλητή αρχείου - δείκτης */. Όταν ανοίγουμε ένα αρχείο, ο δείκτης αρχείου δείχνει την αρχή των πληροφοριών που υπάρχουν σε αυτό το αρχείο. Όπως διαβάζουμε ή γράφουμε πληροφορίες στο αρχείο, ο δείκτης αρχείου αυτόματα δείχνει το επόμενο byte του αρχείου. ΠΡΟΣΟΧΉ: FILE με κεφαλαία γράμματα (ορίζεται στο stdio.h). Αρχεία Δομών

Άνοιγμα ⁄ Κλείσιμο αρχείων Πριν χρησιμοποιήσουμε (προσπελάσουμε) ένα αρχείο πρέπει πρώτα να το ανοίξουμε (open) : Δείκτης Αρχείου = fopen(“φυσικό όνομα αρχείου”, “ενέργεια”), f = fopen(“Pelates.dat”, “rb”); Ενέργεια: “rb”: ανοίγει ένα αρχείο μόνο για διάβασμα. Το αρχείο πρέπει να υπάρχει. “wb”: ανοίγει ένα αρχείο μόνο για γράψιμο. Το αρχείο δημιουργείται αν δεν υπάρχει. Ένα υπάρχον αρχείο θα αντικατασταθεί! “ab”: ανοίγει ένα αρχείο μόνο για γράψιμο, οι πληροφορίες θα τοποθετηθούν στο τέλος του αρχείου. “rb+”: ανοίγει ένα αρχείο για διάβασμα και γράψιμο. Το αρχείο πρέπει να υπάρχει ήδη. Κλείνοντας το αρχείο: fclose(δείκτης αρχείου);  fclose(f); Αρχεία Δομών

Παράδειγμα struct Pelatis { int kodikos; char epi[20]; char ono[15]; float xreosi; }; ---------------------------------------- struct Pelatis r; FILE *P; /*Αρχείο πελατών */ Αρχεία Δομών

Δομή αρχείου Ν εγγραφών Αρχεία Δομών

Διάβασμα ⁄ Γράψιμο από ⁄ προς αρχείο Διάβασμα: fread(διεύθυνση μεταβλητής, block σε bytes που θα διαβασθεί, ποσότητα blocks που θα διαβαστούν, μεταβλητή αρχείου); fread(&r, sizeof(struct Pelatis), 1, P); Γράψιμο: fwrite(διεύθυνση μεταβλητής, block σε bytes που θα γραφεί, ποσότητα blocks που θα γραφούν, μεταβλητή αρχείου); fwrite(&r, sizeof(struct Pelatis), 1, P); Αρχεία Δομών

Τέλος αρχείου Η συνάρτηση feof(δείκτης αρχείου), μας επιτρέπει να ελέγχουμε εάν έχουμε φτάσει στο τέλος του αρχείου. Σύνταξη: feof(δείκτης αρχείου)  Αληθής ⁄ Ψευδής: if ( ! feof(f) ) Ενέργειες για: <δεν είμαστε στο τέλος του αρχείου> else Ενέργειες για: < βρισκόμαστε στο τέλος του αρχείου > while ( ! feof(f) ) διάβασε από το αρχείο. Αρχεία Δομών

Παράδειγμα 1: Διαβάζοντας από ένα αρχείο P = fopen("C:\data\pelates.dat", "rb"); if (fp == NULL) { printf("\n\n Πρόβλημα με το αρχείο! \n\n"); return -1; } while (! feof(P)) { fread(&r, sizeof(struct Pelatis), 1, P); printf(“\n %5d %20s %15s %10.2f", r.kodikos, r.epi, r.ono, r.xreosi); fclose(fp); return 0; Αρχεία Δομών

Παράδειγμα 2: Γράφοντας από ένα αρχείο P = fopen("C:\data\pelates.dat", “wb"); do { printf(“\n Εισαγωγή κωδικού, επίθετου, ονόματος και χρέωσης πελάτη:”); scanf(“%d %s %s %f”, &r.kodikos, &r.epi, &r.ono, &r.xreosi); fwrite(&r, sizeof(struct Pelatis), 1, P); } while (κάποια συνθήκη τερματισμού); Αρχεία Δομών

Άμεση προσπέλαση Τα binary files, ονομάζονται και αρχεία άμεσης ή τυχαίας προσπέλασης (random ⁄ direct access files), γιατί μπορούμε να μεταβούμε σε όποια εγγραφή του αρχείου θέλουμε, χωρίς απαραίτητα να προσπελάσουμε σειριακά όλες τις προηγούμενες. Αυτό οφείλεται, και στο ότι η κάθε εγγραφή έχει σταθερό μέγεθος. Αρχεία Δομών

Άμεση μετάβαση Εάν είναι γνωστός, ο αριθμός της εγγραφής που θέλουμε να διαχειριστούμε (διαβάσουμε, γράψουμε, διορθώσουμε, και τα λοιπά), τότε: fseek(δεικτης αρχείου, μήκος σε bytes, αφετηρία); Όπου αφετηρία, μπορεί να είναι: SEEK_SET : Αρχή του αρχείου, SEEK_END : Τέλος του αρχείου, SEEK_CUR : Τρέχουσα θέση. Αρχεία Δομών

Παράδειγμα: Άμεση μετάβαση Άμεση μετάβαση στη 20η εγγραφή: fseek(P, 20 * sizeof(struct Pelatis), SEEK_SET); Και όχι (σειριακή προσπέλαση): for (i=0; i<=20; i++) fread(&r, sizeof(struct Pelatis), 1, P) Αρχεία Δομών

Πλήθος εγγραφών fseek(P, 0, SEEK_END); /* μετάβαση στο τέλος του αρχείου */ m = ftell(P); /* αριθμός σε bytes που δείχνει ο δείκτης αρχείου */ N = m / sizeof(struct Pelatis); /* Πλήθος εγγραφών */ Αρχεία Δομών

Επέκταση αρχείου P = fopen(“Pelates.dat”, “rb+”); /* άνοιγμα αρχείου για διάβασμα αλλά και γράψιμο σε αυτό */ fseek(P, 0 , SEEK_END); /* μετάβαση στο τέλος του αρχείου */ εισαγωγή εγγραφής r fwrite(&r, sizeof(struct Pelatis), 1, P); /* η εγγραφή r θα γραφεί στο τέλος του αρχείου */ Αρχεία Δομών

Δημιουργία ή επέκταση Εάν το αρχείο δεν υπάρχει, τότε ΔΗΜΙΟΥΡΓΊΑ αλλιώς ΕΠΈΚΤΑΣΗ. P = fopen(“Pelates.dat”, “rb+”); /* Άνοιγμα για επέκταση */ if ( ! P) P = fopen(“Pelates.dat”, “wb”); /* Το αρχείο δεν υπάρχει επομένως άνοιγμα για δημιουργία */ else { /* το αρχείο υπάρχει, επομένως προετοιμασία για επέκταση */ fseek(P, 0, SEEK_END); Αρχεία Δομών

Αναζήτηση εγγραφής (σειριακά) Έστω epitheto, είναι το επίθετο του πελάτη που αναζητούμε: flag = 0; while (! feof(P) && flag==0) { fread(&r, sizeof(struct Pelatis), 1, P); if (strcmp(epitheto, r.epi) == 0) { ΒΡΕΘΗΚΕ!!!!! flag = 1; } if (flag == 0) { ΔΕΝ ΒΡΕΘΗΚΕ!!! Αρχεία Δομών

Διόρθωση εγγραφής Έστω ότι η εγγραφή βρέθηκε (με την προηγούμενη διαδικασία της αναζήτησης), και έχει εισαχθεί η διορθωμένη εγγραφή από τον χρήστη, fseek(P, -sizeof(struct Pelatis), SEEK_CUR); /* μεταφορά του δείκτη αρχείου στην προς διόρθωση εγγραφή, γιατί με την τελευταία fread έχει προωθηθεί στην επόμενη */, fwrite(&r, sizeof(struct Pelatis, 1, P); /* γράψιμο της διορθωμένης εγγραφής στην σωστή θέση */. Αρχεία Δομών

Συνήθεις διαδικασίες αρχείου 1) Δημιουργία ⁄ Επέκταση, 2) προβολή, 3) αναζήτηση, 4) διόρθωση, 5) διαγραφή, 6) ταξινόμηση. Αρχεία Δομών

Τέλος δωδέκατης ενότητας