Development Environment | ![]() ![]() |
書式付きASCIIデータを読み込む
関数 fscanf
は、標準C関数fscanf
に類似する関数です。関数fscanf
と関数fscanf
は、共に、ファイルから一つの行を読み取り、1つまたはそれ以上の変数に割り当てるという互いによく似た挙動を示します。また、この2つの関数は、入力データをどのように解釈するかを制御する同一の変換設定子を使用しています。
関数 fscanf
に対する変換設定子は、%
キャラクタで始まります。Cと共通で、よく利用する変換設定子としては、つぎのものをあげることができます。
%s
:文字列に揃える%d
:10進法ベースの整数値に揃える%g
:倍精度の浮動小数点値に揃えるMATLABとCの関数fscanf
は、互いに非常によく似ていますが、わずかに異なる部分も見受けられます。たとえば、つぎの内容をもつファイルmoon.dat
を使って考えてみましょう。
3.654234533 2.71343142314 5.34134135678
つぎのコードは、このファイルを構成する3要素全てをMyData
と名付けられた行列に読み込みます。
fid = fopen('moon.dat','r'); MyData = fscanf(fid,'%g'); status = fclose(fid);
このコードでは、全くループが使われていない点に注目してください。代わりに、関数fscanf
は、入力の書式が、書式設定子と整合性をもつ限り、テキストの中でデータを読み続けます。
オプションで設定するサイズ引数は、読み込む要素の数を制御します。たとえば、fid
が整数文字列を含む開いた状態のファイルを指示しているとしましょう。このとき、つぎのコマンドは、列ベクトルA
の中に100個の整数値を読み込みます。
A = fscanf(fid,'%5d',100);
つぎのラインは、100個の整数値を10行10列A
に読み込みます。
A = fscanf(fid,'%5d',[10 10]);
関数fscanf
に関連する関数 sscanf
は、ファイルではなく文字列から読み込みを行います。たとえば、つぎのラインは、2と平方根からなる列ベクトルを出力します。
root2 = num2str([2, sqrt(2)]); rootvalues = sscanf(root2,'%f');
![]() | テキストファイルから文字列を1行ずつ読み込む | 書式付きテキストファイルを書き込む | ![]() |