Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - Русский

Please note that the recommended version of Scilab is 6.0.1. This page might be outdated.
See the recommended documentation of this function

Scilab help >> Spreadsheet > csvRead

csvRead

CSVファイルを読み込む

呼び出し手順

M = csvRead(filename)
M = csvRead(filename, separator)
M = csvRead(filename, separator, decimal)
M = csvRead(filename, separator, decimal, conversion)
M = csvRead(filename, separator, decimal, conversion, substitute)
M = csvRead(filename, separator, decimal, conversion, substitute, rexgepcomments, range)
[M, comments] = csvRead(filename, separator, decimal, conversion, substitute, rexgepcomments, range)

パラメータ

filename

1行1列の文字列行列で,ファイルパスです.

separator

1行1列の文字列行列で, 使用されるフィールドセパレータ.

decimal

1行1列の文字列行列で,使用される小数点.

conversion

1行1列の文字列行列で,出力Mの型. 利用可能な値は "string" または "double" (デフォルト)です.

substitute

m行2列の文字列行列で, 置換マップ(デフォルト = [], 置換処理なし). 最初の列 substitute(:,1) は 検索する文字列を有し, 2番目の列 substitute(:,2) は置換文字列を 有します. ファイル中に指定された文字列が現れる度に 置換が行われます.

rexgepcomments

文字列: 一致する行を削除するための正規表現. (デフォルト: [])

range

1行4列の浮動小数点の整数行列で, 読み込む列および行の範囲です (デフォルトの範囲は [] で,全ての行と列を意味します). [R1 C1 R2 C2]の形式で範囲を 指定してください. ただし,(R1,C1)は読み込むデータの左上隅, (R2,C2)は右下隅です.

M

m行n列の文字列またはdouble行列.

comments

正規表現にマッチしたm行n列の文字列行列.

説明

カンマ区切りの値をフィールドとするアスキーファイルを指定すると, この関数は対応する文字列またはdoubleのScilab行列を返します.

例えば,.csvデータファイルは 表計算ソフトウェアにより"テキスト及びカンマ"形式で 作成されたものとすることができます.

列はカンマ以外で区切られたものとすることもできます. この場合, 別のセパレータを指定する csvRead(filename, separator) を使用してください.

オプションの入力引数のデフォルト値は, csvDefault 関数で定義されます.

オプションの入力引数に空の行列[]を指定すると, デフォルト値が設定されます.

入力引数 "conversion" が "double" の時, .csvの中の数値以外のフィールド(例:文字列)は NaNに変換されます.

以下のスクリプトは, csvRead関数のいくつかの基本的な使用例を示します.

// タブ区切りのデータを含むファイルを生成
            M = 1:50;
            filename = fullfile(TMPDIR, "data.csv");
            csvWrite(M, filename, ascii(9), '.');
            
            // csvファイルを読み込む
            M1 = csvRead(filename,ascii(9), [], 'string')
            
            // doubleを返す
            M2 = csvRead(filename,ascii(9), '.', 'double')
            
            // 元のデータを結果と比較
            and(M == M2)
            
            // 特殊なデータファイルを管理するために
            // 置換用引数を使用
            content = [
            "1"
            "Not-A-Number"
            "2"
            "Not-A-Number"
            ];
            
            substitute = [
            "Not-A-Number" "Nan"
            ];
            
            mputl(content,filename);
            M = csvRead(filename,",",".","double",substitute)
            isnan(M(2,1)) // Expected=%t
            isnan(M(4,1)) // Expected=%t

以下のスクリプトは, csvRead関数のより実用的な使用例を示します.

// 文字列の行列を定義
            Astr = [
            "1" "8" "15" "22" "29" "36" "43" "50"
            "2" "9" "16" "23" "30" "37" "44" "51"
            "3" "10" "17" "6+3*I" "31" "38" "45" "52"
            "4" "11" "18" "25" "32" "39" "46" "53"
            "5" "12" "19" "26" "33" "40" "47" "54"
            "6" "13" "20" "27" "34" "41" "48" "55"
            "+0" "-0" "Inf" "-Inf" "Nan" "1.D+308" "1.e-308" "1.e-323"
            ];
            
            // カンマ区切りのデータを有するファイルを作成
            filename = fullfile(TMPDIR , 'foo.csv');
            sep = ",";
            fd = mopen(filename,'wt');
            for i = 1 : size(Astr,"r")
            mfprintf(fd,"%s\n",strcat(Astr(i,:),sep));
            end
            mclose(fd);
            // ファイルを参照するには : edit(filename)
            
            // このファイルを読み込む
            Bstr = csvRead ( filename )
            
            // 特殊なセパレータを有するファイルを作成: ここでは ";"
            filename = fullfile(TMPDIR , 'foo.csv');
            sep = ";";
            fd = mopen(filename,'wt');
            for i = 1 : size(Astr,"r")
            mfprintf(fd,"%s\n",strcat(Astr(i,:),sep));
            end
            mclose(fd);
            
            //
            // セパレータを指定してファイルを読み込む
            csvRead ( filename , sep )

