在TStringList中添加超过1个分隔符

5

这是我的分隔文本:$HEHDT,10.17,T*28 $ HEHDT,10.18,T*2A 等等...

逗号是我的句子分隔符。但是,我也想使用星号作为我的分隔符。

我想要实现的输出是:

$HEHDT 10.17 T 28 $ HEHDT 10.18 T 2A

如何在Delphi中指定多个句子分隔符?这是我目前的代码。

var
  MyStringList: TStringList;
  i: Integer;
begin
  MyStringList:= TStringList.Create;

  MyStringList.Delimiter := ','
  MyStringList.DelimitedText := '$HEHDT,10.17,T*28'+#13#10 +'$HEHDT,10.18,T*2A' +#13#10;

  for i= 0 to MyStringList.Count-1 do
    ShowMessage(MyStringList[i]);

  MyStringList.Free;
end;

对于上面的代码,它只使用逗号作为分隔符。我如何包括两个分隔符,即逗号和星号?
非常感谢!=)

你的 Delphi 版本是多少,请? - menjaraz
最好使用ExtractStrings进行更强大的字符串分割。 - OnTheFly
@user539484:前提是他有适当的Delphi版本。 - menjaraz
@menjaraz,为什么?ExtractStrings可以追溯到拉美西斯时代。 - OnTheFly
@user539484:你说得对。我被误导了,我想到的是StrUtils中引入的SplitString函数。 - menjaraz
4个回答

8

0
你可以使用ReplaceString,将所有的星号替换为逗号。将你的赋值行改为以下内容:
 String.DelimitedText := ReplaceString('$HEHDT,10.17,T*28'+#13#10 +'$HEHDT,10.18,T*2A', '*',
                         ',', [rfReplaceAll]);

你上面的代码应该可以工作。

注意:我认为 DelimitedText 属性也将空格视为定界符。因此,如果你的字符串包含空格,你的代码可能无法按照你的预期行事...


3
如果你将StrictDelimiter设为True,它就不会因空格而引起任何麻烦。 - Sam M

0
  1. 简短的回答是不可以。
  2. 但是你可以使用自定义的TStringList。

TStringList只接受一个分隔符。

摘自Embarcadero RAD Studio帮助文档:

Classes.TStrings.DelimitedText

描述

将TStrings对象中的所有字符串表示为单个分隔字符串。

使用DelimitedText可以获取或设置TStrings对象中的所有字符串,以由Delimiter属性指定的字符分隔的单个字符串。


为了能够使用多个分隔符,您应该通过从TStringList类派生一个新类来“扩展”它的功能。
您可以在这里找到一个样本源代码,其中包含一个类似行为的TStringListEx类,您可以轻松地根据自己的要求进行调整。
摘录
TStringListEx = class(TStringList)
private
  FDelimiter: String;
  function GetDelimitedText: String;
  procedure SetDelimitedText(const Value: String);
published
  property Delimiter: String read FDelimiter write FDelimiter;
  property DelimitedText: String read GetDelimitedText write SetDelimitedText;
end;

通过对字符串进行预处理,将其设置为TStringList.DelimitedText属性与其他分隔符(第一个分隔符设置为TStringList.Delimeter属性)一起使用,可以实现你的目标。除了paulsm4Robert Frank在帖子中提出的解决方案外,你还可以使用正则表达式


0
你可以使用两个字符串列表,一个使用逗号,另一个使用星号作为分隔符。然后将第一个的文本属性分配给第二个的分隔文本属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接