Arrays 帕斯卡';拆分';作用
我正在用pascal编写一个小程序,遇到了一个小问题。在其他语言中,有一个名为“split”或“explode”的函数,用于获取一个以定义的字符为标点的长字符串,并将该长字符串拆分为几个较小的字符串,然后将其分配给数组。 我的意思是,我想这样做:Arrays 帕斯卡';拆分';作用,arrays,string,delphi,split,pascal,Arrays,String,Delphi,Split,Pascal,我正在用pascal编写一个小程序,遇到了一个小问题。在其他语言中,有一个名为“split”或“explode”的函数,用于获取一个以定义的字符为标点的长字符串,并将该长字符串拆分为几个较小的字符串,然后将其分配给数组。 我的意思是,我想这样做: longstring:='Word1.Word2.Word3'); Split('.', longstring, OutPutVariable) ; { OutPutVariable[1] would be Word1} { OutPutVaria
longstring:='Word1.Word2.Word3');
Split('.', longstring, OutPutVariable) ;
{ OutPutVariable[1] would be Word1}
{ OutPutVariable[2] would be Word2}
{ OutPutVariable[3] would be Word3}
这不是真正的代码,因为pascal中不存在“split”。我认为它存在于德尔福。有人能帮我解决这个问题吗?很抱歉,如果这是一个非常简单的问题,我对使用
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;
注意:该属性是在D2006中添加的
另一种方式:
procedure SplitText(const aDelimiter,s: String; aList: TStringList);
begin
aList.LineBreak := aDelimiter;
aList.Text := s;
end;
可以使用多个字符作为分隔符。Delphi RTL已经具有所需的精确功能,可从
系统中使用。StrUtils
单元:
function SplitString(const S, Delimiters: string): TStringDynArray;
记录为:
将字符串拆分为由指定字符串分隔的不同部分
分隔符字符
SplitString将字符串拆分为由分隔符分隔的不同部分
指定的分隔符字符。S是要拆分的字符串。
分隔符是包含定义为的字符的字符串
分隔符
SplitString返回类型为的字符串数组
System.Types.TStringDynArray,其中包含
原始字符串
嗯,每个人都在这里发布他们的传统答案,我也一样 我看到已经发布了两个答案,但我不知道第四个答案(基于PChar的ExtractString)是否会在这个DUP关闭之前发布 总的来说,这是一个副本,所有的答案都可以在那里看到 现在 如果你坚持你的原始索引
{ OutPutVariable[1] would be Word1}
{ OutPutVariable[2] would be Word2}
{ OutPutVariable[3] would be Word3}
然后添加第0个字符串的存根
OutPutVariable := JclStringList().Split('.Word1.Word2.Word3','.');
或
它还提供了连接和许多其他功能
PS:4th variant是您使用Delphi标记的,因此如果您使用Delphi XE或更高版本,您可以使用,如果不是,这在这里已经实现了多次。可能是@KenWhite的重复,不是的,这个问题更多的是针对带有多个分隔符的表达式解析器。我想说这是+1的重复,类似的想法,但您的实现更好。除了它不编译,我会添加一个
ASSERT(list nil)代码>开头。请注意,DelimitedText包含对QuoteChar的处理,因此它与.net的字符串不完全匹配。Split
@GerryColl,正确。设置list.QuoteChar:=#0
将消除这种可能性,或者只使用LineBreak
过程。您可能应该补充一点,这仅在Delphi XE和更高版本中可用。@jpfollenius我实际上不知道这一点。但是XE现在已经很古老了。@jpfollenius,如果标签或问题中没有提到其他内容,我总是假设问题发布时的Delphi版本是最新版本。如果有人想要具体的答案,他应该更准确地问自己的问题。此外,这个答案可能对其他人有帮助,即使对OP没有帮助。@uwerabe当然有!我没有批评答案(事实上是投了赞成票),只是建议进行一个小的编辑。@jpfollenius对于pre-XE Delphi还有另一个功能:
{ OutPutVariable[1] would be Word1}
{ OutPutVariable[2] would be Word2}
{ OutPutVariable[3] would be Word3}
OutPutVariable := JclStringList().Split('.Word1.Word2.Word3','.');
OutPutVariable := JclStringList().Add('').Split('Word1.Word2.Word3','.', False);