以下のスクリプトは csvRead 関数のregexp引数により 行を削除する例を示します.

CSV = ["// tata"; ..
            "1,0,0,0,0"; ..
            "// titi"; ..
            "0,1,0,0,0"; ..
            "// toto"; ..
            "0,0,1,0,0"; ..
            "// tutu"];
            filename = fullfile(TMPDIR , 'foo.csv');
            mputl(CSV, filename);
            
            // //で始まる行を削除
            [M, comments] = csvRead(filename, [], [], [], [], '/\/\//')

空のフィールドはcsvReadで管理されます

csvWrite(['1','','3';'','','6'], TMPDIR + "/example.csv")
csvRead(TMPDIR + "/example.csv", [], [], "string")
csvRead(TMPDIR + "/example.csv", [], [], "double")
// 文字列の行列を定義
Astr = [
"1" "8" "15" "22" "29" "36" "43" "50"
"2" "9" "16" "23" "30" "37" "44" "51"
"3" "10" "17" "6+3*I" "31" "38" "45" "52"
"4" "11" "18" "25" "32" "39" "46" "53"
"5" "12" "19" "26" "33" "40" "47" "54"
"6" "13" "20" "27" "34" "41" "48" "55"
"+0" "-0" "Inf" "-Inf" "Nan" "1.D+308" "1.e-308" "1.e-323"
];

// カンマ区切りのデータを有するファイルを作成
filename = fullfile(TMPDIR , 'foo.csv');
sep = ",";
fd = mopen(filename,'wt');
for i = 1 : size(Astr,"r")
mfprintf(fd,"%s\n",strcat(Astr(i,:),sep));
end
mclose(fd);
// ファイルを参照するには : edit(filename)

// このファイルを読み込む
Bstr = csvRead ( filename )

// 特殊なセパレータを有するファイルを作成: ここでは ";"
filename = fullfile(TMPDIR , 'foo.csv');
sep = ";";
fd = mopen(filename,'wt');
for i = 1 : size(Astr,"r")
mfprintf(fd,"%s\n",strcat(Astr(i,:),sep));
end
mclose(fd);
//
// セパレータを指定してファイルを読み込む
csvRead ( filename , sep )

以下のスクリプトでは, ファイル "filename" は 5000行単位のブロックで読みこまれます. 実際に読み込まれたファイルの行数が5000行に 満たない時, すなわち, ファイルの終端に達した時, このアルゴリズムは中断します.

blocksize = 5000;
            C1 = 1;
            C2 = 3;
            iblock = 1
            while (%t)
            R1 = (iblock-1) * blocksize + 1;
            R2 = blocksize + R1-1;
            irange = [R1 C1 R2 C2];
            mprintf("Block #%d, rows #%d to #%d\n",iblock,R1,R2);
            tic();
            M=csvRead(filename , [] , [] , [] , [] , [] , [] , irange );
            t = toc();
            nrows = size(M,"r");
            ncols = size(M,"c");
            if ( nrows > 0 ) then
            p = t/(nrows*ncols)*1.e6;
            mprintf("  Actual #rows=%d\n",nrows);
            mprintf("  T=%.3f (s)\n",t);
            mprintf("  T=%.1f (ms/cell)\n",p);
            end
            if ( nrows < blocksize ) then
            mprintf("... End of the file.\n");
            break
            end
            iblock = iblock + 1;
            end

出力は以下のようになります :

Block #1, rows #1 to #5000
            Actual #rows=5000
            T=3.135 (s)
            T=209.0 (ms/cell)
            Block #2, rows #5001 to #10000
            Actual #rows=5000
            T=3.139 (s)
            T=209.3 (ms/cell)
            Block #3, rows #10001 to #15000
            Actual #rows=5000
            T=3.151 (s)
            T=210.1 (ms/cell)
            etc....

参照

履歴

VersionDescription
5.4.0 関数が導入されました. 'csv_readwrite'モジュールに基づきます.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Oct 01 17:40:37 CEST 2012