Δομές Δεδομένων και Αρχεία Ενότητα 3: Αρχεία Δομών ΙΙ Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.

Slides:



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

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

Δομές Δεδομένων και Αρχεία Ενότητα 3: Αρχεία Δομών ΙΙ Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

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

Σκοποί ενότητας Ο Αναγνώστης να μπορεί να:  Επιφέρει αλλαγές σε αρχεία δομών όπως διόρθωση ή διαγραφή εγγραφών,  Ταξινομεί αρχεία δομών είτε με μεταφορά τους σε πίνακα είτε άμεσα στον δίσκο. Αρχεία Δομών ΙΙ 4

Περιεχόμενα ενότητας  Αρχεία Δομών (εγγραφών) – Binary Files, Διαχείριση Αρχείων Δομών:  Διόρθωση Εγγραφής, Διόρθωση Εγγραφής,  Διαγραφή Εγγραφής, Διαγραφή Εγγραφής,  Ταξινόμηση αρχείου: Ταξινόμηση αρχείου: Με μεταφορά σε πίνακα, Άμεσα στον δίσκο. Αρχεία Δομών ΙΙ 5

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

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

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

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

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

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

Άσκηση  Δημιουργία ενός πλήρους προγράμματος διαχείρισης πελατολογίου. Header File struct Pelatis { char Kod[10]; char Epi[20]; char Ono[10]; float Ypo; }; FILE *pel; /* Δείκτης Αρχείου */ struct Pelatis P; /* Καθολική Μεταβλητή */ char Pelates[] = "Pelatologio.dat"; /* Φυσικό όνομα αρχείου */ Αρχεία Δομών ΙΙ 12

Πελατολόγιο #include #include "dialeksi_2_3.h" int menu(void); void dim_epekt(void); void provoli(void); void anazitisi(void); void anazitisi_xreoston(void); void diorthosi(void); void diagrafi(); void oristiki_diagrafi(); void taxinomisi_pinaka(); void taxinomisi_disko(void); Αρχεία Δομών ΙΙ 13

Διόρθωση Εγγραφής (1 από 3)  Αναζήτηση της εγγραφής (που θα διορθώσουμε),  Εισαγωγή διορθωμένης εγγραφής,  Μετακίνηση δείκτη αρχείου μία θέση πίσω σε σχέση με την τρέχουσα θέση,  Γράψιμο στο αρχείο της διορθωμένης εγγραφής. Αρχεία Δομών ΙΙ 14

