Τετάρτη 19 Αυγούστου 2015

Χειρισμός Εγγράφων στη Μ2000 (ανανεώθηκε)

Η Μ2000 διαθέτει ένα τύπο μεταβλητής το Έγγραφο
Οποιοδήποτε αλφαριθμητικό ή στοιχείο πίνακα αλφαριθμητικών μπορεί να γίνει έγγραφο. Το έγγραφο διατηρεί τα δεδομένα του σε παραγράφους.Με αυτόν τον τρόπο έχουμε δυνατότητα να χειριστούμε μεγάλα κείμενα και να κινηθούμε ανά παράγραφο.
Επιπλέον έχουμε την δυνατότητα να αποθηκεύσουμε το έγγραφο με έναν από τέσσερις τρόπους. Εδώ θα δούμε ένα πρόγραμμα που φτιάχνει τέσσερις φορές το ίδιο έγγραφο, και σε κάθε φορά το σώνει και το προσθέτει επίσης (έτσι διπλασιάζει το μήκος του αρχείου). Μετά μας το παρουσιάζει στον διορθωτή (εμείς απλά πατάμε Esc για να κλείσει) και μας λέει το μέγεθός του στο δίσκο.

Εδώ θα δούμε τις Τύπωσε πάνω, Τύπωσε μέρος, Τύπωσε υπό, νέες εντολές της έκδοσης 8 για την παρουσίαση τιμών και λέξεων στην οθόνη. Η πρώτη διαγράφει πρώτα το φόντο της γραμμής που θα γράψουμε και κάνει πρόσκαιρα το πλάτος της στήλης όσο το πλάτος της οθόνης σε χαρακτήρες. Έτσι μας βολεύει να τυπώσουμε με στοίχιση στο κέντρο, εδώ γίνεται με την $(6), μια εσωτερική συνάρτηση χειρισμού της Τύπωσε. Η δεύτερη τυπώνει χωρίς να αλλάζει γραμμή ακόμα και αν βάλουμε περισσότερες στήλες από όσες χωράνε. Η τελευταία βάζει πρώτα μια υπογράμμιση και μετά αλλάζει γραμμή εκτύπωσης και γίνεται σαν την Τύπωσε Μέρος.

Εκτός την Τύπωσε βλέπουμε και την Αναφορά η οποία εδώ δεν έχει στην αρχή αριθμό που δηλώνει φορμάρισμα, είναι δηλαδή το εξ ορισμού αριστερό, αλλά έχουμε πρώτα μεταφέρει τον δρομέα μετά το δέκατο χαρακτήρα (ξεκινάει ο πρώτος αριστερά ως 0), ετοιμάζοντας αριστερό περιθώριο δέκα χαρακτήρες. μετά την αναφορά επιστρέφουμε το δρομέα στην αρχή της γραμμής.

Επίσης εδώ χρησιμοποιούμε την Για Επόμενο και όχι την Για {} χωρίς κάποιο ιδιαίτερο λόγο (η Για {} είναι πιο γρήγορη αλλά δεν μας ενδιαφέρει εδώ) .

Δείτε πως με μια ανάθεση τιμών γεμίζουμε τον πίνακα α$() με τέσσερα στοιχεία.

Η εντολή συγγραφή (ή σ για συντομία, και είναι και έτσι αποδεκτή από τον διερμηνευτή), χρησιμοποιείται εδώ όχι για να φτιάξει κάποιο τμήμα ή κάποια συνάρτηση αλλά για να μας φέρει στον διορθωτή ένα κείμενο από το δίσκο. Αυτόματα αναγνωρίζει ποιος από τους τέσσερις τύπους είναι και ότι αλλάξουμε το γράφει στο αρχείο πίσω. (μπορούμε να ακυρώσουμε τις αλλαγές με shift Escape - και από το αναδυόμενο μενού επιλογών, με δεξί κλικ στα γράμματα ή με αριστερό στην επικεφαλίδα του διορθωτή)

