[Delphi] TDataSet をカンマ区切り ASCII ファイルにエクスポートする

以下のDataSetToASCII 手続きを使ってASCIIファイルにエクスポートします。
DataSetToASCIIは、TDataSetから指定されたASCIIファイルにレコードをエクスポートします。
フィールドは指定されたデリミタ文字により区切られ、レコードは改行コードによって区切られます。
また引数 QuoteStrings が True の際には、以下の種類のフィールドは単一引用符によって囲われた形で出力されます。
最後に出力しない(したくない)フィールドは、Tag プロパティを0(デフォルト)以外に設定してください。
0以外に設定することでエクスポートの対象外となります。
unit Unit1;

interface

uses
  Db, Classes, Dialogs, SysUtils;

procedure DataSetToASCII(const ADataSet: TDataSet;
  const ASCIIFile: TFileName; const Delimiter: Char;
  const QuoteStrings: Boolean);

implementation

procedure DataSetToASCII(const ADataSet: TDataSet;
  const ASCIIFile: TFileName; const Delimiter: Char;
  const QuoteStrings: Boolean);
var
  i, LastIndex: LongInt;
  AsciiRecord: String;
begin
  with TStringList.Create, ADataSet do
  try
    LastIndex:= Pred(Fields.Count);
    First;
    while not EOF do
    begin
      AsciiRecord:= '';
      for i := 0 to LastIndex do
      begin
        if Fields.Fields[i].Tag = 0 then
        begin
          if (QuoteStrings) and
            (Fields.Fields[i].DataType
            in [ftString, ftMemo, ftFmtMemo, ftFixedChar, ftWideString]) then
          begin
            AsciiRecord := AsciiRecord + AnsiQuotedStr(Fields.Fields[i].AsString);
          end
          else
          begin
            AsciiRecord := AsciiRecord + Fields.Fields[i].AsString;
          end;
          if (i < LastIndex) then AsciiRecord:= AsciiRecord + Delimiter;
        end;
      end;
      Append(AsciiRecord);
      Next;
    end;
    try
      SaveToFile(ASCIIFile)
    except
      ShowMessage('テーブルは指定されたファイル: ' + ASCIIFile + ' にセーブできませんでした。');
    end;
    finally
    Free;
  end;
end;
end.

コメント (0件)


くろねこ研究所
https://www.blackcat.xyz/article.php/ProgramingFAQ_del0021