ika*_*eat 1 delphi string split delimiter
当使用这个程序时,我得到一个抽象的错误(就是说它就是这样).我在其他项目中使用此程序,这是我第一次碰到它.我不确定它是否与输入字符串的语法有关.
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;
Run Code Online (Sandbox Code Playgroud)
应用程序调用如下:
try
LBOMPartLine := TStrings.Create;
SplitString(',','C:\DATA\Parts\PART4.PS.0,10,10',LBOMPartLine);
...
Run Code Online (Sandbox Code Playgroud)
我已经删除了一些调试代码,这些代码强调了程序失败的事实,之后或之前都没有.我可以不使用逗号作为分隔符吗?
Ken*_*ite 12
问题出在这一行:
LBOMPartLine := TStrings.Create;
Run Code Online (Sandbox Code Playgroud)
TStrings是一个抽象类,您无法创建它的实例.您必须创建后代的实例,例如TStringList.该文件明确指出(强调加):
从TStrings派生一个类来存储和操作字符串列表.TStrings包含抽象或C++术语中的纯虚方法,不应直接实例化.
您通常使用TStrings函数或过程接收的参数类型,以便您可以接受任何TStrings后代,例如TStringList,TComboBox.Items', orTMemo.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;
Run Code Online (Sandbox Code Playgroud)
TStrings是一个抽象类,这就是为什么你得到抽象错误.LBOMPartLine必须被声明为,TStringList而不是TStrings类的后代.
编译器警告你实例化一个具有抽象方法的类 - 我建议你不要忽略警告并尝试编写正确的代码,没有它们.
此外,类创建应做外的try/finally块:
some_class := TSomeClass.Create;
try
..
finally
some_class.Free;
end;
Run Code Online (Sandbox Code Playgroud)