Διόρθωση Εγγραφής (2 από 3) void diorthosi(void) { char kodikos[10]; int vrethike = 0; pel = fopen(Pelates, "rb+"); if (pel == NULL) { printf("\n\nΤο Πελατολόγιο Δεν έχει δημιουργηθεί ακόμη! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } printf("\n\nΕισαγωγή του κωδικού πελάτη : "); scanf("%s", kodikos); Αρχεία Δομών ΙΙ 15

Διόρθωση Εγγραφής (3 από 3) while (! feof(pel) && (vrethike == 0)) { fread(&P, sizeof(struct Pelatis), 1, pel); if ( strcmp(kodikos, P.Kod) == 0 ) { vrethike = 1; printf("\n%10s %20s %10s %10.2f", P.Kod, P.Epi, P.Ono, P.Ypo); printf("\n\n\n\tΕισαγωγή των διορθωμένων στοιχείων---- \n\n"); printf("\n\n Κωδικός πελάτη : "); scanf("%s", &P.Kod); printf("\n\n Επίθετο : "); scanf("%s", &P.Epi); printf("\n\n Όνομα : "); scanf("%s", &P.Ono); printf("\n\n Υπόλοιπο : "); scanf("%f", &P.Ypo); fseek(pel, -sizeof(struct Pelatis), SEEK_CUR); fwrite(&P, sizeof(struct Pelatis), 1, pel); printf("\n\nΗ αλλαγή αποθηκεύτηκε! \n\n"); } Αρχεία Δομών ΙΙ 16

Διαγραφή Εγγραφής (1 από 4)  Είναι αδύνατη η άμεση διαγραφή (γιατί;),  Διόρθωση εγγραφής με τοποθέτηση «χαρακτήρων» διαγραφής σε κάποιο πεδίο,  Πχ, τοποθέτηση αστερίσκων στο πεδίο κωδικός.  Προσοχή: πρέπει να διορθώσουμε τις μέχρι τώρα συναρτήσεις ώστε να μην λαμβάνουν υπόψη τις «διαγραμμένες» εγγραφές. Αρχεία Δομών ΙΙ 17

Διαγραφή Εγγραφής (2 από 4) Αρχεία Δομών ΙΙ 18

Διαγραφή Εγγραφής (3 από 4) void diagrafi(void) { char kodikos[10]; int vrethike = 0; pel = fopen(Pelates, "rb+"); if (pel == NULL) { printf("\n\nΤο Πελατολόγιο Δεν έχει δημιουργηθεί ακόμη! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } printf("\n\nΕισαγωγή του κωδικού πελάτη : "); scanf("%s", kodikos); Αρχεία Δομών ΙΙ 19

Διαγραφή Εγγραφής (4 από 4) while (! feof(pel) && (vrethike == 0)) { fread(&P, sizeof(struct Pelatis), 1, pel); if ( strcmp(kodikos, P.Kod) == 0 ) { vrethike = 1; printf("\n%10s %20s %10s %10.2f", P.Kod, P.Epi, P.Ono, P.Ypo); strcpy(P.Kod, Diagrafi); fseek(pel, -sizeof(struct Pelatis), SEEK_CUR); fwrite(&P, sizeof(struct Pelatis), 1, pel); printf("\n\nΗ διαγραφή πραγματοποιήθηκε! \n\n"); } Αρχεία Δομών ΙΙ 20

Header File struct Pelatis { char Kod[10]; char Epi[20]; char Ono[10]; float Ypo; }; FILE *pel; #define Diagrafi "*****" struct Pelatis P; char Pelates[] = "Pelatologio.dat"; Αρχεία Δομών ΙΙ 21

Προσοχή στις Διαγραμμένες Εγγραφές! Προβολή αρχείου: while (! feof(pel) ) { fread(&P, sizeof(struct Pelatis), 1, pel); if ( ! feof(pel) && strcmp(P.Kod, Diagrafi) != 0) { aa++; synolo += P.Ypo; printf("\n%5d ……………); } Αρχεία Δομών ΙΙ 22

Οριστική Διαγραφή (1 από 3)  Μετακίνηση όλων των μη υπό διαγραφή εγγραφών σε ένα νέο προσωρινό αρχείο,  Διαγραφή (από τον δίσκο) του αρχείου,  Μετονομασία του προσωρινού αρχείου με το όνομα του αρχικού βασικού αρχείου. Αρχεία Δομών ΙΙ 23

Οριστική Διαγραφή (2 από 3) void oristiki_diagrafi(void) { FILE *temp; pel = fopen(Pelates, "rb"); if (pel == NULL) { printf("\n\nΤο Πελατολόγιο Δεν έχει δημιουργηθεί ακόμη! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } temp = fopen("temp.dat", "wb"); Αρχεία Δομών ΙΙ 24

Οριστική Διαγραφή (3 από 3) while ( ! feof(pel)) { fread(&P, sizeof(struct Pelatis), 1, pel); if ( ! feof(pel) && strcmp(P.Kod, Diagrafi) != 0) fwrite(&P, sizeof(struct Pelatis), 1, temp); } fclose(pel); fclose(temp); system("del Pelatologio.dat"); system("ren temp.dat Pelatologio.dat"); } Αρχεία Δομών ΙΙ 25

Ταξινόμηση με χρήση πίνακα (1 από 5)  Μεταφορά όλου του αρχείου σε πίνακα,  Ταξινόμηση πίνακα (για το παράδειγμα μέθοδος επιλογής - selection sort),  Επιστροφή πίνακα στο αρχείο.  Μειονέκτημα: Τι γίνεται εάν το αρχείο είναι τόσο μεγάλο που δεν μπορεί να μεταφερθεί σε πίνακα? Αρχεία Δομών ΙΙ 26

Ταξινόμηση με χρήση πίνακα (2 από 5) void taxinomisi_pinaka(void) { int N, i, j, elaxisto; struct Pelatis *pin, temp; pel = fopen(Pelates, "rb"); if (pel == NULL) { printf("\n\nΤο Πελατολόγιο Δεν έχει δημιουργηθεί ακόμη! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } Αρχεία Δομών ΙΙ 27

Ταξινόμηση με χρήση πίνακα (3 από 5) fseek(pel, 0, SEEK_END); N = ftell(pel) / sizeof(struct Pelatis); pin = malloc(N*sizeof(struct Pelatis)); Αρχεία Δομών ΙΙ 28

Ταξινόμηση με χρήση πίνακα (4 από 5) if (pin == NULL) { printf("\n\n Πολύ μεγάλο αρχείο για να μεταφερθεί σε πίνακα "); printf("\n\n Προσπαθήστε ταξινόμηση στον δίσκο... "); printf("\n\n H ταξινόμηση δεν έγινε! "); return; } fseek(pel, 0, SEEK_SET); printf("\n\n\nΤαξινόμηση...\n\n\n "); fread(&pin[0], sizeof(struct Pelatis), N, pel); fclose(pel); Αρχεία Δομών ΙΙ 29

Ταξινόμηση με χρήση πίνακα (5 από 5) for (i=0; i<N-1; i++) { /* Selection Sort */ elaxisto = i; for (j=i+1; j<N; j++) if (strcmp(pin[j].Epi, pin[elaxisto].Epi) < 0) elaxisto = j; temp = pin[i]; pin[i] = pin[elaxisto]; pin[elaxisto] = temp; } pel = fopen(Pelates, "wb"); fwrite(&pin[0], sizeof(struct Pelatis), N, pel); fclose(pel); } Αρχεία Δομών ΙΙ 30

Ταξινόμηση (άμεση)  Η ταξινόμηση μπορεί να γίνει με όποια μέθοδο επιλεγεί αλλά αντί να μεταφερθεί το αρχείο σε πίνακα, να γίνει άμεσα στον δίσκο.  Πως μπορούμε να έχουμε προσπέλαση εγγραφών (πχ σε πίνακα χρησιμοποιούμε τον δείκτη, Α[i] > A[j]…)?  Με χρήση της fseek μεταφερόμαστε και διαβάζουμε / γράφουμε την επιθυμητή εγγραφή. Αρχεία Δομών ΙΙ 31

Άμεση Ταξινόμηση (1 από 3) void taxinomisi_disko(void) { struct Pelatis elaxisto, x, temp; int i, j, N, thesi; pel = fopen(Pelates, "rb+"); if (pel == NULL) { printf("\n\nΤο Πελατολόγιο Δεν έχει δημιουργηθεί ακόμη! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } printf("\n\n\nΤαξινόμηση...\n\n\n "); fseek(pel, 0, SEEK_END); N = ftell(pel) / sizeof(struct Pelatis); Αρχεία Δομών ΙΙ 32

Άμεση Ταξινόμηση (2 από 3) /* Εύρεση θέσης «ελάχιστης» εγγραφής */ for (i=0; i<N-1; i++) { thesi = i; fseek(pel, thesi*sizeof(struct Pelatis), SEEK_SET); fread(&elaxisto, sizeof(struct Pelatis), 1, pel); for (j=i+1; j<N; j++) { fseek(pel, j*sizeof(struct Pelatis), SEEK_SET); fread(&x, sizeof(struct Pelatis), 1, pel); if (strcmp(x.Epi, elaxisto.Epi) < 0) { thesi = j; elaxisto = x; } Αρχεία Δομών ΙΙ 33

Άμεση Ταξινόμηση (3 από 3) /* Αντιμετάθεση εγγραφών */ fseek(pel, i*sizeof(struct Pelatis), SEEK_SET); fread(&temp, sizeof(struct Pelatis), 1, pel); fseek(pel, thesi*sizeof(struct Pelatis), SEEK_SET); fread(&elaxisto, sizeof(struct Pelatis), 1, pel); fseek(pel, i*sizeof(struct Pelatis), SEEK_SET); fwrite(&elaxisto, sizeof(struct Pelatis), 1, pel); fseek(pel, thesi*sizeof(struct Pelatis), SEEK_SET); fwrite(&temp, sizeof(struct Pelatis), 1, pel); } fclose(pel); } Αρχεία Δομών ΙΙ 34

Τέλος Ενότητας