11

3d パーツ コンポーネント (Delphi 7) を使用せずに、TQuery のコンテンツを CSV ファイルにエクスポートしたいと考えています。私の知る限り、これは Delphi 標準コンポーネントでは実現できません。

私の解決策は、コンテンツを StringList に CSV 形式で保存し、ファイルに保存することでした。

快適な解決策はありますか?

PS: JvCsvDataSet やコンポーネントを使用したくありません。質問: これは、Delphi 7 以降の標準コンポーネントでのみ実現できますか?

前もって感謝します!

4

4 に答える 4

16

もちろんできます。

CSVコンテンツを適切に出力するための作業を行うだけです(適切に引用する、埋め込まれた引用符とコンマを処理するなど)。を使用して出力を簡単に書き込み、と を適切TFileStreamに使用してデータを取得できます。TQuery.FieldsTQuery.FieldCount

ファンシーな CSV の引用と特別な処理はあなたにお任せします。これにより、簡単な部分が処理されます。

var
  Stream: TFileStream;
  i: Integer;
  OutLine: string;
  sTemp: string;
begin
  Stream := TFileStream.Create('C:\Data\YourFile.csv', fmCreate);
  try
    while not Query1.Eof do
    begin
      // You'll need to add your special handling here where OutLine is built
      OutLine := '';
      for i := 0 to Query.FieldCount - 1 do
      begin
        sTemp := Query.Fields[i].AsString;
        // Special handling to sTemp here
        OutLine := OutLine + sTemp + ',';
      end;
      // Remove final unnecessary ','
      SetLength(OutLine, Length(OutLine) - 1);
      // Write line to file
      Stream.Write(OutLine[1], Length(OutLine) * SizeOf(Char));
      // Write line ending
      Stream.Write(sLineBreak, Length(sLineBreak));
      Query1.Next;
    end;
  finally
    Stream.Free;  // Saves the file
  end;
end;
于 2011-04-15T17:18:18.000 に答える
9

元の質問は、StringListを使用した解決策を求めていました。ですから、もっとこのようなものになります。TQueryだけでなく、任意のTDataSetで機能します。

procedure WriteDataSetToCSV(DataSet: TDataSet, FileName: String);
var
  List: TStringList;
  S: String;
  I: Integer;
begin
  List := TStringList.Create;
  try
    DataSet.First;
    while not DataSet.Eof do
    begin
      S := '';
      for I := 0 to DataSet.FieldCount - 1 do
      begin
        if S > '' then
          S := S + ',';
        S := S + '"' + DataSet.Fields[I].AsString + '"';
      end;
      List.Add(S);
      DataSet.Next;
    end;
  finally
    List.SaveToFile(FileName);
    List.Free;
  end;
end;

オプションを追加して、区切り文字の種類などを変更できます。

于 2011-04-16T01:08:51.830 に答える
1

Delphi は、.csv データへの組み込みアクセスを提供しません。しかし、VCL の TXMLTransform パラダイムに従って、.csv 構造を TClientDataSet に/から変換する TCsvTransform クラス ヘルパーを作成しました。TQuery を .csv にエクスポートするという最初の質問に関しては、単純な TDataSetProvider が TQuery と TClientDataSet の間のリンクを作成します。TCsvTransform の詳細については、http: //didier.cabale.free.fr/delphi.htm#uCsvTransform を参照してください。

于 2013-01-12T13:23:43.753 に答える