MATLABでファイルをインポートする方法
tab区切りtext fileのインポート
textscan()関数
テキストヘッダを含んだtab区切りtextファイルをインポートできる。文字列と数値が混在したデータを、セル配列に読み込める。% テキストファイルからデータを読み込む。 % タブをデリミッタとし、ヘッダーラインを head_num行、読み飛ばす。 % ファイルオープン fin = fopen(file_in); head_num = 1; in_cell = textscan(fin,... '%s %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %d %s %s %s %s %s %s %s %s',... 'delimiter', '\t', 'headerlines', head_num); fclose(fin); : % 同じデータタイプのセル配列を、単一行列に変換する場合(全ての行) oneline_val = cell2mat(in_cell(1, 2:21)); % セルの個々のデータにアクセスする場合 nc = in_cell{field_no}(line_no);
dlmread()関数
テキストヘッダを含んだtab区切りtextファイルから、数値データをインポートできる。データ部(ファイルの一部の領域)に文字列が混在したデータは読み込めない。そうでなければ、この関数を使用した方が記述が簡単である。% テキストファイルから数値データを読み込む。 % タブをデリミッタとし、(R行,C列)以降を読み込む。 % 左上を(0,0)とする。例えば、(0,2)なら1行3列目から。 % 読み込まれたデータのcolsは1列多い(?)ので、使用するときは気をつけること。 datas = dlmread(file_in, '\t', R, C); [rows, cols] = size(datas); for line_no = 1:rows values1 = datas(line_no,1:(end - 1)); : end % テキストファイルから数値データを読み込む。 % タブをデリミッタとし、range = [R1 C1 R2 C2]の範囲を読み込む。 % 左上を(0,0)とする。(R1,C1)は左上、(R2,C2)は右下の座標。 datas = dlmread(file_in, '\t', range);
fgetl()関数
fgetl()関数を使用して、ファイルから1行ずつ読み込むことができる。ヘッダー部や列の先頭の文字列のみを読み込むときに便利である。- 詳細
- 例
% ファイルオープン fin = fopen(file_in); % ヘッダー部読み込み rem = fgetl(fin); % トークンに分ける。ただし、この方法では1列多くなる。 % 列数が分かっている場合は、for k = 1:10 のように数を指定してループするとよい。 k = 1; while true [title{k}, rem] = strtok(rem, ' '); % ' '内はタブ等のdelimiter if isempty(title{k}), break; end k = k + 1; end % データ部読み込み line_no = 1; while(1) tline = fgetl(fin); if ~ischar(tline), break, end [token, rem] = strtok(tline, ' '); str1{line_no} = token(1:end); % 1列目の文字列 str2{line_no} = strtok(rem, ' '); % 2列目の文字列 line_no = line_no + 1; end fclose(fin);
xls fileのインポート
xlsread()関数
EXCELで変換したxlsファイルを読み込むことができる。ただし、1行が256列以上のデータはEXCELで読み込めないので、使用できない。データを文字列や数値ごとに出力してくれるので便利である。- 詳細
- 例
% xlsreadは、次の3項目を別々に出力する。 % datas : 数値データ % strs : 文字列データ % rowData : 圧縮されていないセルの内容 [datas, strs, rowData] = xlsread(file_in); [rows, cols] = size(datas); for line_no = 1:rows id = datas(line_no,1); end