5

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

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

我想要实现的输出是:

$HEHDT 10.17 T 28 $HEHDT 10.18 T 2A

如何在delphi中指定超过1个句子分隔符?这是我到目前为止的代码。

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;

对于上面的代码,它只使用逗号作为分隔符。如何包含 2 个分隔符,逗号和星号?

提前谢谢了!=)

4

4 回答 4

7

Delphi stringlist 非常好,可以让您“免费”解析一个分隔符上的文本。如果你想要一分隔符 - 那么你需要使用 StrUtils.SplitString:

http://docwiki.embarcadero.com/VCL/en/StrUtils.SplitString

于 2012-02-27T02:36:26.897 回答
0

您可以使用 ReplaceString,将所有星号更改为逗号。将您的分配行更改为:

 String.DelimitedText := ReplaceString('$HEHDT,10.17,T*28'+#13#10 +'$HEHDT,10.18,T*2A', '*',
                         ',', [rfReplaceAll]);

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

注意:我相信 DelimitedText 属性也将空格视为分隔符。因此,如果您的字符串有空格,您的代码可能无法按照您预期的方式运行......

于 2012-02-27T02:53:19.720 回答
0

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

于 2012-02-27T08:33:47.583 回答
0
  1. 最简洁的答案是不。
  2. 但是您可以使用自定义的 TStringList。

TStringList 接受一个且只有一个分隔符。

Embarcadero RAD Studio 帮助摘录:

类.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.Delmeter 属性)的解决方法可以实现您的目标,除了paulsm4Robert Frank 的帖子中指出的解决方案之外,您可以也使用正则表达式

于 2012-02-27T04:35:37.033 回答