在TStringList中添加多个分隔符

时间:2012-02-27 02:31:37

标签: delphi delimiter tstringlist

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

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

我想要实现的输出是:

$ HEHDT 10.17 Ť 28 $ HEHDT 10.18 Ť 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;

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

非常感谢提前! =)

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

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

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

上面的代码应该有效。

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

答案 2 :(得分:0)

  1. 简短的回答是NO。
  2. 但您可以使用自定义TStringList。

  3. TStringList只接受一个分隔符。

    Embarcadero RAD Studio帮助摘录:

      

    Classes.TStrings.DelimitedText

         

    描述

         

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

         

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


    为了能够使用多个分隔符,您应该通过从中派生新类来“扩展”TStringList类的功能。

    您可以找到here 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属性)可以实现您的目标,除了解决方案指向在 paulsm4 Robert Frank的帖子中,你也可以使用正则表达式

答案 3 :(得分:0)

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