请参阅下面有关在字符串中访问 index[0] 的评论,感谢 David Heffernen 和 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, wordcount);' 不会炸毁,但也不会删除。请改用Delete(s1,1, wordcount)。
Delphi 字符串中的 Index[0] 不包含您的字符数据 - 如果您尝试编译 myString[0],根据编译器,它是“不可访问的”;
另外:你的代码的编写方式,你必须以';'结束 或这样的字符串:
s1 := 'mikey;was;here;a'; 将在 ';' 之后的最后一个字符串上无限循环 ('一种')
我还使用 ReportBuilder 模板等:在 Delphi 本身中,您将无法编译 MyString[0],但复制和删除方法不受此错误的影响,(正如 David 解释的那样)但是它出现在我在调试器中看到的内容中'Delete(s1, 0, wordcount)' 不会抛出异常但无法删除。所以我不认为 RBuilder 会更好,甚至可能更糟 - copy() 也可能在 RAP 中的 string[0] 上失败。
RAP不是Delphi - 它是基于 Object Pascal 在您的模板中运行的运行时脚本环境,但它并不支持所有内容,您不能总是期望它的行为与 Delphi 完全一样。
顺便说一句 - ReportBuilder 现在升级到 14.0X 版 - 如果可能,您应该升级 - RAP 环境有很多改进。在以后的版本中,您的代码可能可以正常工作,或者您会从 RAP 收到错误消息。
另外:如果您想在 RAP 中进行调试,这并不容易。但是为了给你一个关于错误可能发生在哪里的线索,在你的报告上放一个文本标签,在你的代码的每一行之后添加
mylabel.caption:='statementxxx ran';
或者
mylabel.caption:= myVariable.value;
等等,这会给你一个临时的跟踪器——也许会告诉你失败的地方/原因,等等。