Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
5.3.0 - 日本語

Change language to:
English - Français - Português

Please note that the recommended version of Scilab is 2024.0.0. This page might be outdated.
See the recommended documentation of this function

Scilab manual >> Files : Input/Output functions > mscanf

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 is based on C function fscanf. If you use '%f', '%g', '%e' as format your datas will be cast to float and returned in a scilab variable.

This scilab variable is a double then you can have some precision errors. In this case, it is better to use '%lg' format.

//----------------------------------------------------------
//--    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)   //数値
<< mfprintf Files : Input/Output functions mget >>

Copyright (c) 2022-2023 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Wed Jan 26 16:25:11 CET 2011