Octave dlmread徹底解説:テキストファイルからのデータ読み込み

2025-06-06

主な機能と使い方を以下に説明します。

dlmreadの基本的な使い方

最も基本的な形は以下の通りです。

M = dlmread(filename)
  • M: ファイルから読み込まれたデータが格納される行列。
  • filename: 読み込みたいテキストファイルの名前(例: 'data.txt')。

この形式では、dlmreadはファイル内の区切り文字を自動的に検出し、複数の空白文字を1つの区切り文字として扱います。

区切り文字を指定する場合

特定の区切り文字(カンマ、タブ、スペースなど)を指定して読み込みたい場合は、2番目の引数で区切り文字を指定します。

M = dlmread(filename, delimiter)
  • delimiter: 区切り文字を指定する文字(例: ',''\t'(タブ)、' '(スペース))。
    • 例: カンマ区切りのCSVファイルを読み込む場合: M = dlmread('data.csv', ',');

読み込み開始位置を指定する場合

ファイル全体ではなく、特定の行と列からデータの読み込みを開始したい場合は、さらに引数を追加します。

M = dlmread(filename, delimiter, R1, C1)
  • C1: 読み込みを開始する列のオフセット(0から始まる)。
    • 例えば、ファイルの最初の値から読み込む場合は R1=0, C1=0 となります。
    • 区切り文字を指定せずにオフセットを指定したい場合は、delimiterの代わりに空の文字列 '' を使用します。 例: M = dlmread('data.txt', '', 2, 1); (ファイル名を指定し、区切り文字は自動検出、3行目(オフセット2)、2列目(オフセット1)から読み込み開始)
  • R1: 読み込みを開始する行のオフセット(0から始まる)。

特定の範囲を読み込む場合

ファイル内の特定の矩形範囲のデータのみを読み込みたい場合は、範囲をベクトルまたはスプレッドシート形式で指定できます。

M = dlmread(filename, delimiter, [R1 C1 R2 C2])
  • [R1 C1 R2 C2]: 読み込む範囲を定義するベクトル。
    • R1, C1: 左上の行オフセット、列オフセット。
    • R2, C2: 右下の行オフセット、列オフセット。
    • オフセットは0から始まります。

または、スプレッドシート形式で指定することも可能です。

M = dlmread(filename, delimiter, 'A1..B7')
  • 'A1..B7': スプレッドシート形式で範囲を指定。

dlmreadの特徴と注意点

  • 推奨されない場合も: MATLABでは、dlmreadよりもreadmatrixreadtable関数が推奨される場合があります。これらはより柔軟で、データ形式の自動検出や、数値とテキストが混在するファイルの処理に優れています。Octaveでも同様のより新しい関数が利用できる場合がありますが、dlmreadは依然として広く使われています。
  • オフセットは0から: 行と列のオフセットは、ほとんどのプログラミング言語と同様に0から始まります(つまり、最初の行/列はオフセット0です)。
  • 行末の区切り文字: 行末に区切り文字がある場合、dlmreadは通常、追加のゼロ列を返します。
  • 空のフィールド: 区切り文字によって区切られたフィールドが空の場合、dlmreadは通常、そのフィールドをゼロとして扱います。
  • 数値データの読み込み: dlmreadは基本的に数値データのみを読み込みます。テキストデータが含まれている場合、エラーになったり、予期せぬ結果になる可能性があります。

例えば、以下のようなmy_data.txtというファイルがあるとします。

1,2,3
4,5,6
7,8,9

これをOctaveで読み込むには、次のようにします。

data = dlmread('my_data.txt', ',');
disp(data);

出力:

data =

   1   2   3
   4   5   6
   7   8   9

もし、最初の行をスキップして読み込みたい場合は、

data_partial = dlmread('my_data.txt', ',', 1, 0);
disp(data_partial);
data_partial =

   4   5   6
   7   8   9


ファイルが見つからない (unable to open file エラー)

これは最もよくあるエラーの一つです。dlmread: unable to open file 'filename.txt' のようなメッセージが表示されます。

原因

  • ファイル名に特殊文字が含まれている。
  • ファイルへのパスが間違っている(例: スペルミス、バックスラッシュ \ とスラッシュ / の混同)。
  • ファイルが現在のディレクトリにない、またはOctaveがファイルを検索するパス上にない。
  • 指定したファイル名が間違っている。

