Tipi di stringhe in Delphi (Delphi per principianti)

uomo che usa il laptop

Fonte immagine RF/Cadalpe/Getty Images





Come con qualsiasi linguaggio di programmazione, in Delfi , le variabili sono segnaposto utilizzati per memorizzare i valori; hanno nomi e tipi di dati. Il tipo di dati di una variabile determina il modo in cui i bit che rappresentano tali valori vengono archiviati nella memoria del computer.

Quando abbiamo una variabile che conterrà un array di caratteri, possiamo dichiararla di tipo Corda .
Delphi fornisce un sano assortimento di operatori di stringa, funzioni e procedure. Prima di assegnare un tipo di dati String a una variabile, è necessario comprendere a fondo i quattro tipi di stringhe di Delphi.



Corda corta

In poche parole, Corda corta è una matrice contata di caratteri (ANSII), con un massimo di 255 caratteri nella stringa. Il primo byte di questa matrice memorizza la lunghezza della stringa. Poiché questo era il tipo di stringa principale in Delphi 1 (Delphi a 16 bit), l'unico motivo per utilizzare Short String è la compatibilità con le versioni precedenti.
Per creare una variabile di tipo ShortString utilizziamo:

|_+_|


Il S variabile è una variabile di stringa corta in grado di contenere fino a 256 caratteri, la sua memoria è di 256 byte allocati staticamente. Poiché questo è solitamente uno spreco - improbabile che la tua stringa corta si diffonda alla lunghezza massima - il secondo approccio all'utilizzo di stringhe corte è l'utilizzo di sottotipi di ShortString, la cui lunghezza massima è compresa tra 0 e 255.



|_+_|

Questo crea una variabile chiamata piccolo la cui lunghezza massima è di 50 caratteri.

Nota: quando assegniamo un valore a una variabile Short String, la stringa viene troncata se supera la lunghezza massima per il tipo. Quando passiamo stringhe corte ad alcune routine di manipolazione di stringhe di Delphi, vengono convertite in e da stringhe lunghe.

Corda / Lunga / Ansi

Delphi 2 portato a Object Pascal Corda lunga genere. La stringa lunga (nell'aiuto di Delphi AnsiString) rappresenta una stringa allocata dinamicamente la cui lunghezza massima è limitata solo dalla memoria disponibile. Tutte le versioni di Delphi a 32 bit utilizzano stringhe lunghe per impostazione predefinita. Consiglio di usare stringhe lunghe ogni volta che puoi.

|_+_|

Il S variabile può contenere da zero a qualsiasi numero pratico di caratteri. La stringa cresce o si riduce man mano che le si assegnano nuovi dati.



Possiamo usare qualsiasi variabile stringa come una matrice di caratteri, il secondo carattere in S ha l'indice 2. Il codice seguente

|_+_|

assegna T al secondo carattere os il S variabile. Ora i pochi dei primi personaggi in S assomigliare: Tte s str... .
Non essere fuorviato, non puoi usare s[0] per vedere la lunghezza della stringa, S non è ShortString.



Conteggio riferimenti, copia su scrittura

Poiché l'allocazione della memoria viene eseguita da Delphi, non dobbiamo preoccuparci della raccolta dei rifiuti. Quando si lavora con stringhe lunghe (Ansi), Delphi usa il conteggio dei riferimenti. In questo modo la copia delle stringhe è effettivamente più veloce per le stringhe lunghe che per le stringhe corte.
Conteggio di riferimento, per esempio:

|_+_|

Quando creiamo una stringa s1 variabile e assegnale un valore, Delphi alloca memoria sufficiente per la stringa. Quando copiamo s1 a s2 , Delphi non copia il valore della stringa in memoria, aumenta solo il conteggio dei riferimenti e altera il s2 per puntare alla stessa posizione di memoria di s1 .



Per ridurre al minimo la copia quando passiamo le stringhe alle routine, Delphi usa la tecnica del copy-on-write. Supponiamo di dover cambiare il valore di s2 variabile stringa; Delphi copia la prima stringa in una nuova posizione di memoria, poiché la modifica dovrebbe interessare solo s2, non s1, ed entrambi puntano alla stessa posizione di memoria.

Corda larga

Anche le stringhe larghe vengono allocate e gestite dinamicamente, ma non usano il conteggio dei riferimenti o la semantica copy-on-write. Le stringhe larghe sono costituite da caratteri Unicode a 16 bit.



Informazioni sui set di caratteri Unicode

Il set di caratteri ANSI utilizzato da Windows è un set di caratteri a byte singolo. Unicode memorizza ogni carattere nel set di caratteri in 2 byte anziché 1. Alcune lingue nazionali utilizzano caratteri ideografici, che richiedono più dei 256 caratteri supportati da ANSI. Con la notazione a 16 bit possiamo rappresentare 65.536 caratteri diversi. L'indicizzazione di stringhe multibyte non è affidabile, poiché s[i] rappresenta l'i-esimo byte (non necessariamente l'i-esimo carattere) in S .

Se è necessario utilizzare caratteri Wide, è necessario dichiarare una variabile stringa di tipo WideString e la variabile carattere di tipo WideChar. Se desideri esaminare una stringa ampia un carattere alla volta, assicurati di verificare la presenza di caratteri multibit. Delphi non supporta le conversioni di tipo automatiche tra i tipi di stringhe Ansi e Wide.

|_+_|

Null terminato

Una stringa con terminazione nulla o zero è una matrice di caratteri, indicizzata da un numero intero che inizia da zero. Poiché l'array non ha un indicatore di lunghezza, Delphi usa il carattere ASCII 0 (NULL; #0) per contrassegnare il limite della stringa.
Ciò significa che non c'è essenzialmente alcuna differenza tra una stringa con terminazione null e un array[0..NumberOfChars] di tipo Char, dove la fine della stringa è contrassegnata da #0.

Usiamo stringhe con terminazione null in Delphi quando chiamiamo le funzioni API di Windows. Object Pascal ci consente di evitare di pasticciare con i puntatori a array in base zero quando si gestiscono stringhe con terminazione null utilizzando il tipo PChar. Pensa a un PChar come a un puntatore a una stringa con terminazione null o all'array che ne rappresenta uno. Per maggiori informazioni sui puntatori, controlla: Puntatori a Delfi .

Ad esempio, il GetDriveType La funzione API determina se un'unità disco è rimovibile, fissa, CD-ROM, disco RAM o unità di rete. La procedura seguente elenca tutte le unità e i relativi tipi sul computer di un utente. Posiziona un pulsante e un componente Memo su un modulo e assegna un gestore OnClick di un pulsante:

|_+_|

Mescolare le corde di Delphi

Possiamo mescolare liberamente tutti e quattro i diversi tipi di corde, Delphi darà il meglio per dare un senso a ciò che stiamo cercando di fare. L'assegnazione s:=p, dove s è una variabile stringa e p è un'espressione PChar, copia una stringa con terminazione null in una stringa lunga.

Tipi di caratteri

Oltre a quattro tipi di dati stringa, Delphi ha tre tipi di caratteri: Char , AnsiChar , e WideChar . Una costante stringa di lunghezza 1, come 'T', può denotare un valore di carattere. Il tipo di carattere generico è Char, che equivale ad AnsiChar. I valori WideChar sono caratteri a 16 bit ordinati in base al set di caratteri Unicode. I primi 256 caratteri Unicode corrispondono ai caratteri ANSI.