TStringListでQuoteCharを出力しない方法は?

解決


タグ  2006-08-01 20:59:26  No: 22787

TStringListを用いてカンマ区切りテキストを出力する処理を作成しました。
(文字列の引用符は出力しません)
この時、Appendした文字列に半角スペースが入っているとQuoteCharが出力されてしまいます。
TSTringListで文字列引用符を出力せずにカンマ区切りテキストを出力する方法をご教授下さい。

ex.
  lstCSV := TStringList.Create;
  try
    lstCSV.Delimiter := ',';
    lstCSV.Append('aaa');
    lstCSV.Append('999');
    lstCSV.Append('1');
    lstCSV.Append(' 99');
    lstCSV.Append('99 ');
    lstCSV.Append('ああ');
    lstCSV.Append('  あ');
    ShowMessage(lstCSV.DelimitedText);
  finally
    lstCSV.Free;
  end;

実行結果「aaa,999,1," 99","99 ",ああ,  あ」

環境
  OS:Windows2000 Professional SP4
  Delphi7(Build 8.1)


Ru  2006-08-01 21:47:46  No: 22788

正式な処理は分かりませんが,
  lstCSV.QuoteChar := #32;
の一文追加で引用符の変更も一つの手段?


駄目女 川 ’ー’川  2006-08-01 21:51:52  No: 22789

みなさん駄目女    川 ’ー’川です。
私の環境では「StringReplace」という関数が追加されており、
{CSVファイル}
procedure TForm1.CreateCSVFiles;
begin
  try
    lstCSV := TStringList.Create;
    lstCSV.Delimiter := ',';
    lstCSV.Append('aaa');
    lstCSV.Append('999');
    lstCSV.Append('1');
    lstCSV.Append(' 99');
    lstCSV.Append('99 ');
    lstCSV.Append('ああ');
    lstCSV.Append('  あ');
    //ここ↓
    //:*:・。,☆゜'・:*:・。,ヽ(・∀・)人(・∀・)ノ ,。・:*:'☆,。・:*: 
    ShowMessage(StringReplace(lstCSV.DelimitedText,'"','',[rfReplaceAll]));
    //:*:・。,☆゜'・:*:・。,ヽ(・∀・)人(・∀・)ノ ,。・:*:'☆,。・:*: 
    lstCSV.SaveToFile(Edit1.Text);
  finally
    lstCSV.Free;
  end;
end;
これでいけました。


タグ  2006-08-01 22:10:03  No: 22790

Ruさん、駄目女    川 ’ー’川 さん
回答有難う御座いました。

今回の処理ではデータにダブルクォーテーションが入る事はない、
と思われるため、StringReplace系の処理で対応するようにします。

Ruさんにご提示頂いた方法は以前、試したのですが
半角スペースが前後に入ってしまうため断念した経緯があります。

また、宜しくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加