トラブルシューティング

  1. ファイル名の確認
    ファイル名が正確に合っているか、大文字・小文字も区別して確認してください。
  2. パスの確認
    • ファイルがOctaveの現在の作業ディレクトリに存在するか確認します。pwd コマンドで現在のディレクトリを表示できます。
    • ファイルが別のディレクトリにある場合は、フルパス(絶対パス)を指定するか、cd コマンドでそのディレクトリに移動するか、addpath コマンドでそのディレクトリをOctaveの検索パスに追加します。 例: dlmread('/home/user/data/my_data.txt', ','); (Linux/macOS) 例: dlmread('C:\\Users\\user\\Documents\\my_data.txt', ','); (Windows) 注意: Windowsではパスの区切り文字にバックスラッシュ \ を使用しますが、Octave(およびMATLAB)ではスラッシュ / を使用するか、バックスラッシュを2つ重ねて \\ とエスケープする必要があります。
  3. ファイル権限
    ファイルが読み取り可能であるか確認します。権限がない場合、dlmread はファイルを開けません。

データ形式の不一致 (数値以外のデータが含まれる)

dlmread は基本的に数値データを読み込むために設計されています。ファイルに数値以外の文字(文字列、日付、欠損値を示す文字など)が含まれている場合、エラーが発生したり、データが正しく読み込まれなかったりすることがあります。

原因

  • 数値の間に余分な文字(例: 1,2,3a)が含まれている。
  • 欠損値が NaNNA などではなく、空の文字列やハイフンなどで表現されている。
  • 日付や時刻のデータが数値として認識されない形式で含まれている。
  • ファイル内にテキスト、ヘッダー、またはコメント行が含まれている。

トラブルシューティング

  1. ファイルの検査
    テキストエディタでファイルを開き、内容を確認します。数値以外のデータが含まれていないか、区切り文字が統一されているかを確認します。
  2. ヘッダー/フッターのスキップ
    • もしファイルにヘッダー行が含まれる場合、dlmread(filename, delimiter, R1, C1) の形式で R1(行オフセット)を適切に設定してヘッダーをスキップします。 例: ヘッダーが1行ある場合、dlmread('data.txt', ',', 1, 0);
  3. 非数値データの処理
    • ファイルに数値とテキストが混在している場合は、dlmread の代わりに textscanfscanf を使用することを検討します。これらの関数は、より柔軟なデータ形式の指定が可能です。
    • Octave の io パッケージに含まれる csv2cellxlsread などの関数も、より複雑なデータ(日付や文字列を含むCSV/Excelファイル)の読み込みに適している場合があります。
    • データの前処理(別のスクリプトやエディタで非数値部分を削除または置換)を検討することも有効です。

区切り文字の誤認識

dlmread はデフォルトで複数の空白文字を区切り文字として認識しますが、特定の区切り文字(カンマ、タブなど)で区切られたファイルを読み込む際に、区切り文字の指定が間違っているとエラーが発生します。

原因

  • 複数のスペースが区切り文字として使われているのに、単一のスペース (' ') を区切り文字として明示的に指定している(この場合、複数のスペースが1つの区切り文字として扱われなくなる可能性がある)。
  • ファイルがタブ区切りなのに、カンマ (,) を指定している。
  • ファイルがカンマ区切りなのに、区切り文字を指定しないか、タブ (\t) を指定している。

トラブルシューティング

  1. 区切り文字の確認
    ファイルを開いて、実際に使われている区切り文字(カンマ、タブ、スペース、セミコロンなど)を確認します。
  2. 正しい区切り文字の指定
    dlmread(filename, delimiter) の形式で正しい区切り文字を第2引数に指定します。
    • カンマ: ','
    • タブ: '\t'
    • スペース(単一のスペースとして扱う場合): ' '
    • スペース(複数のスペースを1つの区切り文字として自動検出させる場合): 区切り文字引数を省略するか、空の文字列 '' を指定します。

行や列のオフセット指定ミス

R1, C1, R2, C2 などのオフセット指定を間違えると、データが欠落したり、予期しない部分が読み込まれたり、範囲外のエラーが発生したりします。

原因

  • 読み込みたい範囲と指定したオフセットが一致しない。
  • オフセットが1から始まると思い込んでいる(実際は0から始まる)。

