Πίνακες στη VBScript

Πίνακες στη VBScript

Πίνακες στη VBScript

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

Μια μεταβλητή array, όπως κάθε άλλη μεταβλητή στη VBScript, είναι τύπου Variant. Ο υποτύπος της είναι Array και ταυτόχρονα Variant. Οι υποτύποι Array και Variant είναι οι μοναδικοί οι οποίοι είναι πάντα σε συνδυασμό μαζί (δηλαδή υπάρχει και υποτύπος Variant, ο οποίος είναι πάντα σε συνδυασμό με τον υποτύπο Array). Άρα όλοι οι πίνακες στη VBScript είναι υποτύπου “array of variant” και έτσι μπορεί να αποθηκευτούν σε αυτόυς μεταβλητές οποιουδήποτε υποτύπου. Η συνάρτηση VarType για μια μεταβλητή array επιστρέφει πάντα τη τιμή 8204 η οποία αντιστοιχεί στη λογική διάζευξη των αριθμών 8192 και 12 που αντιστοιχούν αντίστοιχα στους υποτύπους Array και Variant.

Σύνταξη: Ορισμός, Προσπέλαση και Καταχώριση Τιμών

Ο ορισμός των πινάκων γίνεται όπως και με τις μεταβλητές με τη μόνη διαφορά ότι το αναγνωσιστικό ακολουθείται από παρενθέσεις οι οποίες μπορεί να περιέχουν από 0 μέχρι 60 θετικούς ακεραίους χωρισμένους με κόμμα. Για τη περίπτωση των μονοδιάστατων πινάκων οι παρενθέσεις περιέχουν ένα θετικό ακέραιο ο οποίος δηλώνει τη μέγιστη τιμή του δείκτη, και ΟΧΙ το μεγεθος του. Αυτός ο αριθμός πρέπει να είναι κυριολεκτικό νούμερο (δηλαδή δεν επιτρέπονται μεταβλητές, σταθερές και άλλες εκφράσεις ανάμεσα στις παρενθέσεις).

Dim pinakas()
' Δήλωση χωρίς μήκος. Πρέπει να χρησιμοποιηθεί το ReDim '

