私はdelphi 7に取り組んでいて、文字列に取り組んでいました、これに遭遇しました
デフォルトの長さの文字列、つまり単に文字列として宣言された文字列の場合、最大サイズは常に255です。ShortStringが255文字を超えることはできません。
delphiコードでこのようなことをしなければならなかったとき(それは非常に大きなクエリ用でした)
var
sMyStringOF256characters : string;
ilength : integer;
begin
sMyStringOF256characters:='ThisStringisofLength256,ThisStringisofLength256,.....'
//length of sMyStringOF256characters is 256
end;
私はこれを取得しますエラー
[エラー] u_home.pas(38):文字列リテラルは最大255の要素を持つことができます。
でもこれを試してみると
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;
結果は
ご覧のとおり、myExtremlyLongStringの長さは8894文字です。
delphiがmyExtremlyLongStringの長さが255を超えているというエラーを出さなかったのはなぜですか?
[〜#〜] edit [〜#〜]私が使用しました
SetLength(sMyStringOF256characters,300);
しかし、それは機能しません。
delphiがmyExtremlyLongStringの長さが255を超えているというエラーを出さなかったのはなぜですか?
セクションLong String(AnsiString)のテキストに少し答えがあります。
Delphiの現在のバージョンでは、文字列型は単にAnsiStringのエイリアスです。
したがって、文字列は255文字に制限されていませんが、文字列リテラルは制限されています。つまり、255文字を超える文字列を作成できますが、255文字を超える文字列値をコードに含めることはできません。必要な場合は分割する必要があります。
sMyString:='ThisStringisofLength255'+'ThisStringisofLength255';
それを次のように分割します。
sMyStringOF256characters :=
'ThisStringis' +
'ofLength256' +
'And ManyManyManyManyManyManyManyManyManyManyManyManyMany' +
'ManyManyManyManyManyManyManyManyManyManyManyManyMany' +
'ManyManyManyManyManyManyManyManyManyManyManyManyMany' +
'ManyManyManyManyManyManyManyManyManyManyManyManyMany' +
'ManyManyManyManyManyManyManyManyManyManyManyManyMany' +
'ManyManyManyManyManyManyManyManyManyManyManyManyMany' +
'ManyManyManyManyManyManyManyManyManyManyManyManyMany' +
'ManyManyManyManyManyManyManyManyManyManyManyManyMany' +
'CharactersCharactersCharactersCharactersCharactersCharactersCharactersCharacters';
昔のDOS/Turbo Pascal時代には、「文字列」は実際には255文字に制限されていました。主な理由は、最初のバイトに文字列長が含まれており、1バイトには0〜255の値しか設定できないためです。
Delphiの最新バージョンでは、これは問題ではなくなりました。
「ShortString」は、古いDOS/Pascal文字列タイプのタイプです。
「LongString」は、長い間デフォルトの文字列型でした(現在、ほとんどの制作作業で使用しているBorland Delphi 2006を含む)。 LongStrings(別名 "AnsiStrings")は8ビット文字を保持し、使用可能なメモリによってのみ制限されます。
Delphiの最近のバージョン(Delphi 2009以降、新しいDelphi XE2を含む)はすべてデフォルトでマルチバイトUnicode "WideString"文字列になっています。 AnsiStringsのようなWideStringsも、最大長が事実上「無制限」です。
この記事では、さらに詳しく説明します。
違いは、最初のコード例では、文字列をコードの一部として配置することです-リテラル文字列。これには、許可される文字数に制限があります。
2番目のコード例では、動的に生成し、1つの大きなリテラル文字列として配置していません。
Delphiの文字列型(255までしか使用できないshortstringとは異なります)は、メモリと同じ大きさにできます。
StringBuilderクラスを使用してみることができます:
procedure TestStringBuilder;
var
I: Integer;
StringBuilder: TStringBuilder;
begin
StringBuilder := TStringBuilder.Create;
try
for I := 1 to 10 do
begin
StringBuilder.Append('a string ');
StringBuilder.Append(66); //add an integer
StringBuilder.Append(sLineBreak); //add new line
end;
OutputWriteLine('Final string builder length: ' + IntToStr(StringBuilder.Length));
finally
StringBuilder.Free;
end;
end;
Delphiで本当に長い文字列が必要な場合は、txtファイルや任意の拡張子の付いたプレーンテキストなど、他のリソースからそれをロードできます。私はそれを使用し、それは動作します。プレーンテキストの行番号を使用して、「類似」配列テーブルを作成できます。 delphiコードでは、@ arjen van der Spekや他の人が言うだけで実行できます。
私にとって、テキストがvarの形式になっているファイル-
sometext:string=
'txt...'+
'txt...'+
'txt...';
今後の編集には適していません。
長所:長いテキストを使用できます。
短所:テキストコードが開いている、誰でもそれをメモ帳などでファイルを開いて読むことができます.