トラブルシューティング

  1. 0ベースのオフセットを理解する
    Octaveのdlmreadにおける行と列のオフセットは 0から 始まります。つまり、最初の行/列はオフセット0です。
  2. 小さい範囲で試す
    まずはファイルの最初の一部(例: dlmread(filename, delimiter, 0, 0, 0, 0) で1つの値だけ読み込む)で試してみて、オフセットの動作を確認します。
  3. ファイルの構造を確認
    テキストエディタでファイルを開き、読み込みたい部分が何行目、何列目から始まるかを正確に数え、それに対応するオフセットを指定します。

メモリ不足エラー

非常に大きなファイルを読み込む場合、Octaveがメモリ不足になることがあります。

原因

  • ファイルサイズが非常に大きく、読み込もうとしているデータがシステムのRAM容量を超えている。

トラブルシューティング

  1. 部分的に読み込む
    dlmread の範囲指定機能を使って、ファイルを小さなチャンクに分割して読み込み、処理します。
  2. textscan の利用
    textscandlmread よりもメモリ効率が良い場合があります。特に、大きなファイルで特定の列だけが必要な場合に有効です。
  3. より多くのRAM
    物理的なRAMを増設することを検討します。
  4. 64ビット版Octaveの使用
    大量のメモリを扱うには、64ビット版のOctaveを使用していることを確認します。

空のファイルまたは破損したファイル

原因

  • ファイルが破損している(部分的にしか書き込まれていないなど)。
  • ファイルが空である。
  1. ファイルサイズの確認
    ファイルエクスプローラーなどでファイルサイズが0でないか確認します。
  2. ファイル内容の確認
    テキストエディタでファイルを開き、内容が意図した通りに存在するか確認します。
  • エラーメッセージの注意深い読み取り
    Octaveのエラーメッセージは、問題の特定に役立つ情報を含んでいます。メッセージを注意深く読み、それが示唆する解決策を試してください。
  • Octaveのバージョン
    使用しているOctaveのバージョンによっては、特定のバグが存在する場合があります。最新の安定版にアップデートすることも検討します。
  • シンプルなテストファイルから始める
    複雑なファイルで問題が発生した場合、数行のシンプルなテストファイルを作成し、それが正しく読み込めるか確認します。これにより、問題がOctaveのコードにあるのか、ファイルの形式にあるのかを切り分けやすくなります。
  • disp コマンドの使用
    読み込んだデータの最初の一部を表示し、正しく読み込まれているか目視で確認します。
  • whos コマンドの使用
    dlmread で読み込んだ変数のサイズと型を確認します。


data.txt

10,20,30
40,50,60
70,80,90

例1:区切り文字を自動検出してファイル全体を読み込む

最もシンプルな形式で、dlmread はファイル内の区切り文字(この場合はカンマ ,)を自動で判別し、数値データを読み込みます。

% data.txt ファイル全体を読み込む
M = dlmread('data.txt');

% 読み込んだ行列を表示
disp('例1: ファイル全体を自動検出で読み込み');
disp(M);

出力

例1: ファイル全体を自動検出で読み込み
M =

   10   20   30
   40   50   60
   70   80   90

例2:特定の区切り文字を指定してファイルを読み込む

ファイルが特定の区切り文字(例: カンマ ,、タブ \t、スペース ' ')で区切られていることがわかっている場合、それを明示的に指定できます。

以下の内容を持つ tab_data.txt ファイルを作成します。

tab_data.txt

1.1	2.2	3.3
4.4	5.5	6.6
% tab_data.txt をタブ区切りとして読み込む
M_tab = dlmread('tab_data.txt', '\t');

disp('例2: タブ区切りでファイル全体を読み込み');
disp(M_tab);

出力

例2: タブ区切りでファイル全体を読み込み
M_tab =

   1.1000   2.2000   3.3000
   4.4000   5.5000   6.6000

例3:特定の行と列から読み込みを開始する

ファイルの一部だけを読み込みたい場合、読み込み開始の行と列のオフセットを指定できます。オフセットは 0から 始まります。

data.txt を再度使用します。

% data.txt の2行目(オフセット1)から読み込みを開始する
% 区切り文字はカンマ ','
M_start_row = dlmread('data.txt', ',', 1, 0); 

disp('例3: 2行目から読み込みを開始');
disp(M_start_row);

