Πέμπτη, 23 Μαρτίου 2017

Ενημέρωση του τεύχους 21 του εγχειριδίου

Καθώς συνεχίζω την ανανέωση του μικρού εγχειριδίου έκανα και μια αλλαγή στο απ' ευθείας εγχειρίδιο στο blog, στο παράδειγμα που στέλνoyme ένα πίνακα στο Ecxel (χωρίς να χειριστούμε το Excel ως αντικείμενο αλλά μέσω ενός csv αρχείου).
Η τροποποίηση δίνει την δυνατότητα να σώσουμε από το Excel το csv και να πάρουμε από την γραμμή με τους τύπους που είχαμε στο csv τα αποτελέσματα.
Το παράδειγμα φτιάχνει το csv με χώρισμα Tab ανά στοιχείο και με ότι είχουμε τοπικά σε χαρακτήρα δεκαδικού (στα ελληνικά έχουμε το κόμμα).
Όσο το αρχείο είναι ανοικτό στο Excel μπορούμε με να το διαβάσουμε αλλά δεν μπορούμε να το τροποποιήσουμε. Με αυτόν τον τρόπο, δοκιμάζοντας να το ανοίξει για συμπλήρωση (append), περιμένει να ελευθερωθεί, να κλείσει από το Excel. Υπάρχουν δυο περιπτώσεις. Να το έχουμε σώσει από το Excel, ή όχι. Αν όχι τότε θα είναι όπως το στείλαμε, αν ναι τότε δείτε τι κάνει το Excel. Δεν βάζει εισαγωγικά στα πεδία με αλφαριθμητικά. Οπότε πρέπει να βάλουμε εμείς. Επιπλέον αλλάζει τους τύπους (τα κελιά με = στην αρχή)  με το αποτέλεσμα. Για την τελευταία γραμμή κάνουμε το εξής: Παίρνουμε όλη τη γραμμή με Γραμμή Εισαγωγής (θα είναι τα αλφαριθμητικά με εισαγωγικά και οι αριθμοί με δεκαδικό τη τελεία, αφού κάναμε την μετατροπή πιο πριν). Όπως είναι η γραμμή εισαγωγής πηγαίνει στο σωρό με την εντολή Σωρός και οι τιμές μπαίνουν στη κορυφή του, οπότε δοκιμάζουμε να διαβάσουμε αλφαριθμητικά, αν δεν βγει η δοκιμή διαβάζουμε αριθμητικές τιμές!
άλλος τρόπος θα ήταν να κοιτάμε μια προς μια τις τιμές στο σωρό και ανάλογα να κάνουμε με την χρήση της Ειναρ (που γυρνάει -1 αν είναι αριθμός).

