Snaartypen in Delphi (Delphi voor beginners)
Afbeeldingsbron RF/Cadalpe/Getty Images
Zoals bij elke programmeertaal, is in Delphi , variabelen zijn tijdelijke aanduidingen die worden gebruikt om waarden op te slaan; ze hebben namen en gegevenstypen. Het gegevenstype van een variabele bepaalt hoe de bits die die waarden vertegenwoordigen, worden opgeslagen in het geheugen van de computer.
Als we een variabele hebben die een reeks karakters zal bevatten, kunnen we aangeven dat deze van het type is Snaar .
Delphi biedt een gezond assortiment aan stringoperators, functies en procedures. Voordat we een String-gegevenstype aan een variabele toewijzen, moeten we de vier stringtypen van Delphi grondig begrijpen.
Korte string
Simpel gezegd, Korte string is een getelde array van (ANSII) karakters, met maximaal 255 karakters in de string. De eerste byte van deze array slaat de lengte van de string op. Aangezien dit het belangrijkste stringtype was in Delphi 1 (16 bit Delphi), is de enige reden om Short String te gebruiken voor achterwaartse compatibiliteit.
Om een ShortString type variabele te maken gebruiken we:
De s variabele is een variabele met een korte tekenreeks die maximaal 256 tekens kan bevatten, het geheugen is statisch toegewezen 256 bytes. Aangezien dit meestal verspillend is - het is onwaarschijnlijk dat uw korte string zich tot de maximale lengte verspreidt - is de tweede benadering voor het gebruik van Short Strings het gebruik van subtypes van ShortString, waarvan de maximale lengte ergens tussen 0 en 255 ligt.
|__+_|
Dit creëert een variabele genaamd klein waarvan de maximale lengte 50 tekens is.
Opmerking: wanneer we een waarde toewijzen aan een Short String-variabele, wordt de string afgekapt als deze de maximale lengte voor het type overschrijdt. Wanneer we korte strings doorgeven aan de snaarmanipulatieroutine van Delphi, worden ze geconverteerd naar en van lange strings.
String / Lang / Ansi
Delphi 2 naar Object Pascal . gebracht Lange string type. Lange string (in Delphi's help AnsiString) vertegenwoordigt een dynamisch toegewezen string waarvan de maximale lengte alleen wordt beperkt door het beschikbare geheugen. Alle 32-bits Delphi-versies gebruiken standaard lange strings. Ik raad aan om zoveel mogelijk lange snaren te gebruiken.
|__+_|De s variabele kan van nul tot elk praktisch aantal tekens bevatten. De tekenreeks groeit of krimpt naarmate u er nieuwe gegevens aan toewijst.
We kunnen elke stringvariabele gebruiken als een array van karakters, het tweede karakter in s heeft de index 2. De volgende code:
|__+_|wijst toe T naar het tweede teken os the s variabel. Nu de weinige van de eerste karakters in s ziet eruit als: TTe s str... .
Laat je niet misleiden, je kunt s[0] niet gebruiken om de lengte van de string te zien, s is niet ShortString.
Referentietelling, copy-on-write
Aangezien de geheugentoewijzing door Delphi wordt gedaan, hoeven we ons geen zorgen te maken over het verzamelen van afval. Bij het werken met Long (Ansi) Strings maakt Delphi gebruik van referentietelling. Op deze manier is het kopiëren van strings eigenlijk sneller voor lange strings dan voor korte strings.
Referentie tellen, bijvoorbeeld:
Wanneer we string maken s1 variabele, en er een waarde aan toewijzen, wijst Delphi voldoende geheugen toe voor de string. Wanneer we kopiëren s1 tot s2 , Delphi kopieert de tekenreekswaarde niet in het geheugen, het verhoogt alleen het aantal referenties en wijzigt de s2 om naar dezelfde geheugenlocatie te wijzen als s1 .
Om het kopiëren te minimaliseren wanneer we strings doorgeven aan routines, gebruikt Delphi de copy-on-write techniek. Stel dat we de waarde van de moeten veranderen s2 tekenreeksvariabele; Delphi kopieert de eerste string naar een nieuwe geheugenlocatie, aangezien de wijziging alleen van invloed zou moeten zijn op s2, niet op s1, en ze verwijzen beide naar dezelfde geheugenlocatie.
Brede snaar
Brede tekenreeksen worden ook dynamisch toegewezen en beheerd, maar ze gebruiken geen referentietelling of de copy-on-write-semantiek. Brede strings bestaan uit 16-bits Unicode-tekens.
Over Unicode-tekensets
De ANSI-tekenset die door Windows wordt gebruikt, is een tekenset van één byte. Unicode slaat elk teken in de tekenset op in 2 bytes in plaats van 1. Sommige nationale talen gebruiken ideografische tekens, waarvoor meer dan de 256 tekens nodig zijn die door ANSI worden ondersteund. Met 16-bits notatie kunnen we 65.536 verschillende karakters weergeven. Het indexeren van multibyte-strings is niet betrouwbaar, omdat si] vertegenwoordigt de i-de byte (niet noodzakelijk het i-de teken) in s .
Als u brede tekens moet gebruiken, moet u een tekenreeksvariabele declareren van het type WideString en uw tekenvariabele van het type WideChar. Als u een brede tekenreeks één voor één wilt onderzoeken, moet u testen op multibite-tekens. Delphi ondersteunt geen automatische typeconversies tussen Ansi en Wide string-types.
|__+_|Null beëindigd
Een op nul of nul eindigende tekenreeks is een reeks tekens, geïndexeerd door een geheel getal dat begint bij nul. Aangezien de array geen lengte-indicator heeft, gebruikt Delphi het teken ASCII 0 (NULL; #0) om de grens van de string te markeren.
Dit betekent dat er in wezen geen verschil is tussen een null-terminated string en een array[0..NumberOfChars] van het type Char, waarbij het einde van de string wordt gemarkeerd door #0.
We gebruiken null-terminated strings in Delphi bij het aanroepen van Windows API-functies. Met Object Pascal kunnen we voorkomen dat we rommelen met pointers naar op nul gebaseerde arrays bij het verwerken van null-terminated strings met behulp van het Pchar-type. Beschouw een PChar als een verwijzing naar een op nul eindigende tekenreeks of naar de array die er een vertegenwoordigt. Kijk voor meer informatie over aanwijzers op: Wijzers in Delphi .
Bijvoorbeeld, The GetDriveType De API-functie bepaalt of een schijfstation een verwisselbare, vaste schijf, cd-rom, RAM-schijf of netwerkschijf is. De volgende procedure geeft een overzicht van alle stations en hun typen op de computer van een gebruiker. Plaats één Button en één Memo-component op een formulier en wijs een OnClick-handler van een Button toe:
|__+_|De snaren van Delphi mixen
We kunnen alle vier de verschillende soorten snaren vrij mixen, Delphi zal zijn best doen om te begrijpen wat we proberen te doen. De toewijzing s:=p, waarbij s een tekenreeksvariabele is en p een PChar-uitdrukking, kopieert een op nul eindigende tekenreeks in een lange tekenreeks.
Karaktertypes
Naast vier stringgegevenstypes heeft Delphi drie karaktertypes: Char , AnsiChar , en WideChar . Een tekenreeksconstante met lengte 1, zoals 'T', kan een tekenwaarde aangeven. Het generieke tekentype is Char, wat gelijk is aan AnsiChar. WideChar-waarden zijn 16-bits tekens die zijn gerangschikt volgens de Unicode-tekenset. De eerste 256 Unicode-tekens komen overeen met de ANSI-tekens.