出力

例3: 2行目から読み込みを開始
M_start_row =

   40   50   60
   70   80   90

列も指定したい場合:

% data.txt の2行目(オフセット1)、2列目(オフセット1)から読み込みを開始
M_start_rc = dlmread('data.txt', ',', 1, 1);

disp('例3: 2行目、2列目から読み込みを開始');
disp(M_start_rc);

出力

例3: 2行目、2列目から読み込みを開始
M_start_rc =

   50   60
   80   90

例4:特定の矩形範囲を読み込む

ファイルの特定の部分(矩形領域)だけを読み込むことができます。これは [R1 C1 R2 C2] の形式で指定します。ここでもオフセットは0から始まります。

% data.txt の1行目1列目(オフセット0,0)から
% 2行目2列目(オフセット1,1)までの範囲を読み込む
M_range = dlmread('data.txt', ',', [0 0 1 1]);

disp('例4: 特定の矩形範囲を読み込み');
disp(M_range);

出力

例4: 特定の矩形範囲を読み込み
M_range =

   10   20
   40   50

例5:ヘッダー行をスキップして読み込む

ファイルにヘッダー行が含まれている場合、その行をスキップしてデータのみを読み込むことができます。これは、読み込み開始の行オフセットを指定することで実現します。

以下の内容を持つ data_with_header.csv ファイルを作成します。

data_with_header.csv

Header1,Header2,Header3
1,2,3
4,5,6
7,8,9
% data_with_header.csv の最初の行(ヘッダー)をスキップして読み込む
% ヘッダーは1行なので、行オフセットを1に設定
M_no_header = dlmread('data_with_header.csv', ',', 1, 0);

disp('例5: ヘッダーをスキップして読み込み');
disp(M_no_header);

出力

例5: ヘッダーをスキップして読み込み
M_no_header =

   1   2   3
   4   5   6
   7   8   9

例6:非数値データが含まれる場合の注意点

dlmread は数値データの読み込みに特化しているため、ファイルに数値以外の文字が含まれるとエラーになるか、予期せぬ結果になります。

以下の内容を持つ mixed_data.txt ファイルを作成します。

mixed_data.txt

10,abc,30
40,50,60

このファイルを dlmread で直接読み込もうとすると、エラーが発生する可能性があります。

% mixed_data.txt を読み込もうとするとエラーになる可能性がある
% M_error = dlmread('mixed_data.txt', ',');
% disp(M_error);
% 例: "dlmread: trouble reading number from file"

このような場合、dlmread ではなく、textscancsv2cell (Octaveのioパッケージに含まれる) のような、より柔軟な関数を使用することを検討する必要があります。

例: textscan を使った読み込み(より高度な機能)

% mixed_data.txt から数値を読み込み、テキストを無視する例
% (この例は dlmread の代替として textscan の有用性を示すものです)
fid = fopen('mixed_data.txt', 'r');
C = textscan(fid, '%f%*s%f', 'Delimiter', ',', 'HeaderLines', 0);
fclose(fid);

% 結果はセル配列として返されるので、必要に応じて行列に変換
M_textscan = [C{1}, C{2}];

disp('例6: textscan を使って非数値データをスキップして読み込み');
disp(M_textscan);

mixed_data.txt の内容が 10,abc,30 で、%f%*s%f のフォーマット指定子が使用された場合、%*s は文字列を読み飛ばします。このため、1030 が数値として読み込まれます。

例6: textscan を使って非数値データをスキップして読み込み
M_textscan =

   10   30
   40   60


textscan 関数

textscan は、dlmread よりもはるかに強力で柔軟なテキストファイル解析関数です。任意の数の数値、文字列、またはその両方の混合を読み込むことができ、複雑なフォーマット指定子、ヘッダーのスキップ、コメント行の処理などが可能です。

特徴

  • メモリ効率
    大量のデータを部分的に読み込む際にも効率的です。
  • 読み込み後のデータ形式
    デフォルトではセル配列として返されますが、必要に応じて行列に変換できます。
  • 欠損値の処理
    EmptyValue オプションで空のフィールドを特定の数値に置き換えられます。
  • ヘッダー/フッターのスキップ
    HeaderLines オプションで行数や CommentStyle オプションでコメント行をスキップできます。
  • 複数のデータ型
    数値と文字列が混在するファイルを一度に読み込めます。
  • 柔軟なフォーマット指定
    C言語の scanf に似たフォーマット文字列 (%f for float, %d for integer, %s for string, %q for quoted stringなど) を使用して、各列のデータ型を細かく指定できます。

