Η ανάγνωση αρχείων στη γλώσσα C αποτελεί μια διαδικασία όπου το πρόγραμμα ανοίγει ένα αρχείο και διαβάζει τα περιεχόμενά του. Ας παραθέσουμε ένα παράδειγμα με τη σωστή χρήση των όρων:
Για να διαβάσουμε ένα αρχείο στη γλώσσα C, ακολουθούμε τα παρακάτω βήματα:
- Ανοίγουμε το αρχείο χρησιμοποιώντας τη συνάρτηση
fopen
. Αυτή η συνάρτηση λαμβάνει ως ορίσματα το όνομα του αρχείου και τη λειτουργία ανάγνωσης, η οποία συμβολίζεται με τον χαρακτήρα “r”. Η συνάρτηση επιστρέφει έναν δείκτη προς το ανοικτό αρχείο. - Ελέγχουμε αν η συνάρτηση
fopen
επιστρέψει έναν έγκυρο δείκτη προς το αρχείο. Αν ο δείκτης είναι NULL, σημαίνει ότι δεν ήταν δυνατή η ανοίξη του αρχείου και πρέπει να χειριστούμε το σφάλμα ανάλογα. - Χρησιμοποιούμε συναρτήσεις όπως η
fgetc
ή ηfgets
για να διαβάσουμε το περιεχόμενο του αρχείου. Ηfgetc
διαβάζει έναν χαρακτήρα τη φορά, ενώ ηfgets
διαβάζει μια γραμμή τη φορά. Μπ
ορούμε να αποθηκεύσουμε το διαβασμένο περιεχόμενο σε μια μεταβλητή ή να το επεξεργαστούμε κατευθείαν.
- Κατά τη διάρκεια της ανάγνωσης, ελέγχουμε αν φτάσαμε στο τέλος του αρχείου, ελέγχοντας την επιστρεφόμενη τιμή των συναρτήσεων ανάγνωσης. Αν η τιμή είναι EOF (End of File), σημαίνει ότι φτάσαμε στο τέλος του αρχείου και πρέπει να τερματίσουμε τη διαδικασία ανάγνωσης.
- Κλείνουμε το αρχείο χρησιμοποιώντας τη συνάρτηση
fclose
. Αυτή η συνάρτηση παίρνει ως όρισμα τον δείκτη προς το ανοικτό αρχείο και κλείνει το αρχείο.
Με τη σωστή χρήση των παραπάνω συναρτήσεων και διαδικασιών, μπορούμε να διαβάσουμε με επιτυχία τα περιεχόμενα ενός αρχείου στη γλώσσα C.
Για να διαβάσετε από ένα αρχείο, μπορείτε να χρησιμοποιήσετε τη λειτουργία r:
#include <stdio.h> int main() { FILE *fptr; // Δήλωση δείκτη σε αρχείο char c; fptr = fopen("file.txt", "r"); // Άνοιγμα αρχείου "file.txt" σε λειτουργία ανάγνωσης ("r") // Διάβασμα και εκτύπωση του περιεχομένου του αρχείου χαρακτήρα προς χαρακτήρα while ((c = fgetc(fptr)) != EOF) { printf("%c", c); } fclose(fptr); // Κλείσιμο του αρχείου return 0; }
Ο παραπάνω κώδικας διαβάζει το περιεχόμενο ενός αρχείου κειμένου με όνομα “file.txt” και το εκτυπώνει χαρακτήρα προς χαρακτήρα στην οθόνη.
Ας αναλύσουμε τις βήματα του κώδικα:
- Περιλαμβάνεται η απαραίτητη βιβλιοθήκη
stdio.h
για τη χρήση των συναρτήσεων εισόδου/εξόδου της C. - Η συνάρτηση
main
ορίζεται ωςint
, που σημαίνει ότι θα επιστρέφει έναν ακέραιο αριθμό. - Δημιουργείται ο δείκτης
fptr
τύπουFILE *
, που θα χρησιμοποιηθεί για να αναπαραστήσει το ανοικτό αρχείο. - Δημιουργείται η μεταβλητή
c
τύπουchar
για την αποθήκευση των χαρακτήρων που θα διαβάζονται από το αρχείο. - Με τη χρήση της συνάρτησης
fopen
, το αρχείο “file.txt” ανοίγεται σε λειτουργία ανάγνωσης (“r”) και ο δείκτηςfptr
δεσμεύεται για αυτό το ανοιχτό αρχείο. - Χρησιμοποιώντας τον επαναληπτικό βρόχο
while
, η συνθήκη(c = fgetc(fptr)) != EOF
ελέγχει αν ο χαρακτήρας που διαβάστηκε δεν είναι το τέλος του αρχείου (EOF). Εάν δεν είναι, ο χαρακτήρας εκτυπώνεται στην οθόνη με τη χρήση της συνάρτησηςprintf
. - Μετά το πέρας του βρόχου, το αρχείο κλείνει χρησιμοποιώντας τη συνάρτηση
fclose
. - Η συνάρτηση
main
επιστρέφει την τιμή 0, υποδηλώνοντας ότι η εκτέλεση του προγράμματος ολοκληρώθηκε με επιτυχία.
Ο κώδικας αυτός διαβάζει και εκτυπώνει το περιεχόμενο του αρχείου “file.txt”, χαρακτήρα προς χαρακτήρα, μέχρι να φτάσει στο τέλος του αρχείου.
Για παράδειγμα, ας δημιουργήσουμε ένα string που μπορεί να αποθηκεύσει έως 100 χαρακτήρες:
#include <stdio.h> int main() { FILE *fptr; // Δήλωση δείκτη προς αρχείο char str[100]; // Δήλωση πίνακα χαρακτήρων fptr = fopen("file.txt", "r"); // Άνοιγμα αρχείου "file.txt" σε λειτουργία ανάγνωσης ("r") fgets(str, 100, fptr); // Ανάγνωση μιας γραμμής από το αρχείο και αποθήκευσή της στον πίνακα "str" printf("%s", str); // Εκτύπωση του περιεχομένου του πίνακα "str" fclose(fptr); // Κλείσιμο του αρχείου return 0; }
Ο παραπάνω κώδικας σε C πραγματοποιεί την ανάγνωση και εκτύπωση ενός αρχείου κειμένου. Ας αναλύσουμε τη λειτουργία του κώδικα γραμμή προς γραμμή:
- Ορίζεται η βιβλιοθήκη
<stdio.h>
, η οποία περιλαμβάνει τις απαραίτητες συναρτήσεις εισόδου/εξόδου. - Η συνάρτηση
main()
είναι η κύρια συνάρτηση του προγράμματος, η οποία εκτελείται πρώτη. - Δηλώνεται μια μεταβλητή
fptr
τύπουFILE *
, η οποία αποτελεί δείκτη προς αρχείο. - Δηλώνεται ένας πίνακας χαρακτήρων
str
μεγέθους 100, που θα χρησιμοποιηθεί για την αποθήκευση του περιεχομένου του αρχείου. - Ανοίγει το αρχείο “file.txt” σε λειτουργία ανάγνωσης (
"r"
), και ο δείκτηςfptr
δεσμεύεται να δείχνει σε αυτό. - Η συνάρτηση
fgets
διαβάζει μια γραμμή από το αρχείο και αποθηκεύει το περιεχόμενο στον πίνακαstr
. - Το περιεχόμενο του πίνακα
str
εκτυπώνεται στην οθόνη με τη χρήση της συνάρτησηςprintf
. - Το αρχείο κλείνει με τη χρήση της συνάρτησης
fclose
. - Το πρόγραμμα τερματίζει και επιστρέφει την τιμή 0 στη συνάρτηση
main()
.
Συνολικά, ο κώδικας ανοίγει ένα αρχείο κειμένου με όνομα “file.txt”, διαβάζει την πρώτη γραμμή του αρχείου, εκτυπώνει το περιεχόμενο της γραμμής στην οθόνη και κλείνει το αρχείο.
[adinserter block=”2″]
Για να διαβάσετε κάθε γραμμή του αρχείου, μπορείτε να χρησιμοποιήσετε ένα βρόχο while:
#include <stdio.h> int main() { FILE *fptr; // Δήλωση δείκτη σε αρχείο char str[100]; // Πίνακας χαρακτήρων για αποθήκευση γραμμών από το αρχείο fptr = fopen("file.txt", "r"); // Άνοιγμα αρχείου για ανάγνωση while (fgets(str, 100, fptr) != NULL) { // Διάβασμα γραμμής από το αρχείο μέχρι το τέλος του αρχείου printf("%s", str); // Εκτύπωση της γραμμής στην οθόνη } fclose(fptr); // Κλείσιμο του αρχείου return 0; }
Ο παραπάνω κώδικας σε C πραγματοποιεί την ανάγνωση ενός αρχείου κειμένου και την εκτύπωση του περιεχομένου του στην οθόνη.
Ας αναλύσουμε τον κώδικα βήμα προς βήμα:
- Ορίζεται η βιβλιοθήκη
stdio.h
, η οποία περιέχει τις απαραίτητες συναρτήσεις εισόδου/εξόδου. - Η συνάρτηση
main()
ξεκινά την εκτέλεση του προγράμματος. - Δηλώνεται ο δείκτης
fptr
τύπουFILE
, ο οποίος θα χρησιμοποιηθεί για να αναφερόμαστε στο αρχείο. - Δηλώνεται ο πίνακας χαρακτήρων
str
με μέγεθος 100, ο οποίος θα χρησιμοποιηθεί για την αποθήκευση των γραμμών του αρχείου. - Με την χρήση της συνάρτησης
fopen
, ανοίγεται το αρχείο “file.txt” σε λειτουργία ανάγνωσης (“r”). Ο δείκτηςfptr
δείχνει πλέον στο ανοιχτό αρχείο. - Με τη χρήση του βρόχου
while
, διαβάζονται διαδοχικά γραμμές από το αρχείο χρησιμοποιώντας τη συνάρτησηfgets
. Η συνθήκηfgets(str, 100, fptr) != NULL
ελέγχει αν η ανάγνωση της γραμμής ήταν επιτυχής και δεν έχουμε φτάσει στο τέλος του αρχείου. - Κάθε διαβασμένη γραμμή από το αρχείο εκτυπώνεται στην οθόνη χρησιμοποιώντας τη συνάρτηση
printf
. - Αφού διαβαστούν όλες οι γραμμές του αρχείου, κλείνει με ασφάλεια το αρχείο χρησιμοποιώντας τη συνάρτηση
fclose
. - Η
main()
συνάρτηση τερματίζει επιστρέφοντας την τιμή 0, υποδεικνύοντας ότι το πρόγραμμα ολοκληρώθηκε με επιτυχία.
Ο κώδικας ανοίγει ένα αρχείο κειμένου με όνομα “file.txt”, διαβάζει τις γραμμές του και τις εκτυπώνει στην οθόνη. Συνεπώς, αν το αρχείο “file.txt” περιέχει το περιεχόμενο “Hello, World!”, τότε θα εμφανιστεί αυτό το μήνυμα στην οθόνη κατά την εκτέλεση του προγράμματος.
Εάν προσπαθήσετε να ανοίξετε ένα αρχείο για ανάγνωση που δεν υπάρχει, η συνάρτηση fopen()
θα επιστρέψει την τιμή NULL
.
Σαν καλή πρακτική, μπορούμε να χρησιμοποιήσουμε μια δομή if για να ελέγξουμε αν η τιμή της συνάρτησης επιστρέφει την τιμή NULL και να εκτυπώσουμε κάποιο κείμενο αντί αυτού (όταν το αρχείο δεν υπάρχει):
#include <stdio.h> int main() { FILE *fptr; // Δήλωση δείκτη σε αρχείο char str[100]; // Δήλωση πίνακα χαρακτήρων fptr = fopen("nonexistent.txt", "r"); // Άνοιγμα αρχείου για ανάγνωση ("r" = read mode) if (fptr == NULL) { // Έλεγχος αν η ανοίγματος του αρχείου απέτυχε printf("Unable to open file.\n"); // Εκτύπωση μηνύματος λάθους return 1; // Έξοδος από το πρόγραμμα με κωδικό λάθους } while (fgets(str, 100, fptr) != NULL) { // Διάβασμα γραμμών από το αρχείο μέχρι το τέλος του αρχείου printf("%s", str); // Εκτύπωση της γραμμής } fclose(fptr); // Κλείσιμο του αρχείου return 0; // Επιστροφή μηδενικού κωδικού επιτυχίας }
Ο παραπάνω κώδικας σε C πραγματοποιεί τις ακόλουθες λειτουργίες:
- Ορίζει μια μεταβλητή δείκτη
fptr
τύπουFILE
για να αντιπροσωπεύει το αρχείο που θα ανοιχθεί. - Ορίζει έναν πίνακα χαρακτήρων
str
με χωρητικότητα 100 για την αποθήκευση των γραμμών που θα διαβαστούν από το αρχείο. - Χρησιμοποιεί τη συνάρτηση
fopen
για να ανοίξει το αρχείο “nonexistent.txt” για ανάγνωση. - Ελέγχει αν η διαδικασία ανοίγματος του αρχείου απέτυχε, ελέγχοντας αν ο δείκτης
fptr
είναιNULL
. Αν είναιNULL
, εκτυπώνεται ένα μήνυμα λάθους και το πρόγραμμα τερματίζεται με κωδικό λάθους 1. - Χρησιμοποιεί μια επανάληψη
while
για να διαβάζει γραμμές από το αρχείο χρησιμοποιώντας τη συνάρτησηfgets
. Η επανάληψη συνεχίζεται μέχρι να φτάσει στο τέλος του αρχείου. - Εκτυπώνει κάθε γραμμή που διαβάζει με τη χρήση της συνάρτησης
printf
. - Χρησιμοποιεί τη συνάρτηση
fclose
για να κλείσει το αρχείο μετά την ολοκλήρωση της ανάγνωσης. - Επιστρέφει τον κωδικό 0 για να υποδηλώσει επιτυχή ολοκλήρωση του προγράμματος.
[adinserter block=”3″]
Μπορούμε να δημιουργήσουμε έναν πιο βιώσιμο κώδικα εάν χρησιμοποιήσουμε ξανά το παράδειγμα μας “ανάγνωσης αρχείου” παραπάνω:
#include <stdio.h> int main() { FILE *fptr; // Δήλωση δείκτη προς αρχείο char str[100]; // Πίνακας για αποθήκευση των γραμμών από το αρχείο char filename[20]; // Μεταβλητή για την αποθήκευση του ονόματος του αρχείου printf("Enter the filename: "); scanf("%s", filename); // Ζητάμε από τον χρήστη να εισάγει το όνομα του αρχείου fptr = fopen(filename, "r"); // Άνοιγμα του αρχείου για ανάγνωση ("r" = read) if (fptr == NULL) { // Έλεγχος επιτυχίας ανοίγματος αρχείου printf("Unable to open file.\n"); return 1; } while (fgets(str, 100, fptr) != NULL) { // Διάβασμα και εκτύπωση κάθε γραμμής από το αρχείο printf("%s", str); } fclose(fptr); // Κλείσιμο του αρχείου return 0; }
Ο παραπάνω κώδικας σας επιτρέπει να διαβάσετε και να εκτυπώσετε το περιεχόμενο ενός αρχείου κειμένου. Ακολουθείται η ακόλουθη διαδικασία:
- Ζητείται από τον χρήστη να εισάγει το όνομα του αρχείου που θέλει να διαβάσει.
- Ο κώδικας χρησιμοποιεί τη συνάρτηση
fopen
για να ανοίξει το αρχείο με τη λειτουργία “r” (ανάγνωση). - Εάν η λειτουργία ανοίγματος αποτύχει (ο δείκτης προς το αρχείο είναι
NULL
), εμφανίζεται ένα μήνυμα λάθους και το πρόγραμμα τερματίζεται. - Εάν το ανοίγμα του αρχείου είναι επιτυχές, ο κώδικας χρησιμοποιεί μια επανάληψη
while
για να διαβάσει και να εκτυπώσει κάθε γραμμή από το αρχείο. - Η συνάρτηση
fgets
χρησιμοποιείται για να διαβάσει μια γραμμή από το αρχείο και να την αποθηκεύσει στον πίνακαstr
. - Ο κώδικας στη συνέχεια εκτυπώνει τη γραμμή που διαβάστηκε.
- Η διαδικασία επαναλαμβάνεται μέχρι να φτάσει στο τέλος του αρχείου ή μέχρι να συναντήσει τον χαρακτήρα
NULL
. - Τέλος, ο κώδικας χρησιμοποιεί τη συνάρτηση
fclose
για να κλείσει το αρχείο που προηγουμένως άνοιξε.
Έτσι, ο κώδικας επιτρέπει την ανάγνωση και εκτύπωση του περιεχομένου ενός αρχείου κειμένου που προσδιορίζεται από τον χρήστη.