Παρασκευή, 26 Φεβρουαρίου 2016

Εγχειρίδιο της Μ2000 - Τεύχος 19ο (νέο)

10.Μεταβλητή τύπου Έγγραφο

Η μεταβλητή τύπου Έγγραφο χρησιμοποιείται κύρια για έγγραφα αλλά και για άλλους σκοπούς, όπως θα δούμε. Αυτός ο τύπος δεν ανήκει στις βασικές μεταβλητές και δεν δίνει πίνακες. Μπορούμε να αναβαθμίσουμε ένα οποιοδήποτε αλφαριθμητικό, ακόμα και ένα στοιχείο πίνακα σε έγγραφο.

Εσωτερικά η μεταβλητή αυτή χρησιμοποιεί ένα αντικείμενο Document που φτιάχτηκε για τον διορθωτή της Μ2000 και κρατάει  παραγράφους.
Αν αντιγράψουμε το αλφαριθμητικό που εσωτερικά είναι έγγραφο στο σωρό ή σε άλλο αλφαριθμητικό τότε θα γίνει εξαγωγή από το αντικείμενο όλου του κειμένου ως ένα αλφαριθμητικό.

Α$="Γιώργος"
Τύπωσε Τύπος$(Α$\\ String
Έγγραφο Α$
Τύπωσε Τύπος$(Α$\\Document
Έγγραφο Β$={Πρώτη παράγραφος
                  Δεύτερη
                  Τρίτη
                  }
Τύπωσε Τύπος$(Β$\\Document
Βάλε Β$ \\ βάζω στο σωρό το έγγραφο, αλλά μπαίνει ως αλφαριθμητικό
Τύπωσε Φάκελος$() \\ S
Διάβασε Γ$ \\ το διαβάζω ως αλφαριθμητικό
Τύπωσε Τύπος$(Γ$\\ String
Πίνακας Α$(10)
Έγγραφο Α$(2)=Α$
Τύπωσε Τύπος$(Α$(2)\\ Document
Ομάδα Άλφα {
      Έγγραφο Α$
}
Τύπωσε Τύπος$(Άλφα.Α$\\ Document

Αναφορά Β$ \\ Τυπώνει με πλήρη στοίχιση
Αναφορά 2, Β$ \\ Τυπώνει με όλες τις γραμμές με στοίχιση στο κέντρο

10.1 Χτίσιμο μεγάλου αλφαριθμητικού (με αλλαγές παραγράφων)


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

Αν δεν βάλουμε την αλλαγή παραγράφου (δείτε το +{ } στο Α$ με την αλλαγή παραγράφου στο τέλος των 2000 χαρακτήρων "0") τότε ΄χάνουμε χρόνο, περίπου ένα 50%, δεν κερδίζουμε. Αντίθετα η αλλαγή παραγράφου κάνει το Έγγραφο να αλλάζει παραγράφους, σε νέα αλφαριθμητικά, και δίνει χρόνο 149.9 σε σχέση με το 8434.3 είναι μεγάλη διαφορά. περίπου 50 φορές μικρότερος χρόνος!

\\ Δημιουργία μεγάλου αλφαριθμητικού
Α$=Επαν$("0",2000)+{
}
Τύπωσε Μήκος(Α$\\ 2000
Β$=""
Αναλυτής
Για ι=1 έως 1000 {
      Β$=Β$+Α$
}
Τύπωσε Φόρτος \\ 8434
Τύπωσε Μήκος(Β$)
Καθαρό Β$
Έγγραφο Λ$
Αναλυτής
Για ι=1 έως 1000 {
      Λ$=Α$
}
Τύπωσε Φόρτος \\ 149
Τύπωσε Μήκος(Λ$), Εγγράφου.Μήκος(Λ$)

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

10.2 Προσθήκη Στο Έγγραφο με το "="


Δεν υπάρχει εντολή για αντικατάσταση ενός εγγράφου με ένα αλφαριθμητικό. Το = κάνει προσθήκη στο τέλος (όπως το Append στα αρχεία). Στο παρακάτω παράδειγμα φτιάχνουμε την Παράθεση$() με εντολές της Μ2000. Βλέπουμε τη χρήση του μπλοκ για επανάληψη με την κυκλικά. Το κυκλικά είναι μια σημαία για το μπλοκ. Όταν εμφανιστεί δίνει στο μπλοκ το δικαίωμα να ξανατρέξει, όταν φτάσει στο τέλος του! Να γιατί αν η α είναι αληθές (άρα δεν είχαμε κενό σωρό), τότε σηκώνουμε τη σημαία Κυκλικά και συνεχίζουμε στο Β$=",". Δεν μας πειράζει που δίνουμε σε κάθε επανάληψη την ίδια τιμή στο Β$. Αν βάζαμε μια Αν για να ελέγχουμε αν είναι κενό το Β$  τότε θα τρώγαμε περισσότερο χρόνο! Πάλι θα χρειάζονταν να βρούμε το Β$ αλλά τώρα θα βρίσκεται σε συνθήκη σε δομή Αν
Αν Β$="" Τότε Β$=","
Με αυτό Β$="," μόνο έχουμε βελτίωση 10%

Συνάρτηση Παρά$ {
      Έγγραφο Α$
      Β$=""
      {
            α=αληθές
            Αν Κενό Τότε {
                 =Α$
                 α=ψευδές
            } Αλλιώς.Αν ΕινΓρ Τότε {
                  Α$=Β$+παράθεση$(γραμμα$)
            } Αλλιώς.Αν ΕινΑρ Τότε {
                  Α$=Β$+αποκ$(γραφη$(αριθμός))
            } Αλλιώς {
                  Α$=Β$+"0"
            }
            Αν α τότε Κυκλικά
            Β$=","
      }
}
Τύπωσε Παρά$(1, "Γεια Χαρά", 2.34, 3)
Τύπωσε Παράθεση$(1, "Γεια Χαρά", 2.34, 3)

10.3 Εντολές εισαγωγής/εξαγωγής/επεξεργασίας ολόκληρου εγγράφου


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


10.3.1 Εισαγωγή εγγράφου από αρχείο


Με την εντολή Φόρτωσε.Αρχείο μπορούμε να φορτώσουμε σε ένα αντικείμενο τύπου εγγράφου ένα αρχείο.
Έστω ότι έχουμε το αρχείο alfa.txt στο φάκελο C:\  το οποίο το σώνουμε με μια από τις προτεινόμενες μορφές από το Notepad, έστω UTF-8 (δουλεύει για όλες τις περιπτώσεις, αν όμως χρησιμοποιήσουμε ANSI τότε θα πρέπει να έχουμε επιλογή γλώσσας στα Windows Ελληνικά για τα προγράμματα χωρίς υποστήριξη unicode, επειδή γίνεται μετατροπή αυτόματα, βάσει αυτή της επιλογής). Για Unicode τρόπους αποθήκευσης δεν υπάρχει θέμα να χάσουμε μίξη γλωσσών. Υποστηρίζονται τα συστήματα κωδικοποίησης UTF-8, UTF16LE, UTF16BE (ο διερμηνευτής σώνει τα προγράμματα με UTF-8, αλλά μπορεί να ανοίξει και παλιά αρχεία gsb αρκεί να έχουμε ρυθμίσει τη γλώσσα για την μετατροπή σε ANSI )
Επιπλέον ο διερμηνευτής διατηρεί τον τρόπο αλλαγής παραγράφων αν θέλουμε να σώσουμε. Εσωτερικά το αντικείμενο έγγραφο θεωρεί την αλλαγή παραγράφων ως δυο χαρακτήρες το 13 και το 10, που σε unicode είναι 4 bytes. Όμως δεν αποθηκεύει τις αλλαγές, αφού έχει φυσικά διαχωρίσει το κείμενο σε παραγράφους. Όταν όμως μας επιστρέφει όπως θα δούμε θέση στο κείμενο, υπολογίζει τις αλλαγές ως δυο χαρακτήρες (ανεξάρτητα αν είναι bytes ή words, ή αν είναι δυο χαρακτήρες ή ένας).

Έγγραφο Α$
Φόρτωσε.Έγγραφο Α$, "c:\alfa.txt"
Αναφορά Α$
Συγχώνευσε.Έγγραφο Α$, "c:\alfa.txt"
Αναφορά "Δυο φορές το ίδιο αρχικό κείμενο!"
Αναφορά Α$



10.3.2 Αποθήκευση εγγράφου σε αρχείο & εντολές στο Σύστημα.

Εξ ορισμού ο τρόπος κωδικοποίησης είναι κατά UTF-16LE. Με Σώσε.Έγγραφο σώνουμε έγγραφο, με Πρόσθεσε.Έγγραφο προσθέτουμε έγγραφο σε αρχείο (στο τέλος του)

Έγγραφο α$={Μια παράγρφος..
                  ...και μια άλλη παράγραφος
                  ...με διαστήματα δεξιά
                  ...τα οποία δεν θα είναι στο τελικό κείμενο
                  }
\\ θα σώσουμε στον κατάλογο που χρησιμοποιούμε
\\ και το παίρνουμε με την Κατ$
Τύπωσε Κατ$
\\ UTF-16LE
Σώσε.Έγγραφο α$, "alfa1.txt", 0
Σύστημα "Notepad.exe "+παράθεση$(κατ$+"alfa1.txt")
\\ UTF-16BE
Σώσε.Έγγραφο α$, "alfa2.txt", 1
Σύστημα "Notepad.exe "+παράθεση$(κατ$+"alfa2.txt")
\\ UTF-8
Σώσε.Έγγραφο α$, "alfa3.txt", 2
Σύστημα "Notepad.exe "+παράθεση$(κατ$+"alfa3.txt")
\\ ANSI
Σώσε.Έγγραφο α$, "alfa4.txt", 3
\\ Μπορώ να προσθέσω σε ένα αρχείο το έγγραφο
Πρόσθεσε.Έγγραφο α$, "alfa4.txt", 3
\\ δεν χρειάζεται να δώσω πρόγραμμα αν θέλω να χρησιμοποιηθεί το εξ ορισμού
Σύστημα παράθεση$(κατ$+"alfa4.txt")
\\ ανοίγω την αριθμομηχανή
Σύστημα "Calc"
\\ ανοίγω τον τρέχον κατάλογο
Σύστημα Κατ$

10.3.3 Σβήσιμο Εγγράφου


Για το σβήσιμο χρησιμοποιούμε την εντολή Καθαρό:

Έγγραφο Α$={Γεια
            }
Αναφορά Α$
Καθαρό Α$
Τύπωσε Τύπος$(Α$\\ Document
Τύπωσε Εγγράφου.Μήκος(Α$\\ 0

10.3.4 Εμφάνιση διαδοχικών παραγράφων.

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

Έγγραφο α$={Γιορτή
            Εκδήλωση
            Πάρτι
            Φεστιβάλ
            }
\\ υπάρχουν πέντε παράγραφοι. Μετράει και ο τελευταίος χωρίς αλλαγή παραγράφου!
\\ και χωρίς χαρακτήρες - έτσι ένα έγγραφο με χαρακτήρες χωρίς αλλαγή παραγράφου!
\\ έχει μια παράγραφο!

Μακρύς Μ=0
\\ ο Μ έγινε δρομέας
\\ το Δ θα είναι Αληθής αν το έγγραφο δεν είναι άδειο
Δ=Μπροστά(α$, Μ)
Τύπωσε Δ
Ενώ Μ>0 {
      Τύπωσε "Αριθμός Παραγράφου από Δρομέα ", αριθμός.παραγράφου(α$,Μ)
      Αναφορά Παράγραφος$(α$, (Μ)) \\ το Μ αλλάζει τιμή και είναι ο δείκτης παραγράφου
}
Δ=Πίσω(α$, Μ)
Τύπωσε Δ
Ενώ Μ>0 {
      Τύπωσε "Αριθμός Παραγράφου από Δρομέα ", αριθμός.παραγράφου(α$,Μ)
      Αναφορά Παράγραφος$(α$, (Μ)) \\ το Μ αλλάζει τιμή και είναι ο δείκτης παραγράφου
}


\\ Χωρίς χρήση δρομέα
Για ι=1 έως Εγγράφου.Παρ(α$) {
      Τύπωσε "Αριθμός Παραγράφου:", ι
      Αναφορά Παράγραφος$(α$, ι) \\ το ι είναι ο αριθμός σειράς παραγράφου
}

Χωρίς χρήση δρομέα απλά δίνουμε τη σειρά. Η διαφορά είναι ότι κάθε φορά που λέμε για τη σειρά π.χ. τη 4η παράγραφο, πρέπει το έγγραφο (γίνεται γρήγορα) να διατρέξει όλες τις παραγράφους και αφού μετρήσει τέσσερις τότε να μας επιστρέψει την τέταρτη παράγραφο. Με τη χρήση δρομέα, μας επιστρέφει μια παράγραφο και ο δρομέας δείχνει άμεσα την επόμενη παράγραφο, δεν χρειάζεται να ξεκινήσει από την αρχή. Ο δρομέας χρησιμοποιεί δείκτες στις παραγράφους και η συνάρτηση αριθμός.παραγράφου(α$,Μ) μας από το δείκτη Μ βρίσκει την σειρά (διατρέχει από την αρχή τις παραγράφους μέχρι να βρει ποια παράγραφος έχει τον ίδιο δείκτη). Δεν χρειάζεται όμως αφού θα μπορούσαμε να ξεκινήσουμε με μια μεταβλητή στο 0 και για κάθε παράγραφο να αυξάνουμε κατά ένα και να δείχνουμε τον αριθμό σειράς, θα είναι το ίδιο νούμερο, χωρίς πρόσθετο κόπο!

10.3.5 Διόρθωση εγγράφου με τον διορθωτή κειμένου

 
Παράδειγμα διορθωτή εγγράφου με διάφανο φόντο:
 
Έγγραφο α$={Γιορτή
            Εκδήλωση
            Πάρτι
            Φεστιβάλ
            }
Φόντο 2,6
Τύπωσε @(0,0), "Διορθωτής με διαφάνεια"
Κύλιση Χώρισμα 10
Πένα 1 {
            Διόρθωσε α$, 1,,Πένα
}
Η εντολή διόρθωσε παίρνει το αλφαριθμητικό, τη θέση του δρομέα, το  χρώμα φόντου, και το χρώμα γραμμάτων. Ανοίγει δε από το χώρισμα που θα θέσουμε και κάτω.

Υπάρχει και άλλος τρόπος ο οποίος δουλεύει με αλφαριθμητικά, αλλά πάλι ανοίγει το διορθωτή κειμένου, αλλά εδώ ορίζουμε αριστερή πάνω γωνία και πλάτος και ύψος:
(δουλεύει ακόμα και αν διαγράψουμε το Έγγραφο, δηλαδή έχουμε απλό αλφαριθμητικό)
Έγγραφο α$={Γιορτή
            Εκδήλωση
            Πάρτι
            Φεστιβάλ
            }
Δρομέας 10,10
Εισαγωγη ! α$, 20,10
 
(συνεχίζεται στο επόμενο τεύχος)

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

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