Τέλος δείτε ακόμα και τη συνάρτηση μορφή$(). Δεν φαίνεται εδώ η περίπτωση στρογγυλοποίησης αριθμού:

Τύπωσε μορφή$("Α={0:2}, Β={1:2}", 2.567, 3.789)
 Μπορεί κανείς να το αντιγράψει σε ένα τμήμα. Με μια εντολή Σ α ανοίγει ο διορθωτής στο τμήμα α και αντιγράφουμε το παρακάτω (απαιτεί την τελευταία αναθεώρηση 34 της έκδοσης 8, δείτε τον σύνδεσμο δεξιά στη στήλη)

Οι οριζόντιες γραμμές στην εικόνα φτιάχτηκαν με την Τύπωσε υπό (υπογράμμιση. αλλά το έφαγα λίγο...)

Τα αρχεία σώνονται στο κατάλογο του χρήστη (δεν ορίσαμε κάτι άλλο εδώ)

Φόρμα 60,32
οθονη 15 \\ άσπρο
πένα 0 \\ μαύρο
Πίνακας α$(4) : α$(0)="UTF-16LE","UTF-16BE","UTF-8","ANSI"
Τύπωσε πάνω $(6),"Παράδειγμα για αποθήκευση εγγράφου με τέσσερις τρόπους"
Για ι=0 έως 3
       Καθαρό δοκίμασέμε$
      Εγγραφο δοκίμασέμε$ = {1η γραμμή
                              2η γραμμή
                              3η γραμμή
                              }
       δοκίμασέμε$={4η γραμμή  \\ πάτα απλά Esc
                               }
       Τύπωσε υπό  "Σώνω μια φορά και προσθέτω άλλη μια:"  : Τύπωσε
      \\ 10 χαρακτήρες δεξί περιθώριο για την αναφορά
      Τύπωσε @(10), : Αναφορά δοκίμασέμε$ : Τύπωσε @(0),   \\ επιστρέφει ο δρομέας τέρμα αριστερά
      Σώσε.έγγραφο δοκίμασέμε$, "alfa1.txt", ι
       Πρόσθεσε.έγγραφο δοκίμασέμε$, "alfa1.txt", ι
      Τύπωσε μέρος μορφή$({Μήκος αρχείου "{0}" σε bytes {1} τύπος {2}, συνολικοί χαρακτήρες {3}}, "alfa1.txt", αρχείου.μήκος("alfa1.txt"), α$(ι), Εγγράφου.μήκος(δοκίμασέμε$)*2)
       συγγραφή "alfa1.txt"
Επόμενο ι
Τύπωσε υπό


(κάθε φορά που μας ανοίγει το διορθωτή το σύστημα πατάμε Esc για να βγεί)
στην εικόνα εμφανίζονται συνολικοί χαρακτήρες 132, αλλά βγαίνουν 124, και σε Linux/Wine και σε Windows (μάλλον είναι παλιά η εικόνα)


Προσθήκη (21 Οκτ 2021):
Η Σώσε.έγγραφο παίρνει τελευταίο νούμερο τα παρακάτω (αν θέλουμε το δίνουμε αλλιώς αν έχουμε κάνει Φόρτωσε.έγγραφο τότε αυτόματα βρίσκει ο διερμηνευτής τι σύστημα χρησιμοποιούμε και θέτει εσωτερικά το σωστό νούμερο για να γίνει σωστά το σώσιμο αργότερα. Αν θέλουμε όμως επιβάλουμε άλλο τρόπο).
NoBom σημαίνει ότι δεν θα γραφτούν στην αρχή του αρχείου αναγνωριστικά κωδικοποίησης (ΒΟΜ).
lf είναι το 10 ή αλλιώς line feed (το χρισημοποιεί το Linux)
cr είναι το 13 ή αλλιώς carriage return (το χρισημοποιεί το Mac) 
Τα windows χρησιμοποιούν τα cr+lf (13+10, δυο χαρακτήρες). Το έγγραφο εσωτερικά δεν αποθηκεύει για κάθε παράγραφο τους παραπάνω χαρακτήρες. Τους βάζει μόνο όταν γράφει σε αρχείο! Αν όμως γράψουμε ένα αλφαριθμητικό από έγγραφο ή συγκρίνουμε ένα έγγραφο με ένα αλφαριθμητικό τότε πρόσκαιρα το έγγραφο θα δοθεί με cr+lf, χωρίς να υπολογίζει πως ήταν στο αρχείο απ΄όπου αρχικά φορτώθηκε το έγγραφο.

