標準入力から入力を読み込む (C言語の scanf 関数へのインターフェイス)
ストリームへのポインタから入力を読み込む (C言語の fscanf 関数へのインターフェイス)
文字列から入力を読み込む (C言語の sscanf 関数へのインターフェイス)
[n, v_1,..., v_m] = mfscanf([niter,]fd, format) L = mfscanf([niter,] fd,format) [n, v_1,..., v_m] = mscanf([niter,] format) L = mscanf([niter,]format) [n, v_1,..., v_m] = msscanf([niter,]str, format) L = msscanf([niter,] str, format)
残りのオペランドを書き込む際に使用されるフォーマットを記述する
Scilab 文字列. format
オペランドは,
scanf_conversionに記述された
C 言語のprintf
のフォーマット記述子にできるだけ
近くなるよう作成されています.
mopen
により返された
ファイル記述子.
値 -1 は直近にオープンされたファイルを指します.
Scilab 文字列または文字列ベクトル.
整数, フォーマットの使用回数.
整数: 読み込まれたデータの数または データを読み込む前にEOLに達した場合は -1.
各関数は文字を読み込み,format
に基づき解釈し,
結果をその出力引数に保存します.
n
個より多くの出力引数が指定された場合,
最後の変数v_n+1, ..., v_m
が空の行列に設定されます.
全てのデータが同種である場合,
戻り値の一つのベクトルに保存されます.
そうでない場合,同じデータ型のシーケンスは
行列に保存され, 作成された全ての行列を含む
(cblock
型を有する)mlist
が返されます.
mfscanf
関数はストリームfd
から文字を読み込みます.
mfscanf
関数は Scilabウインドウから
文字を読み込みます.
mfscanf
関数はScilab文字列
str
から文字を読み込みます.
オプション引数niter
は
フォーマットの反復使用回数を指定します.
1回の反復は出力行列に1つの行を出力します.
niter==-1
の場合,
関数はファイル終端まで反復処理を行ないます.
niter
のデフォルト値は 1です.
精度に関するコメント :
mfscanf
は,Cの関数fscanf
に基づいています.
'%f'
,
'%g'
, '%e'
をフォーマットに指定した場合,
データはfloatにキャストされ,Scilab変数に出力されます.
このScilab変数がdoubleの場合,精度が劣化する可能性があります.
このような場合は, '%lg'
フォーマットを使用する方が良いでしょう.
//---------------------------------------------------------- //-- 簡単な例 -- //---------------------------------------------------------- s='1 1.3' //文字列 [n,a,b]=msscanf(s,"%i %e") L=msscanf(s,"%i %e") //---------------------------------------------------------- //-- フォーマットのサンプル -- //---------------------------------------------------------- msscanf(" 12\n",'%c%c%c%c') //スキャン文字列 msscanf('0xabc','%x') //16進形式でスキャン msscanf('012345abczoo','%[0-9abc]%s') //[] 表記 // float および doubleを読み込み msscanf('4345.988','%g')-4345.988 // floatとしてスキャン msscanf('4345.988','%lg')-4345.988 // doubleとしてスキャン //---------------------------------------------------------- //-- 複数行のデータファイルをスキャン -- //---------------------------------------------------------- //データを有するファイルを作成 u=mopen(TMPDIR+'/foo','w'); t=(0:0.1:%pi)';mfprintf(u,"%6.3f %6.3f\n",t,sin(t)) mclose(u); u=mopen(TMPDIR+'/foo','r'); // 読み込むファイルをオープン //read the file line by line [n,a,b]=mfscanf(u,'%e %e') //最初の行に複数の出力引数構文を適用 l=mfscanf(u,'%e %e') //2行目に単一の出力引数構文を適用 //niterを使用して更に5つの行を読み込む l=mfscanf(5,u,'%e %e') //ファイル終端まで読み込むために niter=-1 を使用 l=mfscanf(-1,u,'%e %e') mclose(u); //ファイルを閉じる //---------------------------------------------------------- //-- scanning multi-line strings vectors -- //---------------------------------------------------------- //文字列ベクトルをスキャンするためにniterを使用 [n,Names,Ages]=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d') D=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d') typeof(D) Names=D(:,1) //文字列 Age=D(:,2) //数値 | ![]() | ![]() |