Νέος

Τύποι χορδών στους Δελφούς (Δελφοί για αρχάριους)

Τύποι χορδών στους Δελφούς (Δελφοί για αρχάριους)

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

Όταν έχουμε μια μεταβλητή που θα περιέχει κάποια σειρά χαρακτήρων, μπορούμε να την δηλώσουμε ότι είναι τύπουΣειρά
Ο Delphi παρέχει μια υγιή ποικιλία χειριστών χορδών, λειτουργιών και διαδικασιών. Πριν από την εκχώρηση ενός τύπου δεδομένων String σε μια μεταβλητή, πρέπει να κατανοήσουμε πλήρως τους τέσσερις τύπους συμβολοσειρών των Δελφών.

Σύντομη συμβολοσειρά

Με απλά λόγια,Σύντομη συμβολοσειρά είναι ένας αριθμητικός πίνακας χαρακτήρων (ANSII), με έως και 255 χαρακτήρες στη συμβολοσειρά. Το πρώτο byte αυτής της συστοιχίας αποθηκεύει το μήκος της συμβολοσειράς. Δεδομένου ότι αυτός ήταν ο κύριος τύπος συμβολοσειράς στον Delphi 1 (Delphi 16 bit), ο μόνος λόγος να χρησιμοποιήσετε το Short String είναι για συμβατότητα προς τα πίσω.
Για να δημιουργήσετε μια μεταβλητή τύπου ShortString χρησιμοποιούμε:

var s: ShortString. s: = 'Προγραμματισμός των Δελφών'; // S_Length: = Ord (s0)). // που είναι το ίδιο με το μήκος (τα μήκη)

ομικρό η μεταβλητή είναι μια μεταβλητή σύντομης συμβολοσειράς ικανή να περιέχει έως και 256 χαρακτήρες, η μνήμη της είναι στατικά εκχωρημένο 256 byte. Επειδή αυτό είναι συνήθως σπατάλη - είναι απίθανο να εξαπλωθεί η σύντομη σειρά σας στο μέγιστο μήκος - η δεύτερη προσέγγιση στη χρήση Short Strings χρησιμοποιεί υποτύπους ShortString, των οποίων το μέγιστο μήκος είναι οπουδήποτε από 0 έως 255.

var ssmall: String50; ssmall: = 'Σύντομη συμβολοσειρά, μέχρι 50 χαρακτήρες';

Αυτό δημιουργεί μια μεταβλητή που ονομάζεταιssmall του οποίου το μέγιστο μήκος είναι 50 χαρακτήρες.

Σημείωση: Όταν εκχωρούμε μια τιμή σε μια μεταβλητή Short String, η συμβολοσειρά είναι περικομμένη εάν υπερβαίνει το μέγιστο μήκος για τον τύπο. Όταν περάσαμε σύντομες χορδές σε κάποια ρουτίνα χειρισμού σειράς των Δελφών, μετατρέπονται σε και από μακρά σειρά.

Γραμμή / Μεγάλη / Άνσι

Οι Δελφοί 2 έφεραν στο Object PascalLong String τύπος. Η μεγάλη συμβολοσειρά (στη βοήθεια του Delphi AnsiString) αντιπροσωπεύει μια δυναμικά κατανεμημένη συμβολοσειρά της οποίας το μέγιστο μήκος περιορίζεται μόνο από τη διαθέσιμη μνήμη. Όλες οι εκδόσεις Delphi 32-bit χρησιμοποιούν από προεπιλογή μεγάλες συμβολοσειρές. Σας συνιστώ να χρησιμοποιείτε μεγάλες χορδές όποτε μπορείτε.

var s: συμβολοσειρά. s: = 'Η σειρά s μπορεί να είναι οποιουδήποτε μεγέθους ...';

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

Μπορούμε να χρησιμοποιήσουμε οποιαδήποτε μεταβλητή συμβολοσειράς ως συστοιχία χαρακτήρων, ο δεύτερος χαρακτήρας στομικρό έχει τον δείκτη 2. Ο παρακάτω κώδικας

s2: = 'Τ'.

εκχωρείΤ στο δεύτερο χαρακτήραμικρό μεταβλητός. Τώρα οι λίγοι από τους πρώτους χαρακτήρες στομικρόμοιάζει:TTe s str ... .
Μην παραπλανάτε, δεν μπορείτε να χρησιμοποιήσετε s0 για να δείτε το μήκος της συμβολοσειράς,μικρό δεν είναι 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_'; s8: = 'Τ'; // s = 'Delphi_TGuide'.

Η τερματισμός του τερματισμού

Μια μηδενική ή μηδενική τερματισμένη συμβολοσειρά είναι μια σειρά χαρακτήρων, με ευρετηρίαση από έναν ακέραιο που αρχίζει από το μηδέν. Δεδομένου ότι ο πίνακας δεν έχει δείκτη μήκους, ο Delphi χρησιμοποιεί τον χαρακτήρα ASCII 0 (NULL; # 0) για να επισημάνει το όριο της συμβολοσειράς.
Αυτό σημαίνει ότι ουσιαστικά δεν υπάρχει διαφορά μεταξύ μιας συμβολοσειράς μηδενικού τερματισμού και μιας array0 ... 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: String4; αρχίσει Για Drive: = 'A' προς το 'Ζ' κάνω αρχίσει DriveLetter: = Drive + ': '; υπόθεση GetDriveType (PChar (Drive + ': ')) του DRIVE_REMOVABLE: Memo1.Lines.Add (DriveLetter + 'Δισκέτα Drive')? DRIVE_FIXED: Memo1.Lines.Add (DriveLetter + 'Σταθερός δίσκος'); DRIVE_REMOTE: Memo1.Lines.Add (DriveLetter + 'Δίκτυο Drive')? DRIVE_CDROM: Memo1.Lines.Add (DriveLetter + 'CD-ROM Drive'); DRIVE_RAMDISK: Memo1.Lines.Add (DriveLetter + 'Δίσκος RAM'); τέλος; τέλος; τέλος;

Ανάμειξη χορδών των Δελφών

Μπορούμε να αναμιγνύουμε ελεύθερα και τα τέσσερα διαφορετικά είδη χορδών, οι Δελφοί θα δώσουν το καλύτερο για να κατανοήσουν τι προσπαθούμε να κάνουμε. Η αντιστοίχιση s: = p, όπου s είναι μεταβλητή συμβολοσειράς και p είναι έκφραση PChar, αντιγράφει μια συμβολοσειρά μηδενικού τερματισμού σε μια μακρά συμβολοσειρά.

Τύποι χαρακτήρων

Εκτός από τους τέσσερις τύπους δεδομένων σειράς, οι Δελφοί έχουν τρεις τύπους χαρακτήρων:ΑπανθρακώνωAnsiChar, καιWideChar. Μια σταθερά συμβολοσειράς μήκους 1, όπως το 'Τ', μπορεί να υποδηλώσει μια τιμή χαρακτήρων. Ο γενικός τύπος χαρακτήρων είναι Char, ο οποίος είναι ισοδύναμος με το AnsiChar. Οι τιμές WideChar είναι χαρακτήρες 16-bit που ταξινομούνται σύμφωνα με το σύνολο χαρακτήρων Unicode. Οι πρώτοι χαρακτήρες 256 Unicode αντιστοιχούν στους χαρακτήρες ANSI.