Επεξεργασία Αρχείων Κειµένου

Σχετικά έγγραφα
Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

Δομημένος Προγραμματισμός (ΤΛ1006)

Διάλεξη 18η: Διαχείρηση Αρχείων

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

είκτες και Πίνακες (2)

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

Μεθόδων Επίλυσης Προβλημάτων

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Διαδικαστικός Προγραμματισμός

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

Δομημένος Προγραμματισμός (ΤΛ1006)

Εργαστήριο 9: Αρχεία

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

scanf() scanf() stdin scanf() printf() int float double %lf float

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Η γλώσσα προγραμματισμού C

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στον Προγραμματισμό

ιαφάνειες παρουσίασης #6 (β)

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι (ΗΥ120)

Επανάληψη. Εντολές while, for, do-while

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

Δομημένος Προγραμματισμός

Η γλώσσα προγραμματισμού C

Διαδικασιακός Προγραμματισμός

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Περιεχόµενα. Πρόλογος... 15

Διαδικαστικός Προγραμματισμός

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Ενδεικτική περιγραφή μαθήματος

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

lab11 - Να εκτυπώνεις πιο κατατοπιστικά µηνύµατα λάθους. Αν είναι όλα ίδια, δεν είναι ξεκάθαρο ποιο αρχείο έχει πρόβληµα.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Προγραμματισμός I (Θ)

Προγραμματισμό για ΗΜΥ

Εισαγωγή στον Προγραμματισμό

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Μεθόδων Επίλυσης Προβλημάτων

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp)

FILE *fopen(const char *fname, const char *mode) void fclose(file *f) void fflush(file *f)

Προγραμματισμός Η/Υ (ΤΛ2007 )

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

Μεθόδων Επίλυσης Προβλημάτων

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Μεθόδων Επίλυσης Προβλημάτων

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

H ΓΛΩΣΣΑ C. Μάθηµα 15: Είσοδος/Έξοδος: Συναρτήσεις Εισόδου. ηµήτρης Ψούνης

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

Η γλώσσα προγραμματισμού C

Προγραµµατισµός. Αρχεία

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ ΣΤΗΝ C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Παράδειγµα (2) Πίνακες (Arrays) (2) Πίνακες (Arrays) (1) int num[5];

Προγραμματισμός Ι (ΗΥ120)

Προγραµµατισµός Ι (ΗΥ120)

Ενδεικτικές λύσεις και στατιστικά

Προγραμματισμό για ΗΜΥ

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Οι δείκτες στη γλώσσα C

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Προγραμματισμό για ΗΜΥ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Μεθόδων Επίλυσης Προβλημάτων

Επανάληψη για τις Τελικές εξετάσεις

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Transcript:

Επεξεργασία Αρχείων Κειµένου Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αρχεία Κειµένου Γενικά Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1

Αρχεία Γενικά Ένα αρχείο για να χρησιµοποιηθεί από ένα πρόγραµµα C πρέπει πρώτα να aνοιχθεί. Αυτό πραγµατοποιείται µέσω της συνάρτησης βιβλιοθήκης fopen(). Η fopen() παίρνει ως όρισµα το όνοµα ενός αρχείου (π.χ. f.txt) και επιστρέφει έναν δείκτη προς αυτό το αρχείο ο οποίος δείκτης χρησιµοποιείται από µία πληθώρα άλλων συναρτήσεων για την ανάγνωση από και εγγραφή δεδοµένων προς το αρχείο αυτό. Ο δείκτης αυτός ονοµάζεται δείκτης σε αρχείο (file pointer) και δηλώνεται ως εξής: FILE *fp; /*Ορίζουµε µία µεταβλητή fp τύπου δείκτη σε αρχείο.*/ Οι δείκτες αρχείων stdin, stdout, stderr έχουν ήδη δηλωθεί στο <stdio.h>. Το stdin αναφέρεται στο πληκτρολόγιο και τα stdout, stderr αναφέρονται στην οθόνη. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2

