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 - 日付時刻