2016-09-23 5 views
0

TStringListを入力し、カンマ区切りの引用結果を取得します。Delphi XE7 TString.DelimitedText

私が読んだことによると、可能ですが、カンマ区切りの結果が得られます。引用符はありません。私は重複を削除することはできません。

procedure TForm5.BitBtn1Click(Sender: TObject); 
var 
    sl : TStringList; 
    s : string; 
begin 
    sl := TStringList.Create; 
    try 
    sl.Delimiter := ','; 
    sl.QuoteChar := '"'; 
    sl.Duplicates := dupIgnore; 
    //sl.DelimitedText := '"1","2","3"'; 
    sl.DelimitedText := '1,2,3'; 
    sl.Add('a'); 
    sl.Add('2'); 
    s := sl.DelimitedText; 
    ShowMessage(s); 
    finally 
    sl.Free; 
    end; 
end; 

私は1,2,3,a,2としてvar sセットを取得しておくが、私が代わりに"1","2","3","a"を期待しています。

+0

をあなたはXE7を使用しています。どちらですか?タグ付けとテキストがどちらも正しいことを確認してください。 –

+0

タグを変更しました – Gerhard

答えて

0

この試してください:あなたはこのXEをタグ付けされたが、状態はその

procedure TForm1.FormCreate(Sender: TObject); 
var 
    sl : TStringList; 
    s : string; 
begin 
    sl := TStringList.Create; 
    try 
    sl.Delimiter := ','; 
    sl.QuoteChar := #0; // default = '"' 
    sl.Duplicates := dupIgnore; 
    sl.DelimitedText := '"1","2","3"'; 
    sl.Add('a'); 
    sl.Add('"2"'); 
    s := sl.DelimitedText; 
    ShowMessage(s); 
    finally 
    sl.Free; 
    end; 
end; 
+0

ありがとうございましたこれは私が必要としているように正確に動作し、slacked:@ trueの@sertac提案を追加しても重複を削除します – Gerhard

1

TStrings.DelimitedTextプロパティのゲッターは、それが含まれている場合QuoteCharのみに文字列をラップし、次のいずれか

  1. #0 null文字。
  2. QuoteChar文字
  3. Delimiter文字
  4. TStrings.StrictDelimitersは、#1..#32、包括的な間の任意のASCII空白/制御文字Falseの場合。

あなたは文字列は常に引用符で囲むことにしたい場合は、手動でそれらを引用する必要があります、例えば:

procedure TForm5.BitBtn1Click(Sender: TObject); 
var 
    sl : TStringList; 
    s, tmp : string; 
    i: Integer; 
begin 
    sl := TStringList.Create; 
    try 
    sl.Delimiter := ','; 
    sl.QuoteChar := '"'; 
    sl.Duplicates := dupIgnore; 

    //sl.DelimitedText := '"1","2","3"'; 
    sl.DelimitedText := '1,2,3'; 

    sl.Add('a'); 
    sl.Add('2'); 

    //s := sl.DelimitedText; 
    s := ''; 
    for I := 0 to sl.Count-1 do 
     S := S + AnsiQuotedStr(sl[I], sl.QuoteChar) + sl.Delimiter; 
    Delete(S, Length(S), 1); 

    ShowMessage(s); 
    finally 
    sl.Free; 
    end; 
end; 
+0

さらに、dupIgnoreはソート済みリストに対してのみ機能します。 –

関連する問題