Διαχείριση Αρχείων
Αρχεία Για να είναι δυνατή η επεξεργασία μεγάλου αριθμού δεδομένων τα δεδομένα είναι αποθηκευμένα σε ψηφιακά μέσα κατάλληλα οργανωμένα. Η αποθήκευση γίνεται σε αρχεία. Πολλά προγράμματα χρησιμοποιούν αρχεία για την είσοδο και έξοδο δεδομένων.
Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record) Κάθε λογική εγγραφή ενός αρχείου αποτελείται από μία σειρά διακριτών δεδομένων που έχουν νόημα επεξεργασίας που ονομάζονται πεδία (fields)
Περιεχόμενα αρχείου Παράδειγμα Code Onoma Eponymo Bathmos 1, ΑΒΡΑΑΜ, ΑΒΡΑΜΙΔΗΣ, 6 2, ΒΑΣΙΛΕΙΟΣ, ΒΑΣΙΛΕΙΟΥ, 9 3, ΔΗΜΗΤΡΙΟΣ, ΔΗΜΗΤΡΙΟΥ, 7 4, ΓΕΩΡΓΙΟΣ, ΓΕΩΡΓΙΟΥ, 4 5, ΘΕΟΔΩΡΟΣ, ΘΕΟΔΩΡΟΥ, 9 6, ΙΩΑΝΝΗΣ, ΙΩΑΝΝΟΥ, 5 7, ΝΙΚΟΛΑΟΣ, ΝΙΚΟΛΑΟΥ, 10 8, ΠΕΤΡΟΣ, ΠΕΤΡΙΔΗΣ, 8
Τύποι Αρχείων στη VB Σειριακά αρχεία Αρχεία τυχαίας προσπέλασης Δυαδικά αρχεία
Σειριακά Αρχεία Ένα αρχείο κειμένου (text file) αποτελείται από μία ή περισσότερες γραμμές από αριθμούς, λέξεις ή χαρακτήρες. Διαφέρουν από τα αρχεία εγγράφων (document files) που περιέχουν κωδικούς μορφοποίησης και από τα εκτελέσιμα αρχεία (executable files) που περιέχουν οδηγίες προς το λειτουργικό σύστημα. Τα αρχεία κειμένου που ανοίγουν με τη χρήση αυτής της σύνταξης ονομάζονται σειριακά αρχεία επειδή η επεξεργασία των περιεχομένων τους πρέπει να γίνει με τη σειρά.
Σειριακά αρχεία Τα σειριακά αρχεία αποτελούνται από μια σειρά γραμμών κειμένου και συχνά ονομάζονται ASCII. Αποθηκεύονται χρησιμοποιώντας ένα byte για κάθε χαρακτήρα και μπορούμε να τα επεξεργαστούμε μέσω ενός απλού κειμενογράφου (π.χ. Notepad). Τα πεδία συνήθως διαχωρίζονται με ένα κενό ή ένα κόμμα (,)
Βασικές έννοιες Άνοιγμα αρχείου. Αποθήκευση δεδομένων στο αρχείο ή ανάγνωση δεδομένων από αρχείο. Κλείσιμο αρχείου.
Άνοιγμα Αρχείου - Εντολή Open Πριν γίνει οποιαδήποτε προσπέλαση σε ένα αρχείο (ανάγνωση ή αποθήκευση δεδομένων) θα πρέπει να γίνει ΑΝΟΙΓΜΑ του αρχείου. Open ΌνομαΑρχείου For Κατάσταση As # αριθμός Output (έξοδος) Input (είσοδος) Append (προσάρτηση) Binary (δυαδικό) Random (τυχαία)
Άνοιγμα Αρχείου Εντολή Open Open ΌνομαΑρχείου For Κατάσταση As # αριθμός Open d:\sales.txt For Output As #5 Open d:\students.txt For Append As #3 Open d:\paragogi.txt For Input As #1
Άνοιγμα Αρχείου Output Η εντολή που ανοίγει ένα αρχείο σε κατάσταση Output (αρχείο εξόδου): Open ΌνομαΑρχείου For Output As #αριθμός Open d:/myfile.txt For Output As #1
Άνοιγμα Αρχείου Output Η κατάσταση Output δημιουργεί το αρχείο εάν δεν υπάρχει ή ανοίγει και διαγράφει το περιεχόμενο του αρχείου εάν υπάρχει.
Προσαρτώντας δεδομένα σε αρχείο Η κατάσταση Append επιτρέπει σε ένα πρόγραμμα να προσθέσει δεδομένα σε ένα ήδη υπάρχον αρχείο. Open d:/myfile.txt For Append As #1
Κλείσιμο αρχείου Εντολή Close Για να κλείσετε ένα αρχείο, καλείται την εντολή Close ως εξής: Close #αριθμός Close #1 Close #2, 3
Ανάγνωση δεδομένων - Εντολή Input Η εντολή Input επιτρέπει να διαβάσουμε από ένα ψηφιακό αρχείο μια σειρά δεδομένων: Input #1, code, name, eponymo, bathmos Διαβάζει από το αρχείο #1 τέσσερις τιμές και τις τοποθετεί στις μεταβλητές code, name, eponymo, bathmos
Αποθήκευση δεδομένων σε αρχείο Η εντολή αποθήκευσης δεδομένων σε αρχείο είναι: Print #αριθμός, Τιμή1, Τιμή2... Print #1, This is a test ή Write #αριθμός, Τιμή1, Τιμή2 Write #1, code, name, eponymo, bathmos
Αποθήκευση δεδομένων σε αρχείο Print #1, met1, met2, met3 Write #2, met1,met,met3 Η εντολή Print γράφει στο αρχείο τις τιμές των μεταβλητών όπως θα τις εμφάνιζε στη φόρμα Η εντολή Write αποθηκεύει στο αρχείο τις τιμές των μεταβλητών διαχωρίζοντάς τες με κόμμα (,) και το περιεχόμενων των string μεταβλητών μέσα σε εισαγωγικά ( )
Παράδειγμα 1: Δημιουργία αρχείου Να γραφεί πρόγραμμα το οποίο διαβάζει ένα οποιοδήποτε κείμενο που εισάγει ο χρήστης του προγράμματος και το αποθηκεύει σε ένα αρχείο με όνομα MyExample.txt στο δίσκο d:\.
Παράδειγμα 1: Δημιουργία αρχείου Private Sub Command1_Click() Dim keimeno As String Keimeno = InputBox( Δώσε κείμενο ) Open "d:\myexample.txt" For Output As #1 Print #1, keimeno Close #1 MsgBox "Αποθήκευση ΟΚ" End Sub
Προσαρτώντας δεδομένα σε αρχείο Η κατάσταση Append επιτρέπει σε ένα πρόγραμμα να προσθέσει δεδομένα σε ένα ήδη υπάρχον αρχείο. Open d:/myfile.txt For Append As #1
Παράδειγμα 2: Προσθήκη δεδομένων σε αρχείο Να γραφεί πρόγραμμα το οποίο: (α) διαβάζει ένα οποιοδήποτε κείμενο από το χρήστη του προγράμματος και το αποθηκεύει σε ένα αρχείο και (β) παρέχει τη δυνατότητα στο χρήστη να προσθέτει επιπλέον κείμενο και να ενημερώνει το αρχείο.
Παράδειγμα 2: Προσθήκη δεδομένων σε αρχείο Private Sub Command2_Click() Dim keimeno As String Keimeno = InputBox( Δώσε κείμενο ) Open "d:\myexample.txt" For Append As #1 Print #1, keimeno Close #1 MsgBox "Προσθήκη κειμένου ΟΚ" End Sub
Ανάγνωση δεδομένων από αρχείο Η κατάσταση Input επιτρέπει σε ένα αρχείο να διαβάσει δεδομένα από ένα υπάρχον αρχείο. Input #1, data
Παράδειγμα 3: Ανάγνωση αρχείου Να γραφεί πρόγραμμα το οποίο: (α) διαβάζει ένα οποιοδήποτε κείμενο από το χρήστη του προγράμματος και το αποθηκεύει σε ένα αρχείο και (β) διαβάζει το αρχείο και εμφανίζει το περιεχόμενό του στην φόρμα (οθόνη).
Παράδειγμα 3: Ανάγνωση αρχείου Private Sub Command2_Click() Dim keimno As String Open "d:\myexample.txt" For Input As #1 Input #1, keimeno Close #1 Print keimeno End Sub
Άσκηση 1: Δημιουργία αρχείου Να γραφεί πρόγραμμα το οποίο: Διαβάζει από την οθόνη τα παρακάτω στοιχεία που αφορούν στη βαθμολογία ενός φοιτητή: Κωδικός φοιτητή Βαθμός-1 Βαθμός-2 Και να τα γράφει σε ένα αρχείο με όνομα students.txt Η διαδικασία να επαναλαμβάνεται για 20 φοιτητές.
Άσκηση 1: Δημιουργία αρχείου Private Sub Command1_Click() Dim code As Integer, i As Integer Dim b1 As Integer, b2 As Integer Open "d:\students.txt" For Output As #1 For i = 1 To 20 code = InputBox("Κωδικός φοιτητή") b1 = InputBox("Βαθμός 1ος") b2 = InputBox("Βαθμός 2ος") Print #1, code, b1, b2 Next i Close #1 End Sub
Άσκηση 2: Ανάγνωση αρχείου και υπολογισμός μέσου όρου βαθμολογίας Να γραφεί πρόγραμμα το οποίο: Σε ένα αρχείο με όνομα students.txt είναι αποθηκευμένα τα στοιχεία 20 φοιτητών με τις βαθμολογίες τους σε δύο προόδους. Το αρχείο έχει την παρακάτω δομή: Κωδικός φοιτητή Βαθμός-1 Βαθμός-2 Να γραφεί πρόγραμμα που να διαβάζει κάθε εγγραφή του αρχείου, να υπολογίζει το μέσο όρο στην βαθμολογία και να εμφανίζει στην οθόνη: το κωδικό φοιτητή τον μέσο όρο βαθμολογίας
Άσκηση 2: Ανάγνωση αρχείου και υπολογισμός μέσου όρου βαθμολογίας Private Sub Command2_Click() Dim code As Integer, i As Integer, mo As Single Dim b1 As Single, b2 As Single Open "d:\students.txt" For Input As #1 For i = 1 To 20 Input #1, code, b1, b2 mo = (b1 + b2) / 2 Print code, "Μέσος όρος:="; mo Next i Close #1 End Sub
Άσκηση 3: Δημιουργία αρχείου πωλητών Να γραφεί πρόγραμμα το οποίο: Διαβάζει από την οθόνη τα παρακάτω στοιχεία που αφορούν στις πωλήσεις ενός πωλητή: Κωδικός πωλητή Ονοματεπώνυμο πωλητή Πωλήσεις 1ου εξαμήνου Πωλήσεις 2ου εξαμήνου Και να τα γράφει σε ένα αρχείο με όνομα sales.txt Η διαδικασία να επαναλαμβάνεται για 10 πωλητές.
Άσκηση 3: Δημιουργία αρχείου πωλητών Private Sub Command1_Click() Dim i As Integer, Code As Integer, Eponymo as String Dim Exam_A as Single, Exam_B as Single Open "sales.txt" For Output As #1 For i = 1 To 10 Code = InputBox("Κωδικός πωλητή " & i) Eponymo = InputBox("Ονοματεπώνυμο πωλητή") Exam_A = InputBox("Αξία πωλήσεων Α εξαμήνου") Exam_B = InputBox("Αξία πωλήσεων Β εξαμήνου") Write #1, Code, Eponymo, Exam_A, Exam_B Next i Close #1 End Sub
Άσκηση 4: Ανάγνωση αρχείου πωλητών Σε ένα αρχείο με όνομα sales.txt είναι αποθηκευμένα τα στοιχεία 10 πωλητών και τις πωλήσεις που πραγματοποίησαν ανά εξάμηνο. Το αρχείο έχει την παρακάτω δομή: Κωδικός πωλητή Ονοματεπώνυμο πωλητή Πωλήσεις 1ου εξαμήνου Πωλήσεις 2ου εξαμήνου Να γραφεί πρόγραμμα το οποίο: Διαβάζει κάθε εγγραφή του αρχείου υπολογίζει το σύνολο των πωλήσεων του έτους και την προμήθεια του πωλητή η οποία είναι 3% επί της αξίας των πωλήσεων. Για κάθε πωλητή γράφει στην οθόνη το κωδικό του, το ονοματεπώνυμο του την συνολική αξία πωλήσεων του και την προμήθεια που δικαιούται. Στο τέλος της διαδικασίας εμφανίζει την συνολική αξία πωλήσεων για όλους του πωλητές καθώς και τη συνολική αξία προμήθειας.
Άσκηση 4: Ανάγνωση αρχείου πωλητών Private Sub Command2_Click() Dim i As Integer, Code As Integer, Eponymo As String Dim Exam_A, Exam_B As Single, sum, As Single, S_sum As Integer Dim prom As Single, S_prom As Single Open "d:\sales.txt" For Input As #2 ssum = 0 sprom = 0 For i = 1 To 10 Input #2, Code, Eponymo, Exam_A, Exam_B sum = Exam_A + Exam_B S_sum = S_sum + sum prom = sum * 0.3 S_prom = sprom + prom Print Code, Eponymo, sum, prom Next i Close #1 Print "============================ Print Συνολική αξία πωλήσεων", S_sum Print Συνολική αξία προμηθειών", S_prom End Sub
Άσκηση 5: Δημιουργία αρχείου Do Loop Να γραφεί πρόγραμμα το οποίο: Διαβάζει από την οθόνη τα παρακάτω στοιχεία φοιτητών. Αριθμό Μητρώου Φοιτητή Ονοματεπώνυμο Βαθμός 1ης προόδου Βαθμός 2ης προόδου και τα αποθηκεύει σε ένα αρχείο με όνομα students.txt. Η διαδικασία να επαναλαμβάνεται μέχρις ότου δοθεί κωδικός 0 (μηδέν).
Άσκηση 5 Private Sub Command1_Click() Dim code As Integer, epon As String, b1 As Single, b2 As Single Open "d:\students.txt" For Output As #1 Do code = InputBox("Kωδικός φοιτητή- τέλος<=0") If code > 0 Then epon = InputBox("Ονοματεπώνυμο φοιτητή") b1 = InputBox("Βαθμός Α") b2 = InputBox("Βαθμός Β") Write #1, code, epon, b1, b2 End If Loop Until code <= 0 Close #1 End Sub
Να γραφεί πρόγραμμα το οποίο: Διαβάζει από ένα αρχείο με όνομα students.txt, τα παρακάτω στοιχεία φοιτητών. Αριθμό Μητρώου Φοιτητή Ονοματεπώνυμο Βαθμός 1ης προόδου Βαθμός 2ης προόδου Για κάθε εγγραφή υπολογίζει τον μέσο όρο της βαθμολογίας και εμφανίζει στην οθόνη τα στοιχεία κάθε εγγραφής και τον μέσο όρο. Στο τέλος της διαδικασίας εμφανίζει στην οθόνη: Το πλήθος των εγγραφών του αρχείου. Το ποσοστό των επιτυχόντων αν θεωρήσουμε ότι η βάση επιτυχίας είναι το 5.
Συνάρτηση EOF EOF: Έλεγχος για το τέλος του αρχείου Για την ανάγνωση αγνώστου αριθμού εγγραφών ενός αρχείου γίνεται χρήση της συνάρτησης EOF. Δέχεται ως όρισμα τον αριθμό του αρχείου που δηλώθηκε με την εντολή OPEN Η συνάρτηση αυτή επιστρέφει την τιμή TRUE όταν βρεθεί τέλος του αρχείου. Συνάρτηση EOF χρησιμοποιείται σε συνδυασμό με την Do While Loop
Άσκηση 5 Private Sub Command2_Click() Dim code As Integer, epon As String, ba1 As Single, ba2 As Single, mo As Single Dim epit As Integer, pososto As Single, pl As Integer Open "d:\students.txt" For Input As #2 pl = 0 epit = 0 Do While Not (EOF(2)) Input #2, code, epon, ba1, ba2 pl = pl + 1 mo = (ba1 + ba2) / 2 If mo >= 5 Then epit = epit + 1 End If Print code, epon, mo Loop Print "Σύνολο εγγραφών=", pl If pl > 0 Then pososto = epit / pl Print "Ποσοστό Επιτυχόντων =", pososto; "%" Else Print " Άδειο αρχείο" End If Close #2