Octave dlmread徹底解説:テキストファイルからのデータ読み込み
主な機能と使い方を以下に説明します。
dlmread
の基本的な使い方
最も基本的な形は以下の通りです。
M = dlmread(filename)
M
: ファイルから読み込まれたデータが格納される行列。filename
: 読み込みたいテキストファイルの名前(例:'data.txt'
)。
この形式では、dlmread
はファイル内の区切り文字を自動的に検出し、複数の空白文字を1つの区切り文字として扱います。
区切り文字を指定する場合
特定の区切り文字(カンマ、タブ、スペースなど)を指定して読み込みたい場合は、2番目の引数で区切り文字を指定します。
M = dlmread(filename, delimiter)
delimiter
: 区切り文字を指定する文字(例:','
、'\t'
(タブ)、' '
(スペース))。- 例: カンマ区切りのCSVファイルを読み込む場合:
M = dlmread('data.csv', ',');
- 例: カンマ区切りの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
よりもreadmatrix
やreadtable
関数が推奨される場合があります。これらはより柔軟で、データ形式の自動検出や、数値とテキストが混在するファイルの処理に優れています。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がファイルを検索するパス上にない。
- 指定したファイル名が間違っている。
トラブルシューティング
- ファイル名の確認
ファイル名が正確に合っているか、大文字・小文字も区別して確認してください。 - パスの確認
- ファイルが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つ重ねて\\
とエスケープする必要があります。
- ファイルがOctaveの現在の作業ディレクトリに存在するか確認します。
- ファイル権限
ファイルが読み取り可能であるか確認します。権限がない場合、dlmread
はファイルを開けません。
データ形式の不一致 (数値以外のデータが含まれる)
dlmread
は基本的に数値データを読み込むために設計されています。ファイルに数値以外の文字(文字列、日付、欠損値を示す文字など)が含まれている場合、エラーが発生したり、データが正しく読み込まれなかったりすることがあります。
原因
- 数値の間に余分な文字(例:
1,2,3a
)が含まれている。 - 欠損値が
NaN
やNA
などではなく、空の文字列やハイフンなどで表現されている。 - 日付や時刻のデータが数値として認識されない形式で含まれている。
- ファイル内にテキスト、ヘッダー、またはコメント行が含まれている。
トラブルシューティング
- ファイルの検査
テキストエディタでファイルを開き、内容を確認します。数値以外のデータが含まれていないか、区切り文字が統一されているかを確認します。 - ヘッダー/フッターのスキップ
- もしファイルにヘッダー行が含まれる場合、
dlmread(filename, delimiter, R1, C1)
の形式でR1
(行オフセット)を適切に設定してヘッダーをスキップします。 例: ヘッダーが1行ある場合、dlmread('data.txt', ',', 1, 0);
- もしファイルにヘッダー行が含まれる場合、
- 非数値データの処理
- ファイルに数値とテキストが混在している場合は、
dlmread
の代わりにtextscan
やfscanf
を使用することを検討します。これらの関数は、より柔軟なデータ形式の指定が可能です。 - Octave の
io
パッケージに含まれるcsv2cell
やxlsread
などの関数も、より複雑なデータ(日付や文字列を含むCSV/Excelファイル)の読み込みに適している場合があります。 - データの前処理(別のスクリプトやエディタで非数値部分を削除または置換)を検討することも有効です。
- ファイルに数値とテキストが混在している場合は、
区切り文字の誤認識
dlmread
はデフォルトで複数の空白文字を区切り文字として認識しますが、特定の区切り文字(カンマ、タブなど)で区切られたファイルを読み込む際に、区切り文字の指定が間違っているとエラーが発生します。
原因
- 複数のスペースが区切り文字として使われているのに、単一のスペース (
' '
) を区切り文字として明示的に指定している(この場合、複数のスペースが1つの区切り文字として扱われなくなる可能性がある)。 - ファイルがタブ区切りなのに、カンマ (
,
) を指定している。 - ファイルがカンマ区切りなのに、区切り文字を指定しないか、タブ (
\t
) を指定している。
トラブルシューティング
- 区切り文字の確認
ファイルを開いて、実際に使われている区切り文字(カンマ、タブ、スペース、セミコロンなど)を確認します。 - 正しい区切り文字の指定
dlmread(filename, delimiter)
の形式で正しい区切り文字を第2引数に指定します。- カンマ:
','
- タブ:
'\t'
- スペース(単一のスペースとして扱う場合):
' '
- スペース(複数のスペースを1つの区切り文字として自動検出させる場合): 区切り文字引数を省略するか、空の文字列
''
を指定します。
- カンマ:
行や列のオフセット指定ミス
R1
, C1
, R2
, C2
などのオフセット指定を間違えると、データが欠落したり、予期しない部分が読み込まれたり、範囲外のエラーが発生したりします。
原因
- 読み込みたい範囲と指定したオフセットが一致しない。
- オフセットが1から始まると思い込んでいる(実際は0から始まる)。
トラブルシューティング
- 0ベースのオフセットを理解する
Octaveのdlmread
における行と列のオフセットは 0から 始まります。つまり、最初の行/列はオフセット0です。 - 小さい範囲で試す
まずはファイルの最初の一部(例:dlmread(filename, delimiter, 0, 0, 0, 0)
で1つの値だけ読み込む)で試してみて、オフセットの動作を確認します。 - ファイルの構造を確認
テキストエディタでファイルを開き、読み込みたい部分が何行目、何列目から始まるかを正確に数え、それに対応するオフセットを指定します。
メモリ不足エラー
非常に大きなファイルを読み込む場合、Octaveがメモリ不足になることがあります。
原因
- ファイルサイズが非常に大きく、読み込もうとしているデータがシステムのRAM容量を超えている。
トラブルシューティング
- 部分的に読み込む
dlmread
の範囲指定機能を使って、ファイルを小さなチャンクに分割して読み込み、処理します。 - textscan の利用
textscan
はdlmread
よりもメモリ効率が良い場合があります。特に、大きなファイルで特定の列だけが必要な場合に有効です。 - より多くのRAM
物理的なRAMを増設することを検討します。 - 64ビット版Octaveの使用
大量のメモリを扱うには、64ビット版のOctaveを使用していることを確認します。
空のファイルまたは破損したファイル
原因
- ファイルが破損している(部分的にしか書き込まれていないなど)。
- ファイルが空である。
- ファイルサイズの確認
ファイルエクスプローラーなどでファイルサイズが0でないか確認します。 - ファイル内容の確認
テキストエディタでファイルを開き、内容が意図した通りに存在するか確認します。
- エラーメッセージの注意深い読み取り
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
ではなく、textscan
や csv2cell
(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
は文字列を読み飛ばします。このため、10
と 30
が数値として読み込まれます。
例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では非推奨(readmatrix
や readtable
を推奨)とされていますが、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
が導入されました。これは、数値データを読み込むための推奨される方法であり、dlmread
や csvread
よりも多くのオプションと堅牢性を提供します。
特徴
dlmread
と同様に数値行列を返す。- ヘッダー行のスキップ、データ範囲の指定、欠損値の処理など、多くのオプション。
- 自動的な区切り文字検出。
dlmread
やcsvread
の機能を包含し、より強力。
基本的な使い方
% 例: 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
(またはcsvread
、readmatrix
)