指定したCSVデータ全体をメモリに読み込み、セル単位でランダムアクセスを可能としたクラス。 以下のような特徴を持つ。
行と列の指定によりセルをランダムにアクセス可能。
読み込み専用であり、データの更新や追加は一切できない。
データは全て文字列として読み込むので、その他の方で利用する時は適宜型変換(ex. to_i)が必要。
メモリが空いている限りデータを読み込む。領域がなくなればエラー終了する。
* MCMD::Mtable::new(arguments)
Mtableオブジェクトを生成する。 argumentsに、以下の引数をスペースで区切った文字列として指定する。
i= |
入力ファイル名(String) |
-nfn |
1行目を項目名と見なさない。 |
* MCMD::Mtable::cell(col=0, row=0) -> String
row(行),col(列)に対応するセルの値を返す。 row,colの与え方は、列番号と行番号による。 列/行番号共に0から始まる整数(Mcsvinの列番号は1から始まる)。 row,colが範囲外の場合はnilを返す。
行番号で、0以上の整数を用いる。デフォルトは0。
列番号で、0以上の整数を用いる。項目名は指定できない。デフォルトは0。
colのみ与えると0行目のcol番目の項目の値を返す。cell(col,0)を指定したのと同等。 またcol,row両方とも与えなければ0行目の0項目目の値を返す。cell(0,0)を指定したのと同等。
* MCMD::Mtable::names() -> String Array
項目名配列を返す。
* MCMD::Mtable::name2num() -> String=>Fixnum Hash
項目名をキー、対応する項目番号を値とするHashを返す。
* MCMD::Mtable::size() -> Fixnum
行数を返す。
# dat1.csv customer,date,amount A,20081201,10 B,20081002,40 tbl=MCMD::Mtable.new("i=dat1.csv") p tbl.names # -> ["customer", "date", "amount"] p tbl.name2num # -> {"amount"=>2, "date"=>1, "customer"=>0} p tbl.size # -> 2 p tbl.cell(0,0) # -> "A" p tbl.cell(0,1) # -> "B" p tbl.cell(1,1) # -> "20081202" p tbl.cell(1) # -> "20081201" p tbl.cell # -> "A"
# dat1.csv customer,date,amount A,20081201,10 B,20081002,40 tbl=MCMD::Mtable.new("i=dat1.csv -nfn") # 一行目もデータと見なしてしまう。 p tbl.names # -> nil p tbl.name2num # -> nil p tbl.size # -> 3 p tbl.cell(0,0) # -> "customer" p tbl.cell(0,1) # -> "A" p tbl.cell(1,1) # -> "20081201" p tbl.cell(1) # -> "date" p tbl.cell # -> "customer"
Mcsvin : CSVデータの読み込み