Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
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, regexpcomments, range) M = csvRead(filename, separator, decimal, conversion, substitute, regexpcomments, range, header) [M, comments] = csvRead(filename, separator, decimal, conversion, substitute, regexpcomments, range, header)
引数
- filename
1行1列の文字列行列で,ファイルパスです.
- separator
1行1列の文字列行列で, 使用されるフィールドセパレータ.
- decimal
1行1列の文字列行列で,使用される小数点.
decimal
が[]
と異なりconversion
がstring
に 設定された場合,小数点変換が行われます.- conversion
1行1列の文字列行列で,出力
M
の型. 利用可能な値は "string" または "double" (デフォルト)です.read_csv では "string" がデフォルトであることに 注意してください.
- substitute
m行2列の文字列行列で, 置換マップ(デフォルト = [], 置換処理なし). 最初の列
substitute(:,1)
は 検索する文字列を有し, 2番目の列substitute(:,2)
は置換文字列を 有します. ファイル中に指定された文字列が現れる度に 置換が行われます.- rexgepcomments
文字列: 一致する行を削除するための正規表現. (デフォルト: [])
- range
1行4列の浮動小数点の整数行列で, 読み込む列および行の範囲です (デフォルトの範囲は [] で,全ての行と列を意味します).
[R1 C1 R2 C2]
の形式で範囲を 指定してください. ただし,(R1,C1)は読み込むデータの左上隅, (R2,C2)は右下隅です.ファイルが正しく整形されていることに注意してください. この範囲はパースされた要素についてメモリ上で実行されます.- header
1行1列の行列の浮動小数点整数, ファイルの先頭で無視される行の数.
- M
m行n列の文字列またはdouble行列.
- comments
正規表現にマッチしたm行n列の文字列行列.
説明
カンマ区切りの値をフィールドとするアスキーファイルを指定すると, この関数は対応する文字列またはdoubleのScilab行列を返します.
例えば,.csvデータファイルは 表計算ソフトウェアにより"テキスト及びカンマ"形式で 作成されたものとすることができます.
列はカンマ以外で区切られたものとすることもできます. この場合, 別のセパレータを指定する csvRead(filename, separator) を使用してください.
オプションの入力引数のデフォルト値は,
csvDefault
関数で定義されます.
オプションの入力引数に空の行列[]
を指定すると,
デフォルト値が設定されます.
入力引数 "conversion" が "double" の時, .csvの中の数値以外のフィールド(例:文字列)は NaNに変換されます.
csvRead は UTF-8 および ASCII テキストファイルを読み込むことができます.
例
以下のスクリプトは,
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引数により
行を削除する例を示します.
空のフィールドは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....
参照
- csvTextScan — カンマ区切りの値を行列に変換
- csvWrite — CSVファイルを書き込む
- csvDefault — CSVファイルに関するデフォルト動作を取得/設定.
履歴
バージョン | 記述 |
5.4.0 | 関数が導入されました. 'csv_readwrite'モジュールに基づきます. read_csv と比べた場合の 動作の唯一の差異は, read_csvが値を文字列として返す時,デフォルトで値をdoubleに変換しようとする ことです. |
5.4.1 | decimal が [] 以外で,
conversion が string に設定された場合,
小数点変換が行われます. |
5.5 | ヘッダを無視するために,入力引数"header"が追加されました. |
Report an issue | ||
<< csvDefault | Spreadsheet | csvTextScan >> |