# mscanf

標準入力から入力を読み込む (C言語の scanf 関数へのインターフェイス)

# mfscanf

ストリームへのポインタから入力を読み込む (C言語の fscanf 関数へのインターフェイス)

# msscanf

文字列から入力を読み込む (C言語の sscanf 関数へのインターフェイス)

## 呼び出し手順

    [n,v_1,...v_n]=mfscanf([niter,]fd,format)
                L=mfscanf([niter,] fd,format)

                [n,v_1,...v_n]=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`により返されたfd パラメータが ファイル記述子(正の整数)として使用されます. -1 は直近にオープンされたファイルを指します.

str

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

niter

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

n

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

v_i

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

L

  全てのデータが同種である場合, 戻り値の一つのベクトルに保存されます. そうでない場合,同じデータ型のシーケンスは 行列に保存され, 作成された全ての行列を含む (`cblock`型を有する)`mlist` が返されます.

## 説明

`mfscanf` 関数はストリーム `fd` から文字を読み込みます.

`mscanf` 関数は Scilabウインドウから 文字を読み込みます.

`msscanf` 関数はScilab文字列 `str`から文字を読み込みます.

オプションのパラメータ`niter`は フォーマットの反復使用回数を指定します. 1回の反復は出力行列に1つの行を出力します. `niter==-1`の場合, 関数はファイル終端まで反復処理を行ないます. `niter` のデフォルト値は 1です.

精度に関するコメント :

mfscanf は,Cの関数 fscanfに基づいています. '%f', '%g', '%e'をフォーマットに指定した場合, データはfloatにキャストされ,scilab変数に出力されます.

このscilab変数がdoubleの場合,精度が劣化する可能性があります. このような場合は, '%lg' フォーマットを使用する方が良いでしょう.

## 例

    //----------------------------------------------------------
    //--    Simple use                                        --
    //----------------------------------------------------------
    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