Tipi di stringa in Delphi

Come con qualsiasi linguaggio di programmazione, in Delphi, le variabili sono segnaposto utilizzate per memorizzare valori; hanno nomi e tipi di dati. Il tipo di dati di una variabile determina come i bit che rappresentano quei valori sono memorizzati nella memoria del computer.

Quando abbiamo una variabile che conterrà una matrice di caratteri, possiamo dichiararla di tipoCorda.
Delphi offre un sano assortimento di operatori, funzioni e procedure di stringa. Prima di assegnare un tipo di dati String a una variabile, dobbiamo comprendere a fondo i quattro tipi di stringa di Delphi.

Stringa corta

In poche parole, Stringa corta è un array contato di caratteri (ANSII), con un massimo di 255 caratteri nella stringa. Il primo byte di questo array 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 è per la compatibilità con le versioni precedenti.
Per creare una variabile di tipo ShortString utilizziamo:

instagram viewer
var s: ShortString; s: = "Programmazione Delphi"; // S_Length: = Ord (s [0])); // che è uguale a Lunghezza / e


Il S è una variabile a stringa corta in grado di contenere fino a 256 caratteri, la sua memoria è allocata staticamente a 256 byte. Dato che di solito è dispendioso, è improbabile che la tua stringa corta si estenda alla massima lunghezza, in secondo luogo L'approccio all'uso di Short Strings consiste nell'utilizzare i sottotipi di ShortString, la cui lunghezza massima è compresa tra 0 e 255.

var ssmall: String [50]; ssmall: = 'Short string, fino a 50 caratteri';

Questo crea una variabile chiamata ssmall 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 brevi ad alcune routine di manipolazione delle stringhe di Delphi, vengono convertite in e dalla stringa lunga.

String / Long / Ansi

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

var s: String; s: = 'La stringa s può essere di qualsiasi dimensione ...';

Il S la variabile può contenere da zero a qualsiasi numero pratico di caratteri. La stringa cresce o si restringe quando si assegnano nuovi dati ad essa.

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

s [2]: = 'T';

cessionari T al secondo carattere del S variabile. Ora i pochi dei primi personaggi in S Assomiglia a: TTe s str ....
Non essere fuorviante, non puoi usare s [0] per vedere la lunghezza della stringa, S non è ShortString.

Conteggio dei riferimenti, copia su scrittura

Poiché l'allocazione della memoria viene eseguita da Delphi, non dobbiamo preoccuparci della garbage collection. Quando si lavora con stringhe lunghe (Ansi), Delphi utilizza il conteggio dei riferimenti. In questo modo la copia di stringhe è in realtà più veloce per stringhe lunghe che per stringhe brevi.
Conteggio dei riferimenti, ad esempio:

var s1, s2: String; s1: = 'prima stringa'; s2: = s1;

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

Per ridurre al minimo la copia quando passiamo le stringhe alle routine, Delphi utilizza la tecnica di copia su scrittura. Supponiamo di cambiare il valore di s2 stringa variabile; Delphi copia la prima stringa in una nuova posizione di memoria, poiché la modifica dovrebbe interessare solo s2, non s1, e entrambi puntano alla stessa posizione di memoria.

Stringa larga

Anche le stringhe ampie vengono allocate e gestite in modo dinamico, ma non usano il conteggio dei riferimenti o la semantica della copia su scrittura. 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 usano 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 delle stringhe multibyte non è affidabile, poiché s [i] rappresenta l'ith byte (non necessariamente l'i-esimo carattere) in S.

Se è necessario utilizzare caratteri Wide, è necessario dichiarare una variabile di stringa del tipo WideString e la variabile di carattere del tipo WideChar. Se vuoi esaminare una stringa larga un carattere alla volta, assicurati di testare i caratteri multibite. Delphi non supporta le conversioni di tipo automatiche tra i tipi di stringa Ansi e Wide.

var s: WideString; c: WideChar; s: = 'Delphi_ Guide'; s [8]: = 'T'; //s='Delphi_TGuide';

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 utilizza ASCII 0 (NULL; # 0) carattere per contrassegnare il limite della stringa.
Ciò significa che non esiste sostanzialmente alcuna differenza tra una stringa con terminazione nulla e una matrice [0..NumberOfChars] di tipo Char, in cui la fine della stringa è contrassegnata da # 0.

Usiamo stringhe con terminazione null in Delphi quando chiamiamo le funzioni dell'API di Windows. L'oggetto Pascal ci consente di evitare il pasticciare attorno ai puntatori agli array a base zero durante la gestione delle stringhe con terminazione null utilizzando il tipo PChar. Pensa a un PChar come a un puntatore a una stringa con terminazione nulla o all'array che ne rappresenta una. Per ulteriori informazioni sui puntatori, controllare:Puntatori a Delfi.

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

procedura TForm1.Button1Click (Mittente: TObject); var
Drive: Char; DriveLetter: String [4]; inizioper Unità: = "A" per 'Z' fareinizio
DriveLetter: = Drive + ': \'; Astuccio GetDriveType (PChar (Drive + ': \')) di
DRIVE_REMOVABLE: Memo1.Lines. Aggiungi (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines. Aggiungi (DriveLetter + 'Fixed Drive'); DRIVE_REMOTE: Memo1.Lines. Aggiungi (DriveLetter + 'Network Drive'); DRIVE_CDROM: Memo1.Lines. Aggiungi (DriveLetter + 'CD-ROM Drive'); DRIVE_RAMDISK: Memo1.Lines. Aggiungi (DriveLetter + 'RAM Disk'); fine; fine; fine;

Mescolando le corde di Delphi

Possiamo mescolare liberamente tutti e quattro i diversi tipi di stringhe, 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 personaggi

Oltre a quattro tipi di dati stringa, Delphi ha tre tipi di caratteri: carbonizzare, ANSIChar, eWideChar. Una costante di stringa di lunghezza 1, come 'T', può indicare un valore di carattere. Il tipo di carattere generico è Char, che equivale a 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.

instagram story viewer