Αρχεία Γενικά Η λειτουργικότητα της fopen() περιγράφεται παρακάτω: FILE *fopen(char *name, char *mode): Η συνάρτηση fopen() ανοίγει το αρχείο µε όνοµα name σύµφωνα µε τον τρόπο που θα το χρησιµοποιήσουµε και που περιγράφεται µε το όρισµα mode. Πιθανοί τρόποι είναι ανάγνωση ("r"), εγγραφή ( "w") και επέκταση ( "a"). Αν το αρχείο που ανοίγεται για εγγραφή ήεπέκταση δεν υπάρχει τότε δηµιουργείται. Σε περίπτωση λάθους επιστρέφεται NULL. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 3

Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου Οι βασικές συναρτήσεις επεξεργασίας αρχείων κειµένου περιγράφονται αναλυτικά πιο κάτω: 1. int getc(file *fp) Η συνάρτηση αυτή επιστρέφει τον επόµενο χαρακτήρα από το αρχείο στο οποίο αναφέρεται ο δείκτης fp. Επιστέφει EOF σε περίπτωση τέλους του αρχείου ή λάθους κατά την ανάγνωση. 2. int putc(int c, FILE *fp) Η συνάρτηση αυτή γράφει το χαρακτήρα c στο αρχείο στο οποίο αναφέρεται ο δείκτης fp και επιστρέφει το χαρακτήρα που γράφτηκε ή EOF σε περίπτωση λάθους. 3. int fscanf(file *fp, char format,...) Όµοια µε την scanf() µε τη διαφορά ότι η ανάγνωση γίνεται από το αρχείο στο οποία αναφέρεται ο δείκτης fp. Επιστρέφεται EOF σε περίπτωση λάθους ή τέλος του αρχείου, αλλοιώς επιστρέφεται ο αριθµός των αντικειµένων στα οποία πραγµατοποιήθηκε η ανάγνωση. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 4

Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου 1. int fprintf(file *fp, char format,...) Οµοια µε την printf() µε τη διαφορά ότι η εκτύπωση γίνεται στο αρχείο στο οποίο αναφέρεται ο δείκτης fp. Επιστρέφεται ένας αρνητικός αριθµός σε περίπτωση λάθους ή διαφορετικά το πλήθος των χαρακτήρων που γράφτηκαν στο αρχείο. 2. int fclose(file *fp) Το αρχείο κλείνεται και ελευθερώνεται ο δείκτης fp για επόµενη χρήση. 3. int feof(file *fp) Επιστρέφει µη-µηδενική τιµή σε περίπτωση που έχουµε φτάσει στο τέλος του αρχείου στο οποίο αναφέρεται ο δείκτης fp. ιαφορετικά επιστρέφεται µηδέν. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 5

Αρχεία Γενικά (συν) Σε περίπτωση που θέλουµε να κάνουµε ανάγνωση ή εγγραφή ολόκληρων γραµµών από ένα αρχείο χρησιµοποιούµε τις συναρτήσεις: char *fgets(char *line, int maxline, FILE *fp) Η συνάρτηση αυτή διαβάζει το πολύ maxline 1 χαρακτήρες από το αρχείο και τους τοποθετεί στον πίνακα χαρακτήρων line. Αν βρεί πρώτα τον χαρακτήρα newline σταµατά και δεν διαβάζει όλους τους maxline 1 χαρακτήρες. Ο χαρακτήρας newline τοποθετείται επίσης στον πίνακα line και το string line τερµατίζεται µε το χαρακτήρα \0. Η συνάρτηση επιστρέφει το δείκτη line. ιαφορετικά επιστρέφει την τιµή NULL σε περίπτωση που βρισκόµαστε στο τέλος του αρχείου ή σε περίπτωση λάθους. int *fputs(char *line, FILE *fp) Η συνάρτηση αυτή γράφει το string line (το οποίο δε χρειάζεται να περιέχει το χαρακτήρα newline) στο αρχείο που καθορίζεται από το δείκτη fp. Επιστρέφει έναν µη-αρνητικό αριθµό ή EOF σε περίπτωση λάθους. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 6

