string - 拆分字符串时出现抽象错误

标签 string delphi 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;


该应用程序调用如下:

      try
        LBOMPartLine := TStrings.Create;
        SplitString(',','C:\DATA\Parts\PART4.PS.0,10,10',LBOMPartLine);
      ...


我删除了一些调试代码,这些代码突出了该过程失败的事实,无论此之前还是之后都没有。我可以不使用逗号作为分隔符吗?

最佳答案

问题在于此行:

LBOMPartLine := TStrings.Create;


TStrings是一个抽象类,您不能创建它的实例。您必须创建一个后代实例,例如TStringListdocumentation清楚地指出(强调):


从TStrings派生一个类来存储和操作字符串列表。 TStrings包含抽象或用C ++术语而言的纯虚拟方法,因此不应直接实例化。


通常,您将TStrings用作函数或过程接收的参数的类型,以便可以接受任何TStrings后代,例如TStringListTComboBox.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;

关于string - 拆分字符串时出现抽象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18669014/

相关文章:

java - 如何将字符串拆分为 ArrayList?

split - Flutter:使用 TapGestureRecognizer 更改 TextSpan 的文本样式

javascript - 使用纯javascript将一个字符串分成两个

delphi - TFrame 内的事件处理程序?

multithreading - Delphi - ShowMessage 或 MessageDlg 时应用程序挂起

delphi - Firemonkey控件不绘制

Java - 分割字符串以获取十进制数

string - 如何快速创建包含大写字母的单词列表?

列值报告字符串数组 C

objective-c - 使用 Objective C 从文件中读取字符串