我在向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;
Run Code Online (Sandbox Code Playgroud)
¿这段代码出了什么问题?该列表包含重复的字符串,因此我将Duplicates属性设置为dupAccept.我能够使用加载列表LoadFromFile,但我不希望在我的应用程序之外有一个文本文件.
我希望你能帮帮我!!!如果您需要任何进一步的信息,请告诉我.
非常感谢你.我非常感谢你的帮助.
All*_*uer 18
有关使用外部文件的建议在此处标记.但是,您的帖子表明您不想拥有外部文件.然后,我建议您将文件链接到可执行文件作为资源.您可以按照以下步骤轻松完成此操作:
将所有字符串放入名为stringdata.txt(或您选择的任何名称)的文本文件中.然后创建一个.rc文件,其中包含您选择的任何名称,并将以下内容放入其中(STRING_DATA可以是您选择的任何标识符):
STRING_DATA RCDATA "stringdata.txt"
Run Code Online (Sandbox Code Playgroud)
从.rc创建一个.res文件:
BRCC32 <name of rc>.rc
Run Code Online (Sandbox Code Playgroud)
现在从源代码中引用此文件.将以下位置放在单元中:
{$R <name of res>.res}
Run Code Online (Sandbox Code Playgroud)
从资源流加载,而不是从文件流加载:
StringData := TResourceStream.Create(HInstance, 'STRING_DATA', RT_RCDATA);
try
List.LoadFromStream(StringData);
finally
StringData.Free;
end;
Run Code Online (Sandbox Code Playgroud)
如果您执行命令行自动构建,我建议您将.rc文件保留在源代码管理下,并在构建过程中构建.res文件.这样,您还可以将stringdata.txt文件保留在源代码管理下,并且任何编辑都会自动捕获到下一个版本,而不必在每次.txt文件更改时显式构建.res文件.
| 归档时间: |
|
| 查看次数: |
3572 次 |
| 最近记录: |