CSVクラス

DelphiでCSVを扱うクラス。CSVファイルの入出力・ソートと基本機能のみ実装。
行・列のインデックスは0始まり。扱える文字コードはShift_JISのみ。
Delphi2009で動作。他のバージョンは持ってないので動作未確認。

ダウンロードは → CSVクラス (CSVClass.pas)


使用例(関東の人口・面積のファイルを読み込み、人口の一番少ない県、面積の一番多い県を取得する。)

kanto.csv
"都道府県","人口","面積"
"東京都",12988797,2187.65
"神奈川県",9005176,2415.85
"埼玉県",7170362,3797.25
"千葉県",6183743,5156.6
"群馬県",2006903,6363.16
"栃木県",2010732,6408.28
"茨城県",2967404,6095.69

var
  CSV: TCSV;
begin
  CSV := TCSV.Create;
  try
    CSV.LoadFromFile('kanto.csv');
    CSV.HeaderRows := 1;
    CSV.Sort(1, soAscending, dtNumeric);
    ShowMessage('関東で一番人口の少ない県は'+CSV.Cells[1, 0]);
    CSV.Sort(2, soDescending, dtNumeric);
    ShowMessage('関東で一番面積の大きい県は'+CSV.Cells[1, 0]);
  finally
    CSV.Free;
  end;
end;

更新履歴

2011/04/21 TRowsとTColsにAssignメソッドを追加。
           CSV読み込み時、バッファの最後が区切り文字だった場合に、値を正しく処理しないバグを修正。
2010/08/01 作成。

仕様

TCSV: TPersistentを継承 - CSVを操作するクラス(現在Shift_JISのみ対応)
メソッド
  LoadFromFile - ファイルからCSVを読み込む
    パラメータ
      FileName: TFileName - ファイル名
  LoadFromStram - ストリームからCSVを読み込む
    パラメータ
      Stream: TSream - ストリーム
  SaveFromFile - ファイルへCSVを書き込む
    パラメータ
      FileName: TFileName - ファイル名
  SaveFromStram : ストリームへCSVを書き込む
    パラメータ
      Stream: TStream - ストリーム
  Sort : 指定された列で行をソートする(列は1つのみ指定可能)
    パラメータ
      Field: Integer - 列のインデックス(0始まり)
      Order: TSortOrder - 昇順、降順を指定(初期値=昇順)
      DataType: TDataType - 列の属性を指定(初期値=文字列)
  Sort : SortFieldsプロパティで指定された列で行をソートする
メンバ
  BufLen: Integer - 読み込み&書き込み時のバッファの長さ(初期値=1MB)
プロパティ
  Cells[Row: Integer, Col: Integer]: AnsiString - 指定された行・列の値
  Count: Integer - データの行数
  DataType[Row: Integer, Col: Integer]: TDataType - 指定された行・列の属性
  Delimiter: AnsiChar - 項目の区切り文字(初期値=',')
  HeaderRows: Integer - ヘッダの行数
  Loading: Boolean - データを読み込み中かのステータス
  MaxColCount: Integer - 列数の最大値(行によって列数が変わる場合に意味を持つ)
  Quotation: AnsiChar - 項目の引用符(初期値='"')
  SortFields: TSortFields - ソート項目
  Rows: TRows - 行のリスト
イベント
  OnLoadStart: TNotifyEvent - データ読み込み前に発生
    パラメータ
      Sender: TObject - 呼び出し元
  OnLoading: TLoadDataEvent - データを1行読み込む毎に発生
    パラメータ
      Sender: TObject - 呼び出し元
      LoadCount: Integer - 読み込んだ行数
  OnLoadEnd: TLoadDataEvent - 全データを読み込んだ後に発生
    パラメータ
      Sender: TObject - 呼び出し元
      LoadCount: Integer - 読み込んだ行数


TRows: TObjectListを継承 - 行のリスト メソッド Add - 行を追加 戻り値: Integer - 追加した行のインデックス Assign - CSVデータをコピー (2011/04/21追加) パラメータ Rows: TRows - コピー元のCSVデータ プロパティ Rows[Index: Integer]: TCols - 指定した行の列リスト(Default, Read Only)
TCols: TListを継承 - 任意の行の列リスト メソッド Add - 列を追加 パラメータ Value: String - データの値 DataType: TDataType - データの属性(初期値=文字列) 戻り値: Integer - 追加した列のインデックス Add - 列を追加 パラメータ Value: PAnsiChar - データの値 Len: Integer - データ値の長さ(Byte) DataType: TDataType - データの属性(初期値=文字列) 戻り値: Integer - 追加した列のインデックス Assign - 行をコピー (2011/04/21追加) パラメータ Cols: TCols - コピー元の行 プロパティ Cols[Index: Integer]: AnsiString - 指定した列の値(Default) DataType[Index: Integer]: TDataType - 指定した列の属性 Value[Index: Integer]: PAnsiChar - 指定した列の値
TCell - データ項目 メソッド DataType: TDataType - 属性 Value: array[0..MaxLongInt - 2] of AnsiChar - 値(値の長さ分動的にメモリを確保し設定する)
TSortFields: TObjectList - ソート項目のリスト メンバ HeaderRows: Integer - ヘッダの行数(先頭からこの行数分ソート対象外になる) メソッド Add : ソート項目を追加する 戻り値: Integer - 追加したソート項目のインデックス Add : ソート項目を追加する(パラメータの内容でプロパティを設定) パラメータ Field: Integer - 列のインデックス(0始まり) Order: TSortOrder - 昇順、降順を指定(初期値=昇順) DataType: TDataType - 列の属性を指定(初期値=文字列) 戻り値: Integer - 追加したソート項目のインデックス プロパティ Fields[Index: Integer]: TSortField - ソート項目
TSortField: TPersistent - ソート項目 メンバ Index: Integer - ソートする列のインデックス Order: TSortOrder - 昇順、降順 DataType: TDataType - 列の属性(文字列、数値、日付時刻) Tag: Integer - 任意の値(現在文字列から数値や日付時刻への変換の初期値として使用)
TSortOrder - 並び順 soNone - 並び替え無し soAscending - 昇順 soDescending - 降順
TDataType - データの属性 dtUnknown - 不明 dtString - 文字列 dtNumeric - 数値 dtDateTime - 日付時刻


トップページへ戻る