文字列内の index[0] へのアクセスに関する以下のコメントを参照してください。David Hefferen と Ken White に感謝します。しかし:
コードに無限ループがあるようです:
notelength := Length(s1);
while notelength > 0 do
begin
notelength := Length(s1);
wordcount := Pos(';' , s1);
s2 := Copy(s1, 0, wordcount-1);
Memo1.Lines.Add(s2);
Delete(s1, 0, wordcount);
end;
削除 (s1, 0, 単語数); 効果なし!Delphi デバッガーで試してみてください。結果?notelength がデクリメントされることはないため、永久にループします。' 削除 (s1, 0, 単語数);' 爆発はしませんが、削除もしません。代わりにDelete(s1,1, wordcount)を使用してください。
Delphi 文字列の Index[0] には文字データが含まれていません。myString[0] をコンパイルしようとすると、コンパイラによると「アクセスできません」。
また、コードの書き方によっては、';' で終了する必要があります。または次のような文字列:
s1 := 'マイキー;だった;ここ;a'; 「;」の後の最後の文字列で無限にループします ('a')
ReportBuilder テンプレートなども使用します。Delphi 自体では MyString[0] をコンパイルすることはできませんが、コピー メソッドと削除メソッドはこのエラーから保護されています (David が説明したように)。その 'Delete(s1, 0, wordcount)' は例外をスローしませんが、削除に失敗します。したがって、RBuilder がこれ以上優れているとは思いませんし、おそらく悪くなるとは思いません。RAP の string[0] で copy() も失敗する可能性があります。
RAP はDelphi ではありません。RAP はObject Pascal に基づいてテンプレートで実行されるランタイム スクリプト環境ですが、すべてをサポートしているわけではなく、常に Delphi とまったく同じように動作するとは限りません。
ところで、ReportBuilder はバージョン 14.0X になりました。可能であればアップグレードする必要があります。RAP 環境には多くの改良が加えられています。それ以降のバージョンでは、コードが正常に機能するか、RAP からエラー メッセージが返される可能性があります。
また、RAP でデバッグするのは簡単ではありません。ただし、エラーが発生している場所の手がかりを得るために、レポートにテキスト ラベルを付け、コードの各行の後に追加します。
mylabel.caption:='statementxxx ran';
また
mylabel.caption:= myVariable.value;
など。これにより、アドホックなトレーサーが得られます。おそらく、失敗した場所や理由などを示すことができます。