mscanf 標準入力から入力を読み込む (C言語の scanf 関数へのインターフェイス)
mfscanf ストリームへのポインタから入力を読み込む (C言語の fscanf 関数へのインターフェイス)
msscanf 文字列から入力を読み込む (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)

## 引数

format

  残りのオペランドを書き込む際に使用されるフォーマットを記述する Scilab 文字列. `format`オペランドは, scanf_conversionに記述された C 言語の`printf`のフォーマット記述子にできるだけ 近くなるよう作成されています.

fd

  `mopen`により返された ファイル記述子. 値 -1 は直近にオープンされたファイルを指します.

str

  Scilab 文字列または文字列ベクトル.

niter

  整数, フォーマットの使用回数.

n

  整数: 読み込まれたデータの数または データを読み込む前にEOLに達した場合は -1.

v_i

  各関数は文字を読み込み,`format`に基づき解釈し, 結果をその出力引数に保存します. `n`個より多くの出力引数が指定された場合, 最後の変数`v_n+1, ..., v_m`が空の行列に設定されます.

L

  全てのデータが同種である場合, 戻り値の一つのベクトルに保存されます. そうでない場合,同じデータ型のシーケンスは 行列に保存され, 作成された全ての行列を含む (`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)   //数値

## 参照

- mclose
- meof
- mfprintf
- fprintfMat
- mfscanf
- fscanfMat
- mget
- mgetstr
- mopen
- mprintf
- mput
- mputstr
- mscanf
- mseek
- mtell
- mdelete
- scanf_conversion