0 UTF-16LE
-4 UTF-16LE No BOM    10 lf   -10 lf NoBom, 20 cr -20 cr NoBom
1 UTF-16BE -1 NoBom   11 lf -11 lf NoBom  21 cr -21 cr NoBom
2 UTF-8  -2 NoBom   12 lf -11 lf NoBom  22 cr -22 cr NoBom
3 ANSI (ότι είναι το σύστημα)
1032  - ANSI Greek Locale (δίνουμε το δικό μας νούμερο). Έτσι το έγγραφο μπορεί να αποθηκευτεί με το τρόπο που θέλουμε (προσοχή γιατί αν έχουμε χαρακτήρες που δεν υπάρχουν στο 1032 ή όποιο άλλο, τότε θα μπει το 63, δηλαδή ο χαρακτήρας ? σε κάθε αποτυχία κωδικοποίησης).
Με το πρόγραμμα παρακάτω βλέπουμε για νούμερα μεταξύ -22 και 22, τι βγαίνει!
α=-12
Τύπωσε " Κωδικοποίηση "+αν$(απολ(α υπολ 10) υπολ 4+1->"UTF-16LE", "UTF-16BE", "UTF-8", "ANSI");
Τύπωσε " | Αλλαγή γραμμής:"+αν$(απολ(α δια 10) +1->"crlf", "lf", "cr");
Τύπωσε " | BOM: "+αν$(α<0->"No ", "")


Υπάρχει τρόπος να ανοίξουμε ένα έγγραφο χωρίς να το δώσουμε στο αντικείμενο έγγραφο, και να το διαβάζουμε ανά byte. Εδώ θα πάρουμε νούμερα σε δεκαεξαδικό και τους χαρακτήρες.

Απλός κώδικας
(Η τύπωσε εμφανίζει τους χαρακτήρες 10 και 13 ως διάστημα):

δείκτης_σε_διάρθρωση=διάρθρωση("alfa1.txt")
τύπωσε δεκαεξ$(0, 2);" ";
για ι=0 έως μήκος(δείκτης_σε_διάρθρωση)-1
      τύπωσε δεκαεξ$(Εκφρ(δείκτης_σε_διάρθρωση, ι), 1);" ";
      αν (ι+1) υπολ 10=0 τότε
            τύπωσε " "+χαρ$(εκφρ$(δείκτης_σε_διάρθρωση, ι-9, 10))
            τύπωσε δεκαεξ$(ι, 2);" ";
      τέλος αν
επόμενο
κ=1
ενώ ι υπολ 10>0 : Τύπωσε "ΧΧ ";: ι++:κ++: τέλος ενώ
τύπωσε " "+χαρ$(εκφρ$(δείκτης_σε_διάρθρωση, ι-10 , 10-κ))

Προχωρημένος Κώδικας
(εξαγωγή σε πρόχειρο. Η Αναφορά λογαριάζει τις αλλαγές γραμμών, για το λόγο αυτό έχουμε μια συνάρτηση που αφαιρεί χαρακτήρες που δεν φαίνονται και βάζει τελείες)
(το αρχείο alfa1.txt το βρίσκει ο διερμηνευτής από την εκτέλεση του προηγούμενου παραδείγματος, το οποίο σώθηκε ως ANSI ελληνικό).

