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