Όπως με οποιαδήποτε γλώσσα προγραμματισμού, στο Δελφοί, οι μεταβλητές είναι σύμβολα κράτησης θέσης που χρησιμοποιούνται για την αποθήκευση τιμών. έχουν ονόματα και τύπους δεδομένων. Ο τύπος δεδομένων μιας μεταβλητής καθορίζει τον τρόπο αποθήκευσης των μπιτς που αντιπροσωπεύουν αυτές τις τιμές στη μνήμη του υπολογιστή.
Όταν έχουμε μια μεταβλητή που θα περιέχει κάποια σειρά χαρακτήρων, μπορούμε να την δηλώσουμε ότι είναι τύπουΣειρά.
Ο Delphi παρέχει μια υγιή ποικιλία χειριστών χορδών, λειτουργιών και διαδικασιών. Πριν από την εκχώρηση ενός τύπου δεδομένων String σε μια μεταβλητή, πρέπει να κατανοήσουμε πλήρως τους τέσσερις τύπους συμβολοσειρών των Δελφών.
Σύντομη συμβολοσειρά
Με απλά λόγια, Σύντομη συμβολοσειρά είναι ένας αριθμητικός πίνακας χαρακτήρων (ANSII), με έως και 255 χαρακτήρες στη συμβολοσειρά. Το πρώτο byte αυτής της συστοιχίας αποθηκεύει το μήκος της συμβολοσειράς. Δεδομένου ότι αυτός ήταν ο κύριος τύπος συμβολοσειράς στον Delphi 1 (Delphi 16 bit), ο μόνος λόγος να χρησιμοποιήσετε το Short String είναι για συμβατότητα προς τα πίσω.
Για να δημιουργήσετε μια μεταβλητή τύπου ShortString χρησιμοποιούμε:
var s: ShortString. s: = 'Προγραμματισμός των Δελφών'; // S_Length: = Ord (s [0])). // που είναι το ίδιο με το μήκος (τα μήκη)
ο μικρό η μεταβλητή είναι μια μεταβλητή σύντομης συμβολοσειράς ικανή να περιέχει έως και 256 χαρακτήρες, η μνήμη της είναι στατικά εκχωρημένο 256 byte. Δεδομένου ότι αυτό είναι συνήθως σπατάλη - είναι απίθανο ότι σύντομη σειρά σας θα εξαπλωθεί στο μέγιστο μήκος - δευτερόλεπτο η προσέγγιση στη χρήση βραχέων γραμμών χρησιμοποιεί υποτύπους ShortString, των οποίων το μέγιστο μήκος είναι οπουδήποτε από 0 έως 255.
var ssmall: Η συμβολοσειρά [50]; ssmall: = 'Σύντομη συμβολοσειρά, μέχρι 50 χαρακτήρες';
Αυτό δημιουργεί μια μεταβλητή που ονομάζεται ssmall του οποίου το μέγιστο μήκος είναι 50 χαρακτήρες.
Σημείωση: Όταν εκχωρούμε μια τιμή σε μια μεταβλητή Short String, η συμβολοσειρά είναι περικομμένη εάν υπερβαίνει το μέγιστο μήκος για τον τύπο. Όταν περάσαμε σύντομες χορδές σε κάποια ρουτίνα χειρισμού σειράς των Δελφών, μετατρέπονται σε και από μακρά σειρά.
Γραμμή / Μεγάλη / Άνσι
Οι Δελφοί 2 έφεραν στο Object Pascal Long String τύπος. Η μεγάλη συμβολοσειρά (στη βοήθεια του Delphi AnsiString) αντιπροσωπεύει μια δυναμικά κατανεμημένη συμβολοσειρά της οποίας το μέγιστο μήκος περιορίζεται μόνο από τη διαθέσιμη μνήμη. Όλες οι εκδόσεις Delphi 32-bit χρησιμοποιούν από προεπιλογή μεγάλες συμβολοσειρές. Σας συνιστώ να χρησιμοποιείτε μεγάλες χορδές όποτε μπορείτε.
var s: συμβολοσειρά. s: = 'Η σειρά s μπορεί να είναι οποιουδήποτε μεγέθους ...';
ο μικρό μεταβλητή μπορεί να κρατήσει από το μηδέν σε οποιοδήποτε πρακτικό αριθμό χαρακτήρων. Η συμβολοσειρά αναπτύσσεται ή συρρικνώνεται καθώς εκχωρείτε νέα δεδομένα σε αυτήν.
Μπορούμε να χρησιμοποιήσουμε οποιαδήποτε μεταβλητή συμβολοσειράς ως συστοιχία χαρακτήρων, ο δεύτερος χαρακτήρας στο μικρό έχει το δείκτη 2. Ο παρακάτω κώδικας
s [2]: = 'T'.
εκχωρεί Τ στο δεύτερο χαρακτήρα μικρό μεταβλητός. Τώρα οι λίγοι από τους πρώτους χαρακτήρες στο μικρό μοιάζει: TTe s str ....
Μην παραπλανάτε, δεν μπορείτε να χρησιμοποιήσετε s [0] για να δείτε το μήκος της συμβολοσειράς, μικρό δεν είναι ShortString.
Καταμέτρηση αναφοράς, copy-on-write
Δεδομένου ότι η κατανομή της μνήμης γίνεται από τους Δελφούς, δεν χρειάζεται να ανησυχείτε για τη συλλογή απορριμμάτων. Όταν εργάζεστε με τους Long (Ansi) Strings, οι Δελφοί χρησιμοποιούν την μέτρηση των αναφορών. Με αυτόν τον τρόπο, η αντιγραφή κορδονιών είναι στην πραγματικότητα ταχύτερη για τις μεγάλες χορδές παρά για τις σύντομες χορδές.
Καταμέτρηση αναφοράς, για παράδειγμα:
var s1, s2: συμβολοσειρά. s1: = 'πρώτη σειρά'. s2: = s1.
Όταν δημιουργούμε συμβολοσειρά s1 μεταβλητή και να αποδώσει κάποια αξία σε αυτήν, ο Delphi διαθέτει αρκετή μνήμη για τη συμβολοσειρά. Όταν αντιγράφετε s1 προς το s2, Ο Delphi δεν αντιγράφει την τιμή συμβολοσειράς στη μνήμη, αυξάνει μόνο τον αριθμό αναφοράς και αλλάζει το s2 για να δείξετε την ίδια θέση μνήμης με s1.
Για να ελαχιστοποιήσουμε την αντιγραφή όταν μεταφέρουμε τις συμβολοσειρές στις ρουτίνες, οι Δελφοί χρησιμοποιούν τεχνική copy-on-write. Υποθέστε ότι πρέπει να αλλάξουμε την αξία του s2 μεταβλητή συμβολοσειράς Ο Delphi αντιγράφει την πρώτη συμβολοσειρά σε μια νέα θέση μνήμης, δεδομένου ότι η αλλαγή θα πρέπει να επηρεάζει μόνο s2, όχι s1 και και οι δύο δείχνουν στην ίδια θέση μνήμης.
Ευρεία σειρά
Οι μεγάλες χορδές είναι επίσης δυναμικά κατανεμημένες και διαχειριζόμενες, αλλά δεν χρησιμοποιούν την καταμέτρηση των αναφορών ή τη σημασιολογία αντιγραφής-εγγραφής. Οι μεγάλες χορδές αποτελούνται από χαρακτήρες Unicode 16 bit.
Σχετικά με τα σύνολα χαρακτήρων Unicode
Το σύνολο χαρακτήρων ANSI που χρησιμοποιείται από τα Windows είναι ένα σετ χαρακτήρων ενός βήματος. Το Unicode αποθηκεύει κάθε χαρακτήρα στο σύνολο χαρακτήρων σε 2 byte αντί για 1. Ορισμένες εθνικές γλώσσες χρησιμοποιούν ιδεογραφικούς χαρακτήρες, οι οποίοι απαιτούν περισσότερους από τους 256 χαρακτήρες που υποστηρίζονται από το ANSI. Με συμβολισμό 16 bit μπορούμε να εκπροσωπήσουμε 65.536 διαφορετικούς χαρακτήρες. Η ευρετηρίαση των συμβολοσειρών πολλαπλών αρχείων δεν είναι αξιόπιστη, δεδομένου ότι σι] αντιπροσωπεύει το i-byte (όχι απαραίτητα τον i-th χαρακτήρα) στο μικρό.
Εάν πρέπει να χρησιμοποιήσετε ευρείες χαρακτήρες, θα πρέπει να δηλώσετε μια μεταβλητή συμβολοσειρών τύπου WideString και τη μεταβλητή χαρακτήρων του τύπου WideChar. Εάν θέλετε να εξετάσετε ένα ευρύ χορδές ένα χαρακτήρα κάθε φορά, βεβαιωθείτε ότι έχετε δοκιμάσει για χαρακτήρες πολλαπλών χαρακτήρων. Ο Delphi δεν υποστηρίζει αυτόματες μετατροπές τύπου μεταξύ τύπων Ansi και Wide string.
var s: WideString. c: WideChar. s: = 'Οδηγός Delphi_'; s [8]: = 'Τ'. //s='Delphi_TGuide';
Η τερματισμός του τερματισμού
Μια μηδενική ή μηδενική τερματισμένη συμβολοσειρά είναι μια συστοιχία χαρακτήρων, με ευρετηρίαση από έναν ακέραιο που αρχίζει από το μηδέν. Δεδομένου ότι ο πίνακας δεν έχει δείκτη μήκους, ο Delphi χρησιμοποιεί το ASCII 0 (NULL; # 0) για να επισημάνετε το όριο της συμβολοσειράς.
Αυτό σημαίνει ότι ουσιαστικά δεν υπάρχει διαφορά μεταξύ μιας συμβολοσειράς μηδενικού τερματισμού και μιας σειράς [0..NumberOfChars] τύπου Char, όπου το τέλος της συμβολοσειράς επισημαίνεται με # 0.
Χρησιμοποιούμε συμβολοσειρές τύπου null-terminated στους Delphi όταν καλούμε λειτουργίες API των Windows. Το Object Pascal σάς επιτρέπει να αποφύγουμε την ανατροπή με δείκτες σε συστοιχίες που βασίζονται σε μηδέν όταν χειρίζεστε συμβολοσειρές με μηδενικό τερματισμό χρησιμοποιώντας τον τύπο PChar. Σκεφτείτε ότι ένα PChar είναι ένας δείκτης σε μια συμβολοσειρά με μηδενικό τερματισμό ή στον πίνακα που αντιπροσωπεύει ένα. Για περισσότερες πληροφορίες σχετικά με τους δείκτες, ελέγξτε:Δείκτες στους Δελφούς.
Για παράδειγμα, το GetDriveType Η λειτουργία API καθορίζει αν μια μονάδα δίσκου είναι αφαιρούμενη, σταθερή, CD-ROM, RAM ή μονάδα δικτύου. Η ακόλουθη διαδικασία παραθέτει όλες τις μονάδες και τους τύπους τους σε έναν υπολογιστή χρηστών. Τοποθετήστε ένα κουμπί και ένα στοιχείο Memo σε μια φόρμα και ορίστε ένα χειριστήριο OnClick ενός κουμπιού:
διαδικασία TForm1.Button1Κλικ (αποστολέας: TObject); var Drive: Char; DriveLetter: Σειρά [4]; ξεκινήσειΓια Drive: = 'A' προς το 'Ζ' κάνωξεκινήσει DriveLetter: = Drive + ': \'; υπόθεση GetDriveType (PChar (Drive + ': \')) του DRIVE_REMOVABLE: Memo1.Lines. Προσθέστε (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines. Προσθέστε (DriveLetter + 'Σταθερή μονάδα'). DRIVE_REMOTE: Memo1.Lines. Προσθέστε (DriveLetter + 'Drive δικτύου')? DRIVE_CDROM: Memo1.Lines. Προσθέστε (μονάδα δίσκου CD-ROM DriveLetter +); DRIVE_RAMDISK: Memo1.Lines. Προσθήκη (DriveLetter + 'Δίσκος RAM'); τέλος; τέλος; τέλος;
Ανάμειξη χορδών των Δελφών
Μπορούμε να αναμιγνύουμε ελεύθερα και τα τέσσερα διαφορετικά είδη χορδών, οι Δελφοί θα δώσουν το καλύτερο για να κατανοήσουν τι προσπαθούμε να κάνουμε. Η αντιστοίχιση s: = p, όπου s είναι μεταβλητή συμβολοσειράς και p είναι έκφραση PChar, αντιγράφει μια συμβολοσειρά μηδενικού τερματισμού σε μια μακρά συμβολοσειρά.
Τύποι χαρακτήρων
Εκτός από τους τέσσερις τύπους δεδομένων σειράς, οι Δελφοί έχουν τρεις τύπους χαρακτήρων: Απανθρακώνω, AnsiChar, καιWideChar. Μια σταθερά συμβολοσειράς μήκους 1, όπως το 'Τ', μπορεί να υποδηλώσει μια τιμή χαρακτήρων. Ο γενικός τύπος χαρακτήρων είναι Char, ο οποίος είναι ισοδύναμος με το AnsiChar. Οι τιμές WideChar είναι χαρακτήρες 16-bit που ταξινομούνται σύμφωνα με το σύνολο χαρακτήρων Unicode. Οι πρώτοι χαρακτήρες 256 Unicode αντιστοιχούν στους χαρακτήρες ANSI.