Έγγραφο ΕξαγωγήΚειμένου$
Σταθερή πλ=16
δείκτης_σε_διάρθρωση=διάρθρωση("alfa1.txt")
ΕξαγωγήΚειμένου$=δεκαεξ$(0, 2)+" "
για ι=0 έως μήκος(δείκτης_σε_διάρθρωση)-1
      ΕξαγωγήΚειμένου$=δεκαεξ$(Εκφρ(δείκτης_σε_διάρθρωση, ι), 1)+" "
      αν (ι+1) υπολ πλ=0 τότε
            ΕξαγωγήΚειμένου$=" "+@Αλλαξεχαρ$(εκφρ$(δείκτης_σε_διάρθρωση, ι-πλ+1, πλ))+{
            }
            ΕξαγωγήΚειμένου$=δεκαεξ$(ι+1, 2)+" "
      τέλος αν
επόμενο
κ=1
ενώ ι υπολ πλ>0 : ΕξαγωγήΚειμένου$="ΧΧ ": ι++:κ++: τέλος ενώ
ΕξαγωγήΚειμένου$= " "+@Αλλαξεχαρ$(εκφρ$(δείκτης_σε_διάρθρωση, ι-πλ , πλ+1-κ))
Πρόχειρο ΕξαγωγήΚειμένου$
Γραμματοσειρά "Courier New"
Φόρμα 80, 25
Αναφορά ΕξαγωγήΚειμένου$
Τέλος
// Στατική συνάρτηση. Την καλούμε με @ΑλλαξεΧαρ$()
Συνάρτηση ΑλλαξεΧαρ$(Τι$)
      τοπικές ι, όλο$, ένα$, κωδ
      για ι=1 έως μήκος(Τι$)*2 ' ανά Byte -(ψηφίο)
            ένα$=χαρ$(μεσ$(Τι$, ι, 1 ως ψηφίο))
            κωδ=χαρκωδ(ένα$)
            Αν κωδ>=0 και κωδ<=31 τότε ένα$="."
            ολο$+=ένα$
      επόμενο
      =όλο$
Τελος Συνάρτησης


Αποτέλεσμα (πλ=10)

0000 31 E7 20 E3 F1 E1 EC EC DE 0D  1η γραμμή.
000A 0A 32 E7 20 E3 F1 E1 EC EC DE  .2η γραμμή
0014 0D 0A 33 E7 20 E3 F1 E1 EC EC  ..3η γραμμ
001E DE 0D 0A 34 E7 20 E3 F1 E1 EC  ή..4η γραμ
0028 EC DE 20 20 5C 5C 20 F0 DC F4  μή  \\ πάτ
0032 E1 20 E1 F0 EB DC 20 45 73 63  α απλά Esc
003C 0D 0A 31 E7 20 E3 F1 E1 EC EC  ..1η γραμμ
0046 DE 0D 0A 32 E7 20 E3 F1 E1 EC  ή..2η γραμ
0050 EC DE 0D 0A 33 E7 20 E3 F1 E1  μή..3η γρα
005A EC EC DE 0D 0A 34 E7 20 E3 F1  μμή..4η γρ
0064 E1 EC EC DE 20 20 5C 5C 20 F0  αμμή  \\ π
006E DC F4 E1 20 E1 F0 EB DC 20 45  άτα απλά E
0078 73 63 0D 0A ΧΧ ΧΧ ΧΧ ΧΧ ΧΧ ΧΧ  sc..

Αποτέλεσμα (πλ=16)

0000 31 E7 20 E3 F1 E1 EC EC DE 0D 0A 32 E7 20 E3 F1  1η γραμμή..2η γρ
0010 E1 EC EC DE 0D 0A 33 E7 20 E3 F1 E1 EC EC DE 0D  αμμή..3η γραμμή.
0020 0A 34 E7 20 E3 F1 E1 EC EC DE 20 20 5C 5C 20 F0  .4η γραμμή  \\ π
0030 DC F4 E1 20 E1 F0 EB DC 20 45 73 63 0D 0A 31 E7  άτα απλά Esc..1η
0040 20 E3 F1 E1 EC EC DE 0D 0A 32 E7 20 E3 F1 E1 EC   γραμμή..2η γραμ
0050 EC DE 0D 0A 33 E7 20 E3 F1 E1 EC EC DE 0D 0A 34  μή..3η γραμμή..4
0060 E7 20 E3 F1 E1 EC EC DE 20 20 5C 5C 20 F0 DC F4  η γραμμή  \\ πάτ
0070 E1 20 E1 F0 EB DC 20 45 73 63 0D 0A ΧΧ ΧΧ ΧΧ ΧΧ  α απλά Esc..

