4

我正在用 pascal 编写一个小程序,但遇到了一个小问题。在其他语言中,有一个名为 'split' 或 'explode' 的函数来获取一个由定义的字符标点的长字符串,并将这个长字符串拆分为几个较小的字符串并将它们分配给一个数组。这就是我的意思,我想这样做:

longstring:='Word1.Word2.Word3');

Split('.', longstring, OutPutVariable) ;

{ OutPutVariable[1] would be Word1}
{ OutPutVariable[2] would be Word2}
{ OutPutVariable[3] would be Word3}

这不是真正的代码,因为帕斯卡中不存在“拆分”。我认为它存在于Delphi中。anypne 可以帮我解决这个问题吗?抱歉,如果这是一个非常简单的问题,我是编程新手

4

3 回答 3

8

执行TStringList如下操作:

procedure SplitText(aDelimiter: Char; const s: String; aList: TStringList);
begin
  aList.Delimiter := aDelimiter;
  aList.StrictDelimiter := True; // Spaces excluded from being a delimiter
  aList.DelimitedText := s;
end;

注意:该StrictDelimiter属性是在 D2006 中添加的。

另一种方式:

procedure SplitText(const aDelimiter,s: String; aList: TStringList);
begin
  aList.LineBreak := aDelimiter;
  aList.Text := s;
end;

可以使用多个字符作为分隔符。

于 2013-11-14T18:10:36.377 回答
7

Delphi RTL 已经具有您需要的精确功能,SplitString来自System.StrUtils单元:

function SplitString(const S, Delimiters: string): TStringDynArray;

记录为:

将字符串拆分为由指定分隔符分隔的不同部分。

SplitString 将字符串拆分为由指定分隔符分隔的不同部分。S 是要拆分的字符串。Delimiters 是包含定义为分隔符的字符的字符串。

SplitString 返回 System.Types.TStringDynArray 类型的字符串数组,其中包含原始字符串的拆分部分。

于 2013-11-14T20:40:58.533 回答
1

好吧,每个人都在这里发布他们的传统答案,我也会这样做。

我看到已经发布了 2 个答案,但我不知道第四个答案(基于 PChar 的 ExtractStrings)是否会在此骗局关闭之前。

总体而言,这是基于分隔符将字符串拆分为字符串数组的副本,所有答案都可以在那里看到。

http://jcl.sf.net http://wiki.delphi-jedi.org/wiki/JCL_Help:IJclStringList

var OutPutVariable: iJclStringList; 

OutPutVariable := JclStringList().Split('Word1.Word2.Word3','.');

现在

{ OutPutVariable[0] would be 'Word1'}
{ OutPutVariable[1] would be 'Word2'}
{ OutPutVariable[2] would be 'Word3'}

如果你坚持你的原始索引

{ OutPutVariable[1] would be Word1}
{ OutPutVariable[2] would be Word2}
{ OutPutVariable[3] would be Word3}

然后添加一个存根第 0 个字符串

OutPutVariable := JclStringList().Split('.Word1.Word2.Word3','.');

或者

OutPutVariable := JclStringList().Add('').Split('Word1.Word2.Word3','.', False);

它还提供了 Join 和许多其他功能。

PS:第 4 个变体是http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.ExtractStrings

于 2013-11-15T09:59:31.280 回答