基本的な使い方

% 例: 数値と文字列が混在するファイル
% my_mixed_data.txt
% Name,Age,Score
% Alice,30,85.5
% Bob,25,92.0
% Charlie,35,78.0

fid = fopen('my_mixed_data.txt', 'r'); % ファイルを開く
% フォーマット指定: 文字列、整数、浮動小数点数
% Delimiter: 区切り文字
% HeaderLines: スキップするヘッダー行数
C = textscan(fid, '%s%d%f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid); % ファイルを閉じる

names = C{1};  % 1列目(名前)
ages = C{2};   % 2列目(年齢)
scores = C{3}; % 3列目(スコア)

disp('--- textscan の例 ---');
disp('名前:'); disp(names);
disp('年齢:'); disp(ages);
disp('スコア:'); disp(scores);

出力

--- textscan の例 ---
名前:
{
  [1,1] = Alice
  [2,1] = Bob
  [3,1] = Charlie
}
年齢:
ages =

   30
   25
   35

スコア:
scores =

   85.500
   92.000
   78.000

csvread 関数 (非推奨だが一部で利用される)

csvread は、カンマ区切りの数値データを読み込むための関数で、MATLABでは非推奨(readmatrixreadtable を推奨)とされていますが、Octaveではまだ広く利用可能です。機能は dlmread に似ていますが、区切り文字がカンマに固定されています。

特徴

  • dlmread ほど柔軟ではない。
  • dlmread と同様に、開始行と列を指定できる。
  • カンマ区切りの数値データに特化。

基本的な使い方

% 例: data.csv (内容は data.txt と同じ)
% 10,20,30
% 40,50,60
% 70,80,90

M_csv = csvread('data.csv');

disp('--- csvread の例 ---');
disp(M_csv);

出力

--- csvread の例 ---
M_csv =

   10   20   30
   40   50   60
   70   80   90

importdata 関数

importdata は、ファイルの内容を自動的に判別し、適切なデータ構造(行列、セル配列、構造体など)で読み込もうとする高レベルな関数です。シンプルな数値データ、画像、音声など、様々な形式に対応できます。

特徴

  • 出力構造
    ファイルの内容に応じて、数値行列、構造体(ヘッダーとデータを分離)、セル配列など、異なる形式でデータを返します。
  • ヘッダー/コメントの処理
    デフォルトでヘッダー行やコメント行を処理しようとします。
  • 様々なファイルタイプ
    テキストファイルだけでなく、画像(JPEG, PNGなど)、音声(WAVなど)のデータも読み込めます。
  • 自動検出
    ファイル形式をある程度自動的に検出しようとします。

基本的な使い方

% 例: data_with_header.csv (例5で使用したファイル)
% Header1,Header2,Header3
% 1,2,3
% 4,5,6
% 7,8,9

data_imported = importdata('data_with_header.csv');

disp('--- importdata の例 ---');
% importdata は、ヘッダーを分離し、データ部分を数値行列として返します。
% ヘッダーが検出された場合、data_imported は構造体になることが多いです。
if isstruct(data_imported)
    disp('データ部分:');
    disp(data_imported.data);
    disp('テキストヘッダー:');
    disp(data_imported.textdata);
else
    disp('データ:');
    disp(data_imported);
end

出力

--- importdata の例 ---
データ部分:
data_imported.data =

   1   2   3
   4   5   6
   7   8   9

テキストヘッダー:
data_imported.textdata =
{
  [1,1] = Header1
  [1,2] = Header2
  [1,3] = Header3
}

fscanf 関数

fscanf はC言語の fscanf と同様に、開かれたファイルポインタから指定されたフォーマットでデータを読み込みます。これは非常に低レベルで強力ですが、textscan よりも扱いが少し複雑になる場合があります。主に固定幅のデータや複雑なテキストパターンを読み込む際に使用されます。

特徴

  • 行末を自動的に処理しない場合があるため、fgets などと組み合わせて使うことが多い。
  • 固定幅のデータや、特定のパターンを持つ行の読み込みに強い。
  • 非常に低レベルで細かい制御が可能。

基本的な使い方

% 例: simple_data.txt
% 10 20
% 30 40

fid = fopen('simple_data.txt', 'r');
% ファイル全体から浮動小数点数(%f)を読み込む。
% -Inf はファイルサイズが不明な場合の最大値。
data_fscanf = fscanf(fid, '%f', Inf);
fclose(fid);

% fscanf は列指向で読み込むため、元の行列形式にreshapeする必要がある場合が多い
% ここでは、2列のデータとして読み込んだと仮定して整形
data_fscanf = reshape(data_fscanf, 2, [])'; % 2列に整形して転置

disp('--- fscanf の例 ---');
disp(data_fscanf);

出力

--- fscanf の例 ---
data_fscanf =

   10   20
   30   40

readmatrix (Octave 8.1以降で推奨される)

Octave 8.1 以降では、MATLAB との互換性を高めるために readmatrix が導入されました。これは、数値データを読み込むための推奨される方法であり、dlmreadcsvread よりも多くのオプションと堅牢性を提供します。

特徴

  • dlmread と同様に数値行列を返す。
  • ヘッダー行のスキップ、データ範囲の指定、欠損値の処理など、多くのオプション。
  • 自動的な区切り文字検出。
  • dlmreadcsvread の機能を包含し、より強力。

基本的な使い方

% 例: data_with_header.csv を readmatrix で読み込む
% readmatrix は自動でヘッダーをスキップしようとします

% Octaveのバージョンが8.1以上であることを確認してください
% pkg install -forge io (ioパッケージがインストールされていない場合)
% pkg load io

try
    M_readmatrix = readmatrix('data_with_header.csv');
    disp('--- readmatrix の例 ---');
    disp(M_readmatrix);
catch
    disp('readmatrix はこのバージョンのOctaveでは利用できないか、ioパッケージがロードされていません。');
    disp('Octave 8.1以降が必要です。または "pkg load io" を実行してください。');
end

出力例(Octave 8.1+ の場合)

--- readmatrix の例 ---
M_readmatrix =

   1   2   3
   4   5   6
   7   8   9

readtable (Octave 8.1以降で推奨される)

readtable も Octave 8.1 以降で導入され、表形式のデータを読み込むための推奨される方法です。これは、各列が異なるデータ型を持つ可能性のあるスプレッドシートやCSVファイルに最適です。データは「テーブル」オブジェクトとして読み込まれ、列名でのアクセスや、混合データ型(数値、文字列、日付など)の保持が可能です。

特徴

  • readmatrix と同様に、io パッケージが必要です。
  • 欠損値の処理、データのサブセット選択など、高度な機能。
  • データを「テーブル」オブジェクトとして読み込み、列名を保持。
  • 数値、文字列、日付など、混合データ型を持つ表形式のデータに最適。

基本的な使い方

% 例: my_mixed_data.txt (例1で使用)
% Name,Age,Score
% Alice,30,85.5
% Bob,25,92.0
% Charlie,35,78.0

% Octaveのバージョンが8.1以上であることを確認してください
% pkg install -forge io (ioパッケージがインストールされていない場合)
% pkg load io

try
    T_readtable = readtable('my_mixed_data.txt', 'Delimiter', ',');
    disp('--- readtable の例 ---');
    disp(T_readtable);
    % 列名でアクセス
    disp('Aliceの年齢:');
    disp(T_readtable.Age(1));
catch
    disp('readtable はこのバージョンのOctaveでは利用できないか、ioパッケージがロードされていません。');
    disp('Octave 8.1以降が必要です。または "pkg load io" を実行してください。');
end
--- readtable の例 ---
T_readtable = Table with 3 rows and 3 variables:

    Name      Age    Score
    ____    _____    _____

    "Alice"    30    85.5
    "Bob"      25    92
    "Charlie"  35    78

Aliceの年齢:
ans = 30
  • Octave 8.1以降の推奨(混合データ型、表形式データ)
    readtable
  • Octave 8.1以降の推奨(数値データのみ)
    readmatrix
  • 固定幅など低レベルな制御が必要な場合
    fscanf
  • 高レベルで自動検出に任せたい場合
    importdata
  • 数値と文字列が混在するデータ、複雑なフォーマット
    textscan
  • シンプルな数値データ
    dlmread (または csvreadreadmatrix)