Αποτέλεσμα (πλ=8)

0000 31 E7 20 E3 F1 E1 EC EC  1η γραμμ
0008 DE 0D 0A 32 E7 20 E3 F1  ή..2η γρ
0010 E1 EC EC DE 0D 0A 33 E7  αμμή..3η
0018 20 E3 F1 E1 EC EC DE 0D   γραμμή.
0020 0A 34 E7 20 E3 F1 E1 EC  .4η γραμ
0028 EC DE 20 20 5C 5C 20 F0  μή  \\ π
0030 DC F4 E1 20 E1 F0 EB DC  άτα απλά
0038 20 45 73 63 0D 0A 31 E7   Esc..1η
0040 20 E3 F1 E1 EC EC DE 0D   γραμμή.
0048 0A 32 E7 20 E3 F1 E1 EC  .2η γραμ
0050 EC DE 0D 0A 33 E7 20 E3  μή..3η γ
0058 F1 E1 EC EC DE 0D 0A 34  ραμμή..4
0060 E7 20 E3 F1 E1 EC EC DE  η γραμμή
0068 20 20 5C 5C 20 F0 DC F4    \\ πάτ
0070 E1 20 E1 F0 EB DC 20 45  α απλά E
0078 73 63 0D 0A ΧΧ ΧΧ ΧΧ ΧΧ  sc..

Αν δώσουμε το Τοπικό 1033 (το 1032 είναι τα ελληνικά) τότε θα πάρουμε το παρακάτω γιατί η χαρ$() παίρνει τα ψηφία (bytes) και τα μετατρέπει σε UTF16 κωδικοποίηση βάσει του τοπικού (locale ID):

0000 31 E7 20 E3 F1 E1 EC EC  1ç ãñáìì
0008 DE 0D 0A 32 E7 20 E3 F1  Þ..2ç ãñ
0010 E1 EC EC DE 0D 0A 33 E7  áììÞ..3ç
0018 20 E3 F1 E1 EC EC DE 0D   ãñáììÞ.
0020 0A 34 E7 20 E3 F1 E1 EC  .4ç ãñáì
0028 EC DE 20 20 5C 5C 20 F0  ìÞ  \\ ð
0030 DC F4 E1 20 E1 F0 EB DC  Üôá áðëÜ
0038 20 45 73 63 0D 0A 31 E7   Esc..1ç
0040 20 E3 F1 E1 EC EC DE 0D   ãñáììÞ.
0048 0A 32 E7 20 E3 F1 E1 EC  .2ç ãñáì
0050 EC DE 0D 0A 33 E7 20 E3  ìÞ..3ç ã
0058 F1 E1 EC EC DE 0D 0A 34  ñáììÞ..4
0060 E7 20 E3 F1 E1 EC EC DE  ç ãñáììÞ
0068 20 20 5C 5C 20 F0 DC F4    \\ ðÜô
0070 E1 20 E1 F0 EB DC 20 45  á áðëÜ E
0078 73 63 0D 0A ΧΧ ΧΧ ΧΧ ΧΧ  sc..