Αρχεία Γενικά (συν) Υπενθύµιση. Στη C κάθε ανάθεση, όπως π.χ. η c = getchar() θεωρείται ως µία έκφραση η οποία έχει τιµή. Η τιµή κάθε ανάθεσης ως έκφραση ισούται µε την τιµή του ΑΡΙΣΤΕΡΟΥ µέλους µετά την εκτέλεση της ανάθεσης. ηλαδή, η τιµή της ανάθεσης c = getchar() είναι η τιµή της µεταβλητής cµετά την εκτέλεση της ανάθεσης. Προσέξτε την παρακάτω συνάρτηση αντιγραφής αρχείων: void filecopy(file *ifp, FILE *ofp){ char c; /* µη ασφαλής δήλωση!! */ while ((c = getc(ifp))!= EOF) putc(c, ofp); } ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 7

Αρχεία Γενικά (συν) Το παραπάνω πρόγραµµα έχει µία ατέλεια. Σε πολλές αρχιτεκτονικές ο τύπος char αναφέρεται στην αποθήκευση χαρακτήρων που δίνονται από το πληκτρολόγιο και αποθηκεύει µόνο θετικές τιµές που αντιπροσωπεύουν τον κωδικό κάθε χαρακτήρα. Η συνάρτηση getc() όµως σε περίπτωση τέλους του αρχείου επιστρέφει EOF που η τιµή του είναι (συχνά) -1. Η τιµή όµως αυτή δεν µπορεί να αναπαρασταθεί µέσω του τύπου char (σε ορισµένες πάντα αρχιτεκτονικές) και συνεπώς η σύγκριση του while ποτέ δεν θα γίνει αληθής!!!! Η παραπάνω υλοποίηση της συνάρτησης θα είναι συνεπώς σε πολλές αρχιτεκτονικές λάθος. Μία ασφαλή υλοποίηση τέτοιων συναρτήσεων πρέπει να χρησιµοποιεί τη δήλωση µεταβλητών για χαρακτήρες κάνοντας χρήση του τύπου int. Θα ορίζουµε λοιπόν int c; για µία µεταβλητή τύπου χαρακτήρα σε παρόµοιες περιπτώσεις ώστε τα προγράµµατά µας να εκτελούνται σωστά σε όλες τις αρχιτεκτονικές. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 8

Παράδειγµα... Να γραφεί ένα πρόγραµµα το οποίο παίρνει n ορίσµατα (εκτός από το όνοµα του προγράµµατος) όλα από τα οποία είναι ονόµατα αρχείου και και κατά την κλήση του αντιγράφει τα n-1 πρώτα αρχεία στο τελευταίο.ορ. Για παράδειγµα αν το πρόγραµµα αυτό λέγεται copy, τότε µία κλήση της µορφής: $ copy f1.txt f2.txt f3.txt f4.txt Θα δηµιουργούσε ένα αρχείο f4.txt το οποίο θα είχε ως περιεχόµενα τα περιεχόµενα των f1.txt, f2.txt και f3.txt µαζί. Οι τυπικές παράµετροι της συνάρτησης main θα έχουν τιµές: argc = 5 argv[0] = copy argv[1] = f1.txt argv[2] = f2.txt argv[3] = f3.txt argv[4] = f4.txt argv[5] = ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 9

Παράδειγµα... (συν) #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i, ch; FILE *inp, *outp; if (argc < 2) { printf( Λάθος σύνταξη στη χρήση του προγράµµατος... \n ); exit(1); } ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 10

Παράδειγµα... (συν) outp = fopen(argv[argc-1], w ); for ( i=1; i < argc-1; i++) { inp = fopen(argv[i], r ); for (ch=getc(inp); ch!= EOF; ch=getc(inp)) putc(ch,outp); fclose(inp); } fclose(outp); printf( All files copied to %s\n, argv[argc-1]); return(0); } ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 11