使用此过程时,我得到了一个抽象错误(仅此而已)。我在其他项目中使用此过程,这是我第一次遇到该过程。我不确定是否与输入字符串的语法有关。
procedure SplitString(const Delimiter: Char; Input: string; const Strings: TStrings);
begin
//Delimits or splits the received string, returns TStrings array
Assert(Assigned(Strings)) ;
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.StrictDelimiter := True; //needed otherwise whitespace is used to delimit
Strings.DelimitedText := Input;
end;
该应用程序调用如下:
try
LBOMPartLine := TStrings.Create;
SplitString(',','C:\DATA\Parts\PART4.PS.0,10,10',LBOMPartLine);
...
我删除了一些调试代码,这些代码突出了该过程失败的事实,无论此之前还是之后都没有。我可以不使用逗号作为分隔符吗?
最佳答案
问题在于此行:
LBOMPartLine := TStrings.Create;
TStrings
是一个抽象类,您不能创建它的实例。您必须创建一个后代实例,例如TStringList
。 documentation清楚地指出(强调):从TStrings派生一个类来存储和操作字符串列表。 TStrings包含抽象或用C ++术语而言的纯虚拟方法,因此不应直接实例化。
通常,您将
TStrings
用作函数或过程接收的参数的类型,以便可以接受任何TStrings
后代,例如TStringList
,TComboBox.Items', or
TMemo.Lines`。解决方案是创建后代的实例:
var
LBOMPartLine: TStrings; // or more clearly, TStringList
begin
LBOMPartLine := TStringList.Create;
try
SplitString(',','C:\DATA\Parts\PART4.PS.0,10,10',LBOMPartLine);
// Do whatever else
finally
LBOMPartLine.Free;
end;
end;