Τα αλφαριθμητικά της Μ2000 κανονικά έχουν κωδικοποίηση UTF16. Όμως μπορούμε να βάλουμε ότι θέλουμε αρκεί να τα χειριστούμε σωστά. Στο παράδειγμα η χαρ$() περιμένει ένα αλφαριθμητικό (μια περίπτωση είναι αυτή) να έχει ANSI κωδικοποίηση δηλαδή bytes. Το μήκος ενός αλφαριθμητικού μπορεί να είναι ζυγός (αν έχουμε UTF16) ή μπορεί να είναι οτιδήποτε αν έχουμε ANSI ή UTF8. Μπορούμε να χειριστούμε ANSI με τα Αρισ$(), Δεξι$(), Μεσ$() βάζοντας τo ως ψηφίο. Η Μήκος() δίνει για τα αλφαριθμητικά αριθμό των Words (2 bytes). Οπότε δίνει και μισό, δηλαδή αν έχουμε 7 bytes θα μας δώσει 3.5 μήκος. Για να φτιάξουμε το ΑΒ ελληνικό σε ένα αλφαριθμητικό με μήκος 1 (2 Bytes ή ψηφία): Τοπικό 1032 (μπορούμε να το δούμε και με την Τύπωσε Τοπικό), μετά 

α$=γραφή$("Α"): α$=γραφή$(χαρ$(α$)+"Β"):τύπωσε μήκος(α$), χαρ$(α$)

θέλει πάλι μετατροπή για να δούμε:     1ΑΒ
Το + δουλεύει για UTF16.

Δυαδικά αρχεία
Άλλος τρόπος είναι να χρησιμοποιήσουμε μια διάρθρωση μνήμης και να βάζουμε τα αλφαριθμητικά στη θέση τους. Εδώ στη μετάθεση 0 βάζουμε το Α και στην 1 το Β. Οι διαρθρώσεις δίνουν πραγματικές διευθύνσεις, στο παράδειγμα το Όλα(0) δίνει την διεύθυνση στη μνήμη που γράφτηκε το Α. Για τις περισσότερες περιπτώσεις μας αρκεί να δουλεύουμε με μεταθέσεις (offsets). Όταν όμως θέλουμε να δώσουμε σε μια κλήση βιβλιοθήκης ή σε εκτέλεση γλώσσας μηχανής χώρο για ανάγνωση και εγγραφή στοιχείων, τότε δίνουμε την διεύθυνση. Και στις δυο περιπτώσεις δεν υπάρχει κάτι άλλο να δώσουμε! 

Διάρθρωση Ολα ως ψηφίο*2
Επιστροφή Όλα, 0:=γραφή$("Α"), 1:=γραφή$("Β")
Τύπωσε χαρ$(Εκφρ$(Όλα))

Το Εκφρ$(Όλα) γυρνάει όλη την διάρθρωση ως αλφαριθμητικό χωρίς να κάνει καμία μετατροπή. Ουσιαστικά φτιάχνει ο διερμηνευτής ένα αλφαριθμητικό με μήκος όσο η διάρθρωση και κάνει αντιγραφή!
Μπορούμε να γράψουμε τη διάρθρωση σε αρχείο. Οι εντολές Πάρε και Δώσε δέχονται και τρίτη παράμετρο που λέει σε ποιο σημείο στο αρχείο θα πάρουμε ή θα δώσουμε ψηφία (bytes) όσο το μήκος της διάρθρωσης. Στη Μ2000 τα bits λέγονται ψηφίδες και τα Βytes λέγονται ψηφία. 

Άνοιξε "δυοψηφία.txt" για εξαγωγή ως #Κ
Δώσε #Κ, Όλα ' μεταθέτει την επόμενη εγγραφή κατά το μήκος του Όλα
Κλείσε #Κ
Τύπωσε Αρχείου.Μήκος("δυοψηφία.txt")=2

Προσοχή η περίπτωση "για εξαγωγή" πρώτα καθαρίζει ένα υπάρχον αρχείο και μετά το γεμίζει. Οπότε μια μόνο φορά χρειάζεται η περίπτωση "για εξαγωγή" όταν θα γράψουμε για πρώτη φορά στο αρχείο. Πώς ξέρουμε ότι το αρχείο υπάρχει ήδη; Υπάρχει η συνάρτηση Υπάρχει() όταν παίρνει όρισμα τιμή αλφαριθμητικού, το όνομα του αρχείου.  Έστω ότι πράγματι υπάρχει το αρχείου. Για να το δουλέψουμε ή θα χρησιμοποιούμε δυο δρομείς (δηλαδή θα ανοίξουμε δυο φορές το ίδιο αρχείο, μια για εισαγωγή και μια για συμπλήρωση), ή μια φορά (για συμπλήρωση) όπως στο παράδειγμα:

Μ=Αρχείου.Μήκος("δυοψηφία.txt")
Άνοιξε "δυοψηφία.txt" για συμπλήρωση ως #Κ
      Τύπωσε μετάθεση(#κ)
      μετάθεση #κ, Μ+1
      Δώσε #Κ, Όλα, ' μεταθέτει την επόμενη εγγραφή κατά το μήκος του Όλα
      μετάθεση #κ, 1
      Πάρε #κ, Όλα
Κλείσε #Κ
Τύπωσε Αρχείου.Μήκος("δυοψηφία.txt")

Έστω ότι πριν ξεκινήσουμε το παραπάνω πρόγραμμα, έχουμε αποθηκεύσει μια φορά το Όλα, δηλαδή το μήκος του αρχείου είναι 2.  Θα μας τυπώσει τη θέση της συμπλήρωσης Μ+1 δηλαδή το 3 (που δεν υπάρχει για την ώρα), και η Δώσε θα βάλει στο 3 και στο 4 τα δυο ψηφία του Όλα. Οπότε το μήκος αρχείου θα γίνει 4 (θα το δούμε στη τελευταία τύπωσε). Με τη μετάθεση στο 1 παίρνουμε δυο ψηφία από την αρχή του αρχείου. Μπορούμε να πάρουμε από όπου θέλουμε γιατί η μετάθεση γίνεται ανά ψηφίο, έτσι το μετάθεση #κ, 2 θα μας πάει στο δεύτερο ψηφίο. Μια Πάρε από εκεί θα μας δώσει δυο ψηφία, το 2ο και 3ο του αρχείου. Αν ζητήσουμε ψηφία που δεν υπάρχουν (η ζήτηση περνάει το τέλος αρχείου) θα βγει λάθος! Η μόνη περίπτωση που βάζουμε τη μετάθεση σε στοιχείο που δεν υπάρχει είναι για να προσθέσουμε στο τέλος (όπως στο Μ+1 στο παράδειγμα).

Στα αρχεία δεν υπάρχει θέση 0. Το πρώτο ψηφίο (byte) είναι στην θέση 1.

Η εντολή Άνοιξε δουλεύει κύρια για σειριακά αρχεία. Εδώ όμως με τη χρήση των μετάθεση, μετάθεση(), Πάρε και Δώσε καθώς και το Αρχείου.Μήκος() και με πακέτα τις διαρθρώσεις (γράφονται και διαβάζονται στο μήκος τους), έχουμε αυτό που λέμε random access αρχεία αλλά και δυαδικά αφού δεν μας ενδιαφέρει η κωδικοποίηση κατά τη μεταφορά.
Οι βασικοί τρόποι ανοίγματος είναι τέσσερις: Εξαγωγή (σβήνει το αρχείο αν το βρει στο άνοιγμα), Εισαγωγή, Συμπλήρωση, Πεδία. Στα πεδία δίνουμε στο τέλος το Μήκος σε χαρακτήρες (1 ή 2 ψηφία ανάλογα το τρόπο ανοίγματος. Υπάρχουν δυο λέξεις που αλλάζουν το τρόπο ανοίγματος. Η λέξη Ευρεία δουλεύει για UTF16 (ειδικά για όσα γράμματα έχουν μόνο δυο ψηφία). Η Λέξη Αποκλειστικά δεν επιτρέπει σε άλλο πρόγραμμα να ανοίξει το αρχείο μέχρι να το κλείσουμε. Δείτε τη βοήθεια Άνοιξε.


Γιώργος Καρράς

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.