comment peut-delphi 'string' littéraux être plus de 255?
im travaillant sur delphi 7 et je travaillais sur une des chaînes, je suis tombé sur ce
Pour une chaîne de longueur par défaut, qui est, a déclaré simplement comme une chaîne de caractères, la taille maximum est toujours 255. Un ShortString n'est jamais permis d'atteindre plus de 255 caractères.
sur delphi chaînes
une fois que j'avais à faire quelque chose comme ceci dans mon code delphi (qui a été, pour une très grande requête)
var
sMyStringOF256characters : string;
ilength : integer;
begin
sMyStringOF256characters:='ThisStringisofLength256,ThisStringisofLength256,.....'
//length of sMyStringOF256characters is 256
end;
- je obtenir ce erreur
[Erreur] u_home.pas(38): les littéraux de Chaîne peut avoir au plus 255 éléments.
mais quand j'ai essayer cette
var
iCounter : integer;
myExtremlyLongString : string;
begin
myExtremlyLongString:='';
Label1.Caption:='';
for iCounter:=0 to 2500 do
begin
myExtremlyLongString:=myExtremlyLongString+inttostr(iCounter);
Label1.Caption:=myExtremlyLongString;
end;
Label2.Caption:=inttostr(length(myExtremlyLongString));
end;
et le résultat est
Comme vous pouvez le voir sur la longueur de myExtremlyLongString est 8894 caractères.
pourquoi ne pas delphi donner aucune erreur en disant que la longueur est au-delà de 255 pour myExtremlyLongString?
MODIFIER
j'ai utilisé
SetLength(sMyStringOF256characters,300);
mais il ne marche pas.
- Peut-être vous êtes juste en train de lire mal de docs. BTW, c'est vraiment pas clair qu'entendez-vous par "attribuée de façon dynamique", par opposition à ... quoi?
- sens au cours de l'exécution au cours d'une boucle peut être strVal:=mystring, comme une boucle de la valeur de votre affectation à la variable de chaîne
- ah, scratch "dynamique", puis, son sujet de cession vs déclaration. Ce que vous citez ci-dessus est sur les déclarations, plus précisément, à propos de limitation de compilateur sur le caractère littéraux. Il a été connecté à Turbo Pascal chaînes historiques signifie seulement.
- Je suppose qu'ils ne retirez pas cette limitation seulement parce qu'il n'y a aucune raison pratique pour avoir de la chaîne littérale est plus que de 70 caractères... Interne (pour le compilateur) tels littérale est équivalent à
array [0..N] of Char
. Espérons que c'est plus clair maintenant. - oui, c'est maintenant
Vous devez vous connecter pour publier un commentaire.
Vous avez votre réponse un peu vers le bas dans le texte de la section Chaîne Longue (AnsiString).
Si la chaîne n'est pas limité à 255 caractères, mais un littéral de chaîne est. Cela signifie que vous pouvez construire une chaîne de plus de 255 caractères, mais vous ne pouvez pas avoir une chaîne de valeur dans le code de plus de 255 caractères. Vous avez besoin de partager si vous le voulez.
Divisé en:
De retour dans le vieux-DOS/Turbo Pascal jours, "strings" ont en effet limité à 255 caractères. En grande partie parce que le 1er octet contenu de la longueur de la chaîne, et un octet ne peut avoir une valeur entre 0 et 255.
Ce n'est plus un problème dans les versions contemporaines de Delphes.
"ShortString" est le type de la vieille DOS/Pascal type de chaîne.
"LongString" a été le type de chaîne par défaut pour un long moment (y compris le Borland Delphi 2006 que j'utilise actuellement pour la plupart des travaux de production). LongStrings (aka "AnsiStrings") détiennent les caractères 8 bits, et n'est limité que par la mémoire disponible.
Dernières versions de Delphi (Delphi 2009 et supérieur, y compris les nouvelles de Delphi XE2) tous maintenant par défaut multi-octets Unicode "WideString" les chaînes. WideStrings, comme AnsiStrings, sont aussi efficacement "illimité" longueur maximale.
Cet article explique plus en détail:
http://delphi.about.com/od/beginners/l/aa071800a.htm
La différence est que dans votre premier exemple de code, vous mettez la chaîne en tant que partie de votre code - chaîne littérale. Qui a une limitation du nombre de caractères, elle permettra à.
Dans votre deuxième exemple de code, vous générez de manière dynamique et de ne pas le mettre comme une chaîne littérale.
Type de chaîne en Delphi (à la différence de shortstring qui ne peuvent être jusqu'à 255) peut être aussi grand que votre mémoire.
Vous pouvez essayer d'utiliser la classe StringBuilder:
Si vous avez besoin vraiment longue chaîne de caractères en Delphi, vous pouvez le charger à partir d'autres ressources comme l'un des fichiers txt ou juste du texte brut avec n'importe quelle extension. Im en utilisant cela et cela fonctionne. Vous pouvez créer des "comme un" tableau de tables à l'aide de texte brut numéros de lignes. Dans le code delphi, vous pouvez faire comme @arjen van der Spek et d'autres disent seulement.
Pour moi, des fichiers de texte var formaté -
sometext:string=
'txt...'+
'txt...'+
'txt...';
sont mauvais pour l'avenir de l'édition.
avantages: vous pouvez utiliser n'importe quel texte long.
contre: code texte est ouvert, n'importe qui peut lire de l'ouverture du fichier dans le bloc-notes, etc.