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;

上記のコードでは、カンマのみを区切り文字として使用します。コンマとアスタリスクの両方の 2 つの区切り記号を含めるにはどうすればよいですか?

よろしくお願いします!=)

4

4 に答える 4

7

Delphi文字列リストは、1つの区切り文字で「無料」でテキストを解析する機能を提供するのに十分優れています。区切り文字のセットが必要な場合は、StrUtils.SplitStringを使用する必要があります。

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

于 2012-02-27T02:36:26.897 に答える
0

2つの文字列リストを使用できます。1つはコンマを使用し、もう1つは区切り文字としてアスタリスクを使用します。次に、最初のテキストプロパティを2番目の区切りテキストプロパティに割り当てます。

于 2012-02-27T08:33:47.583 に答える
0
  1. 短い答えはノーです。
  2. ただし、カスタム TStringList を使用できます。

TStringList は、Delimiter を 1 つだけ受け入れます。

Embarcadero RAD Studio ヘルプからの抜粋:

Classes.TStrings.DelimitedText

説明

TStrings オブジェクト内のすべての文字列を1 つの 区切り文字列として表します。

DelimitedText を使用して、TStrings オブジェクト内のすべての文字列を、Delimiter プロパティで指定された文字で区切られた 1 つの文字列として取得または設定します。


複数のDelimitersを使用できるようにするには、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の投稿で指摘された解決策とは別に、次のことができます。正規表現も使用してください。

于 2012-02-27T04:35:37.033 に答える
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 に答える