Μπήκε η εντολή Τοπικό 1032 (σε περίπτωση που έχουμε επιλέξει αγγλικά στην Μ2000 το τοπικό είναι το 1033, οπότε λαμβάνει από εκεί την τελεία ως  τοπικο$(0xE) ενώ θέλουμε το ελληνικό, επειδή έχουμε το Excel στα ελληνικά, οπότε λέμε τοπικό 1032.
Μπήκε επιπλέον μια εντολή Αναμονή 5000 για να δώσουμε 5 δευτερόλεπτα στο σύστημα να ανοίξει το αρχείο (αλλιώς το πρόγραμμα προχωράει στην ανάγνωσή του)

κ=1
\\ με χρήση BOM (ενδεικτικού χαρακτήρα)
\\ το 0xE δίνει το σύμβολο για τα δεκαδικά - μπορεί να είναι το κόμμα ή η τελεία.
Τοπικό 1032
Κάνε ΑλλαξεΤελεία$(α$)=αλλαγη$(".",τοπικο$(0xE),α$)
Δες οκ {
Άνοιξε "αλφα.csv" για ευρεία εξαγωγή ως κ
}
Αν όχι οκ Τότε Λάθος "Δεν μπορώ να ανοίξω το αρχείο αλφα.csv"
      Τύπωσε #κ, χαρκωδ$(0xFEFF);  \\ λέγεται BOM και μαρκάρει το κείμενο ως UTF-16LE
      \\ οι αριθμοί στο κώδικα γράφονται πάντα με τελεία για δεκαδικό
      \\ στην εμφάνιση στην Τύπωσε βγαίνουν βάσει του τοπικού
      Γράψε με χαρ$(9), τοπικο$(0xE)
      Γράψε #κ, "Τιμή Α", "Τιμή Β","Αποτέλεσμα Κ"
      Γράψε #κ, 12.24, 213.23, 213.23+12.24
      Γράψε #κ, 15.24, 215.23, 215.23+15.24
      Γράψε #κ, ΑλλαξεΤελεία$("=A2+A3*2.5"),ΑλλαξεΤελεία$("=B2+B3*2.5"),ΑλλαξεΤελεία$("=C2+C3*2.5")
Κλείσε #κ
Γράψε με "",""  \\ κάνουμε επιστροφή στις τιμές κόμμα και τελεία
Σύστημα "Excel.exe "+παράθεση$(κατ$+"αλφα.csv")
Έγγραφο Excel$
Αναμονή 5000
{
      Δες οκ {
            \\ αν είναι ανοιχτό με το Excel είναι για αποκλειστική χρήση
            \\ οπότε βγαίνει λάθος η συμπλήρωση (append)
            Άνοιξε "αλφα.csv" για συμπλήρωση ως κ
            Κλείσε #κ
            Φόρτωσε.Έγγραφο Excel$, "αλφα.csv"
      }
            αν λάθος ή οχι οκ τότε αναμονή 100 : κυκλικα
      }
Σώσε.Έγγραφο Excel$, "αλφα0.csv", 0
Σημ 1 : Σύστημα "Excel.exe "+παράθεση$(κατ$+"αλφα0.csv")

Αναφορά Excel$
\\ Μετατροπή από εξαγωγή του excel στο βασικό csv με κόμμα και τελεία.
Αν τοπικο$(0xE)<>"." Τότε {
      Για ι=1 έως Εγγράφου.Παρ(Excel$) {
            καθ$=παράγραφος$(Excel$,ι)+χαρ$(9)
            Έγγραφο τελικο$
            Ενώ καθ$<>"" {
                  καθ1$=αριστερομερος$(καθ$, χαρ$(9)) : καθ$=δεξιμερος$(καθ$, χαρ$(9))
                  καθ1$=αλλαγη$(τοπικο$(0xE),".",καθ1$)
                  Αν Εγγράφου.Μήκος(τελικο$)=0 τότε {
                        τελικο$=καθ1$
                  } Αλλιώς τελικο$=","+καθ1$
            }
            καθ$=τελικο$+"," : Καθαρό τελικο$
            Ενώ καθ$<>"" {
                  καθ1$=αριστερομερος$(καθ$, ",") : καθ$=δεξιμερος$(καθ$, ",")
                  \\ βάζουμε εισαγωγικά με την Παράθεση$() αν χρειάζεται
                  Αν όχι Δεξι$(καθ1$,1) ~ "[+-1234567890"+Χαρ$(34)+"]" τότε καθ1$=Παράθεση$(καθ1$)
                  Αν Εγγράφου.Μήκος(τελικο$)=0 τότε {
                        τελικο$=καθ1$
                  } Αλλιώς τελικο$=","+καθ1$
            }

            Καταχώρηση ι Excel$=τελικο$
            Καθαρό τελικο$ \\ καθαρίζουμε το έγγραφο
      }
}
Αναφορά Excel$
Σώσε.έγγραφο Excel$, "αλφα1.csv", 0

\\ Άνοιγμα του τροποποιημένου αρχείου, με κόμμα και τελείες.
Άνοιξε "αλφα1.csv" για ευρεία εισαγωγή ως κ
      Εισαγωγή #κ, τ1$, τ2$, τ3$
      Τύπωσε τ1$, τ2$, τ3$
      Για ι=1 έως 2 {
            Εισαγωγή #κ, τ1, τ2, τ3
            Τύπωσε τ1, τ2, τ3
      }
      Γραμμή Εισαγωγής #κ, ολα$
      Σωρός ολα$ \\ μεταφέρει στην κορυφή ότι έχει η γραμμή
      Δες Οκ {
            Διάβασε τ1$, τ2$, τ3$
            Τύπωσε τ1$, τ2$, τ3$
      }
      Αν όχι Οκ τότε {
            Διάβασε τ1, τ2, τ3
            Τύπωσε τ1, τ2, τ3
      }
Κλείσε #κ