【发布时间】:2009-12-14 21:46:18
【问题描述】:
我在将字符串添加到 TStringList 时遇到问题。我搜索了其他帖子,但找不到答案。
我想要做的是向 TStringList(超过 14000 个)添加大量字符串,但在此过程中的某个地方我得到了 EAccessViolation。这是我正在使用的代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
List := TStringList.Create;
List.Duplicates := dupAccept;
end;
procedure TForm1.ButtonStartClick(Sender: TObject);
begin
List.Clear;
List.Add('125-AMPLE');
List.Add('TCUMSON');
List.Add('ATLV 4300');
List.Add('150T-15');
List.Add('TDL-08ZE');
List.Add('RT20L');
List.Add('SIN LINEA');
List.Add('TIARA');
List.Add('FL200ZK1');
List.Add('FL250ZK1');
List.Add('SIN LINEA');
List.Add('CENTAURO-70 S.P.');
List.Add('CORSADO');
{ This list continues to about 14000 strings...}
List.Add('VOSJOD 2');
List.Add('Z 125');
List.Add('ZUMY');
List.Add('NEW AGE 125');
List.Add('SIN LINEA');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(List);
end;
¿这段代码有什么问题?该列表包含重复的字符串,因此我将Duplicates 属性设置为dupAccept。我可以使用 LoadFromFile 加载列表,但我不想在我的应用程序之外有一个文本文件。
希望你能帮帮我!!!如果您需要更多信息,请告诉我。
非常感谢。非常感谢您的帮助。
【问题讨论】:
-
您有 14,000 个字符串并且“某处”有问题。你可以说得更详细点吗?总是在同一个地方吗?如果你使用不同的字符串(更短、更长、不同的顺序)怎么办?
-
您是否可能从代码中调用 ButtonStartClick,或者当您单击按钮时是否真的发生了错误?如果从代码中,您是否在 FormCreate 事件之前调用 ButtonStartClick(例如从您的构造函数中)?当您单击按钮时发生错误时:甚至调用了 FormCreate 吗?有一个 FormCreate 过程并不意味着它被分配给表单的 FormCreate 事件,也许你不小心在 objectinspector 中清除了该事件。
-
@Rob:你是对的。问题总是发生在同一行(在我发布的示例中,添加 3275 字符串时抛出异常)。当我使用如下较长的字符串时:'INSERT INTO T_ELEMENTOS (IdTablaOpciones, NombreElemento, Codigo, Columna1, Columna2) VALUES (4, ''125-AMPLE (11-0)'', 1, ''TANTA [11]' ', ''125-AMPLE [11]'');'异常发生在第 900 行左右。顺序似乎不是问题,因为我尝试了不同的字符串集。
-
@The_Fox:单击按钮时发生错误。我使用调试器确保在单击按钮之前调用了 FormCreate。
-
如果您在该行之前创建一个刹车点并查看字符串列表对象是否仍然有效并尝试跨过有问题的行怎么办。这样您就可以查看调试器中发生的情况。
标签: delphi tstringlist