Dim pinakas(5)
' Δήλωση με μήκος 6 και όχι 5 '
Dim pinakas
pinakas = Array(123, "abc", #3/8/2016#)
' Δήλωση με χρήση της συνάρτησης Array '

Για να αναφερθούμε σε μια συγκεκριμένη θέση (μεταβλητή) κάποιου πίνακα απλά γράφουμε το αναγνωριστικό του πίνακα ακολουθούμενο από το δείκτη της μεταβλητής σε παρενθέσεις

Dim pinakas(2)

pinakas(0) = "Πρώτο στοιχείο"
pinakas(1) = "2"
pinakas(2) = 3
pinakas(0) = pinakas(1) + pinakas(2)
MsgBox(pinakas(0)) ' Εμφανίζει "5" '

Πολυδιάστατοι πίνακες

Οι πίνακες στη VBScript μπορούν να είναι και πολυδιάστατοι. Η σύνταξη του ορισμού τους είναι ο ίδιος με τη μόνη διαφορά ότι αντί για ένα θετικό ακέραιο δείκτη δίνουμε μια λίστα τέτοιων ακεραίων χωρισμένους με κόμμα.

Για παράδειγμα: Dim pinakas3x4(2, 3), Dim pinakas5x5x5(4, 4, 4)

Όπως και σε πολλές άλλες γλώσσες προγραμματισμού, οι πολυδιαστατοι πίνακες είναι πολύ χρήσιμοι όταν χρησιμοποιούνται μαζί με εμφωλευμένους βρόχους επανάληψης For..Next.

Οι δεσμευμένες λέξεις ReDim και Preserve

ReDim

Με τη δεσμευμένες λέξη ReDim, μπορούμε να χειριστούμε τα array δυναμικά. Αν ορίσουμε ένα πίνακα (array) με τον πρώτο τρόπο που δείχθηκε παραπάνω (χωρίς να καθορίσουμε το μήκος του),τότε το μήκος του είναι 0. Για παράδειγμα: Dim pinakas(). Η εντολή pinakas(0) = 5 δεν έχει νόημα οποιοδήποτε νούμερο και αν βάλουμε αντί για το 0 μέσα στις παρενθέσεις, δημιουργείται λάθος και σταματάει η εκτέλεση του προγράμματος. Δεν έχουν οριστεί οι θέσεις-μεταβλητές του πίνακα. Για να γίνει αυτό πρέπει να χρησιμοποιηθεί η δεσμευμένη λέξη ReDim με τη παρακάτω σύνταξη:

ReDim pinakas(δείκτης1 [, δείκτης2, ... δείκτηςΝ]),

όπου δείκτης1, δείκτης2, δείκτηςΝ είναι οι δείκτες για κάθε διάσταση. Αν για παράδειγμα εκτελέσουμε ReDim pinakas(3), τότε ο πίνακας pinakas αποκτάει μήκος 4. Δηλαδή ορίζονται στη μνήμη 4 μεταβλητές ως θέσεις του πίνακα pinakas.

Preserve

Η δεσμευμένη λέξη Preserve χρησιμοποιείται πάντα μαζί με τη λέξη ReDim για να δηλωθεί ότι κατά τον καινούριο ορισμό του πίνακα τα ήδη υπάρχοντα δεδομένα διατηρούνται. Ακολουθεί παράδειγμα:

' Δήλωση πίνακα χωρίς μήκος και διαστάσεις '
Dim pinakas()
' Ξανά δήλωση του πίνακα με 1 διάσταση και μήκος 2 '
ReDim pinakas(1)

' Καταχώριση τιμών '
pinakas(0) = "Γεια σου"
pinakas(1) = 123

' Εμφάνιση όλων των στοιχείων του πίνακα '
For i = 0 to 1
    MsgBox("Η τιμή στη θέση " & i & " είναι: " & pinakas(i) & " και ο τύπος του είναι " & VarType(pinakas(i)))
Next

' Ξανά δήλωση του πίνακα με 1 διάσταση και μήκος 3 διατηρώντας τα στοιχεία του '
ReDim Preserve pinakas(2)
pinakas(1) = 456 ' Αλλαγή προηγούμενης τιμής '
pinakas(2) = #4/8/2016# ' Καταχώριση καινούριας τιμής '
' Εμφάνιση όλων των στοιχείων του πίνακα '
For i = 0 to 2
    MsgBox("Η τιμή στη θέση " & i & " είναι: " & pinakas(i) & " και ο τύπος του είναι " & VarType(pinakas(i)))
Next

' Ξανά δήλωση του πίνακα με 1 διάσταση και μήκος 3 '
ReDim pinakas(2)
' Εμφάνιση όλων των στοιχείων του πίνακα '
For i = 0 to 2
    MsgBox("Η τιμή στη θέση " & i & " είναι: " & pinakas(i) & " και ο τύπος του είναι " & VarType(pinakas(i)))
Next

Στο παραπάνω παράδειγμα, οι τελευταίες κλήσεις του MsgBox δείχνουν ότι οι μεταβλητές-θέσεις του πίνακα μετα την επαναδήλωσή του είναι τύπου Empty.

Στη περίπτωση των πολυδιάστατων πινάκων, όταν χρησιμοποιείται η λέξη Preserve, μπορεί να αλλάξει μόνο η τελευταία διάσταση. Δηλαδή πρέπει να δοθούν οι μέγιστοι δείκτες της κάθε διάστασης, όπως δόθηκαν όταν ορίστηκε τελευταία φορά ο πίνακας, εκτός για την τελευταία διάσταση για την οποία μπορεί να δοθεί ένας νέος δείκτης. Αν ο δείκτης αυτός είναι μικρότερος από αυτόν που δόθηκε πριν, τότε τα αντίστοιχα δεδομένα χάνονται.

Συνοπτικό παράδειγμα:

Dim pinakas()
reDim pinakas(5, 5)

'reDim preserve pinakas(7, 5) ' Συμβαίνει λάθος '
'reDim preserve pinakas(2, 5) ' Συμβαίνει λάθος '

reDim preserve pinakas(5, 9) ' Όλα τα δεδομένα διατηρούνται και προστίθονται άλλες 24 μεταβλητές '
reDim preserve pinakas(5, 3) ' Ότι δεδομένα υπήρχαν στις θέσεις (i, 4) και (i, 5) χάνονται '

reDim preserve pinakas(4, 4) ' Μπορεί να γίνει, όλα τα δεδομένα χάνονται
reDim preserve pinakas(4, 4) ' Μπορεί να γίνει, όλα τα δεδομένα χάνονται

Χρήσιμες Συναρτήσεις Πινάκων

Οι συναρτήσεις LBound και UBound είναι χρήσιμες όταν θέλουμε να ξέρουμε ποιος είναι ο ελάχιστος και μέγιστος δείκτης αντίστοιχα μιας διάστασης ενός πίνακα. Ως πρώτη παράμετρο παίρνουν πάντα μια μεταβλητή υποτύπου array και ως επιπλέον δεύτερη προαιρετική παράμετρο παίρνουν μια ακέραια παράσταση που δηλώνει τη διάσταση του πίνακα ξεκινώντας την αρίθμηση από το 1 (δηλαδή η πρώτη διάσταση αντιστοιχεί στο 1, η 2η στο 2, …). Η τιμή που επιστρέφουν είναι αντίστοιχα ο ελάχιστος και μέγιστος δείκτης της συγκεκριμένης διάστασης του συγκεκριμένου πίνακα. Αν παραληφθεί η δεύτερη παράμετρος, θεωρείται ότι είναι 1.

Επίσης υπάρχουν οι συναρτήσεις Split και Join οι οποίες κάνουν ότι λέει το όνομά τους. Η Split επιστρέφει ένα πίνακα, ενώ η Join δέχεται ένα πίνακα ως παράμετρο. Η Split δέχεται ένα κείμενο (String) ως παράμετρο, ενώ η Join επιστρέφει ένα κείμενο (String). Οι 2 συναρτήσεις αυτές είναι ακριβώς αντίθετες. Δηλαδή αν έχουμε μια μεταβλητή υποτύπου String, η εντολή str = Join(Split(str)) δίνει στη μεταβλητή str την αρχική της τιμή. Παρομοίως, arr = Split(Join(arr)).

Τέλος υπάρχει η συνάρτηση IsArray η οποία επιστρέφει μια τιμή υποτύπου Boolean. Η τιμή αυτή είναι True αν η μεταβλητή που δόθηκε ως μόνη παράμετρο σε αυτή τη συνάρτηση είναι υποτύπου Array.

Απάντηση

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.