[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2 Cスタイルの入出力関数

OctaveのCスタイル入出力関数は,C言語の標準入出力ライブラリの機能の大 部分を提供します。しかし,入力関数のいくつかについて,引数リストはわ ずかに異なっています。これは,Octaveには引数の参照渡しを行う方法がな いためです。

これ以降において,fileはファイル名を参照し,fidfopen によって返される整数のファイル番号を指します。

常に利用できる3つのファイルが存在します。これらのファイルは,対応する ファイル番号を用いてアクセスすることもできますが,以下の表で与えられる シンボル名を常に使用すべきです。なぜならば,これを使用することにより, プログラムが理解しやすくなるからです。

Built-in Variable: stdin

標準入力ストリームである(ファイル番号0)。Octaveを対話的に使用 しているとき,これはコマンドライン編集関数に渡されて(フィルタ) いる。

Built-in Variable: stdout

標準出力ストリームである(ファイル番号1)。標準出力に書き出される 出たは,通常,ページャに渡される。

Built-in Variable: stderr

標準エラーストリームである(ファイル番号2)。たとえページ区切りを オンにしていても,標準エラーはページに送られない。エラーメッセージや 待ち受けを出すときに有用である。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.1 ファイルのオープンとクローズ

Built-in Function: [fid, msg] = fopen (name, mode, arch)
Built-in Function: fid_list = fopen ("all")
Built-in Function: file = fopen (fid)

fopenの最初の形式では,指定したモード(読み込み限定,読み書き両用 など)とアーキテクチャ設定(IEEEビッグエンディアンやIEEEリトルエンディア ンなど)でファイルをオープンし,そのファイルを後で参照するために用いる整数 を返す。もしエラーが発生したならば,fidは-1にセットされ, msgには,対応するエラーメッセージが含まれる。modeは,その ファイルが読み込み,書き出し,あるいはその両方の,どの目的のためにオー プンされるかどうかを指定する1文字か2文字の文字列である。

fopenの2番めの形式では,fopen関数は,現時点でオープンして いる全てのファイル(stdinstdoutおよびstderrスト リームは除く)に対応するファイルIDのベクトルを返す。

fopenの3番めの形式では,fopen関数は,指定したファイルID をもっていて,現在のところオープンしているファイル名を返す。

たとえば,

 
myfile = fopen ("splat.dat", "r", "ieee-le");

この例は,読み出し専用でファイル`splat.dat'をオープンしている。 必要であれば,バイナリ形式の数値は,最下位ビットが最初に来るIEEEフォー マットで格納されていると仮定して読み込まれ,そのマシンで利用される形式 に変換される。

すでにオープンされているファイルを開くと,単に再びオープンを行い,別の ファイルIDを返す。異なるファイルIDを通して同じファイルに書き出すことは, 予期しない結果を招くこともあるが,あるファイルを何度もオープンすること はエラーではない。

`mode'がとり得る値を示す。

`r'

読み込み専用でファイルをオープンする。

`w'

書き出し専用でファイルをオープンする。以前の内容は捨てられる(上書き)。

`a'

ファイルの末端から書き出しを行うためにファイルをオープンするか新規作成する。

`r+'

読み書き両用で,すでに存在しているファイルを開く。

`w+'

読み書き両用でファイルを開く。以前の内容は捨てられる(上書き)。

`a+'

ファイルの末端から読み書きを行うためにファイルをオープンするか新規作成する。

モード文字列に加えて,"t"はテキストモードで,"b"はバイナリモードで オープンする。WindowsおよびMacintoshシステムでは,テキストモードは改行 (LF;linefeed)を,システムにとって適切な行終端文字(Windowsでは復帰改 行 CR-LF,Macintoshでは復帰 CR)へと変換する。モードを指定しないときに は,バイナリモードになる。

引数archは,そのファイルについての標準データフォーマットを指定す る。archに指定できる値を以下に示す。

`native' 現在のマシンのフォーマット(これが初期設定である)

`ieee-be' IEEEビッグエンディアン

`ieee-le' IEEEリトルエンディアン

`vaxd' VAX D floatingフォーマット

`vaxg' VAX G floatingフォーマット

`cray' Cray floating フォーマット

しかしながら,現在のところ,この変換は`native'`ieee-be' および`ieee-le'についてのみサポートしている。

Built-in Function: fclose (fid)

指定したファイルをクローズする。成功すると,fcloseは0を返し, そうでなければ-1を返す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.2 単純な出力

Built-in Function: fputs (fid, string)

ある文字列を,フォーマット無しでファイルに書き出す。

成功すると正の数を,エラーの場合はEOFを返す。

Built-in Function: puts (string)

ある文字列を,フォーマット無しで標準出力に書き出す。

成功すると正の数を,エラーの場合はEOFを返す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.3 行単位の入力

Built-in Function: fgetl (fid, len)

ファイルから,文字を読み込む。改行まで,あるいはEOFまで,または len文字読み込んだ後に停止する。読み込んだ文字を,末尾の改行 を除いた上で,文字列として返す。

lenを省略すると,fgetlは次の改行までの文字を読み込む。

もし読み込むべき文字がこれ以上ないならば,fgetlは-1を 返す。

Built-in Function: fgets (fid, len)

ファイルから,文字を読み込む。改行まで,あるいはEOFまで,または len文字読み込んだ後に停止する。読み込んだ文字を,末尾の改行 を付けたまま,文字列として返す。

lenを省略すると,fgetlは次の改行までの文字を読み込む。

もし読み込むべき文字がこれ以上ないならば,fgetlは-1を 返す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.4 フォーマット付き出力

この節は,printfや関連する関数の呼び出し方について説明して います。

以下の関数は,フォーマット付き出力のために利用可能です。これらは,同 名のC言語関数を真似たものですが,それらの関数はベクトルや行列の値を 表示するパフォーマンスを向上するために,異なるフォーマットテンプレー トを解釈します。

Built-in Function: printf (template, …)

テンプレート文字列templateに従って,オプション引数をstdoutに 表示する。

表示した文字数を返す。

Built-in Function: fprintf (fid, template, …)

この関数は,出力がstdoutの代わりにストリームfidに書き出す ことを除き,printfと同様である。

Built-in Function: sprintf (template, …)

この関数は,出力が文字列として返されることを除き,printfと同様 である。引数として適切なサイズの文字列を提供する必要があったCライブラリ 関数とは異なり,Octaveのsprintf関数は,変換したすべての項目が保持 するため,自動的にサイズを変更した文字列を返す。

printf関数は,任意の引数の数を表示するために使用することができ ます。関数の呼び出しのときに与えたテンプレート文字列の引数は,追加的な 引数の数についてだけでなく,その型およびそれらの出力のために使用される べきスタイルについての情報も提供します。

テンプレート文字列内の通常の文字は,単にそのまま出力ストリームに書き 出されます。一方,テンプレート内に`%'文字で始まる 変換指定(conversion specifications)は,それに続く引数をフォー マットし,出力ストリームに書き出すようにします。たとえば,

 
pct = 37;
filename = "foo.txt";
printf ("Processing of `%s' is %d%% finished.\nPlease be patient.\n",
        filename, pct);

このコードは,以下のように出力します。

 
Processing of `foo.txt' is 37% finished.
Please be patient.

この例は,スカラの引数を10進数で表示するように指定する`%d'変換子, 文字列の引数を表示するように指定する`%s'変換子,および文字 `%'そのものを表示するための`%%'変換子の利用を示したものです。

整数の引数を符号無し8進数,10進数あるいは16進数として表示するための 変換子もあります(それぞれ`%o'`%u'あるいは`%x')。 ならには,文字の値(`%c')も表示できます。

浮動小数点数値は,通常,`%f'変換子を使用して固定小数点表記したり, `%e'変換子を使用して指数表記で表示することができます。`%g' 変換子は,ある数値の大きさに対してより適切な表記によって,`%e'`%f'フォーマットを使い分けます。

`%'と適用する変換を表す文字の間に修正子を書くことにより,より 詳細なフォーマットをコントロールすることができます。これは,変換の通常の 挙動をわずかに変更します。たとえば,大部分の変換指定は,最小のフィールド 幅やフィールド内の左寄せや右寄せにするかどうかを合図できるようにします。

特定のフラグや許容される修正子とその解釈は,特定の変換に依存します。 それらは以降の節において,より詳細に解説されています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.5 行列の出力変換

行列の値が与えられたとき,Octaveのフォーマット付き出力関数は,その行列 の全ての値が出力されるまで,書式テンプレートを繰り返し適用します。たと えば,以下のようになります。

 
printf ("%4.2f %10.2e %8.4g\n", hilb (3));

     -| 1.00   5.00e-01   0.3333
     -| 0.50   3.33e-01     0.25
     -| 0.33   2.50e-01      0.2

もし複数の値が,一度の呼び出しで表示されるならば,1つの値から次の値まで 移動するときには,出力関数は書式テンプレートの最初には戻りません。この ことは,行列内の要素数が,書式フォーマットにおいて変換する数のちょうど 倍数になっていないときには,よく分からない出力になることがあります。 以下の例を参照してください。

 
printf ("%4.2f %10.2e %8.4g\n", [1, 2], [3, 4]);

     -| 1.00   2.00e+00        3
     -| 4.00

もしこれを望まないならば,1回の呼び出しで出力しようとせずに,何度も 呼び出しを繰り返してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.6 出力変換の記述方法

このセクションでは,printfのテンプレート文字列に現れるであろう 変換指定子の細かな記述方法についての詳細を述べています。

テンプレート文字列内にあって,変換指定子ではない文字は,そのまま ストリームに表示されます。

printfのテンプレート文字列における変換指定子は,以下のような一般 的な形式をとります。

 
% flags width [ . precision ] type conversion
(% フラグ  [ . 精度 ]  変換方法

たとえば,変換指定子`%-10.8ld'について,`-'はフラグであり, `10'はフィールド幅を指定し,精度は`8'であり,`l'という 文字は型修飾子であって,`d'は変換のスタイルである(この例につい て言えば,数値の引数を,10進数表記,最低10文字幅となるフィールドに8桁 以内の左寄せで表示せよということである)。

より詳細に言えば,出力変換方法の指定は,最初に`%'で開始し, 以下の順で並べた文字で構成されます。

許容される正確なオプションと,それがどのように解釈されるのかは,異なる変換 指定子のあいだで変化する。使用する特定のオプションについての情報は,個々の 変換に関する解説を参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.7 出力変換の表

全てのさまざまな変換が行うことをまとめた表を示します。

`%d', `%i'

整数を符号付き10進数として表示します。詳細は整数の変換 を参照してください。`%d'`%i'は,出力に対して同じ意味ですが, 入力に対するscanfで使用するときには異なる意味になります (入力変換の表を参照してください)。

`%o'

整数を符号なし8進数として表示します。詳細は整数の変換 を参照してください。

`%u'

整数を符号なし10進数として表示します。詳細は整数の変換 を参照してください。

`%x', `%X'

整数を符号なし16進数として表示します。`%x'は小文字を,`%X'は 大文字を使用します。詳細は整数の変換を参照してください。

`%f'

浮動小数点数を通常の(固定小数点)表記で表示します。詳細は 浮動小数点数の変換を参照してください。

`%e', `%E'

浮動小数点数を指数表記で表示します。`%e'は小文字を,`%E'は 大文字を使用します。詳細は浮動小数点数の変換を参照して ください。

`%g', `%G'

浮動小数点数を通常の(固定小数点)表記または指数表記のどちらかで表示 します。数値の大きさに対してより適切な方法で表示します。`%g'は 小文字を,`%G'は大文字を使用します。詳細は 浮動小数点数の変換を参照してください。

`%c'

1文字を表示します。他の出力の変換を参照してください。

`%s'

文字列を表示します。他の出力の変換を参照してください。

`%%'

`%'という文字そのものを表示します。 他の出力の変換を参照してください。

もし変換識別子の記述方法が妥当なものでなければ,予測できないことが起こ り,表示が行われないでしょう。もしテンプレート文字列内の全ての変換指定 子について値を与えるために提供する引数が充分でなければ,あるいはその引 数が正しい型でなければ,結果は予測不能です。もし変換指定子よりも多くの 引数を与えるならば,余分な引数値は単に無視されます;これは,ときに有用 です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.8 整数の変換

この節では,`%d'`%i'`%o'`%u'`%x'および `%X'変換指定子のオプションについて解説します。これらの変換では, さまざまなフォーマットで整数を表示します。

`%d'`%i'変換指定子は,数値引数を符号付き10進数として表示し ます;一方で,`%o'`%u'および`%x'は数値引数を,それぞれ 符号なし8進数,10進数,16進数として表示します。`%X'変換指定子は, `%x'と同じですが,桁として`abcdef'のかわりに`ABCDEF'とい う文字を使用することが異なっています。

以降のフラグが意味を持ちます。

`-'

そのフィールドで左寄せにします(通常の右寄せに代えて)。

`+'

符号付きの`%d'および`%i'変換指定子について,その値が 正であればプラス記号を表示します。

` '

符号付きの`%d'および`%i'変換指定子について,その結果が プラスまたはマイナス記号で開始しなければ,かわりに空白文字を先頭に 付けます。`+'フラグは結果に記号が含まれるようにしますが,その フラグとこれを両方とも与えるならば,このフラグは無視されます。

`#'

`%o'変換子について,このフラグは,あたかも精度が増えたかのように, 先頭の桁が`0'になるようにします。`%x'または`%X'につい て,このフラグは,結果の先頭にそれぞれ`0x'または`0X'を付加し ます。これは,`%d'`%i'あるいは`%u'変換指定子については 何も有効ではありません。

`0'

スペースの代わりに,フィールドをゼロで埋めます。符号あるいはベースを認識 した後にゼロを配置します。`-'フラグも指定されているか,精度が指定さ れていれば,このフラグは無視されます。

もし精度が与えられていれば,これは表示する最小桁数を指定します。もし必要 であれば,先頭にゼロが含まれます。もし精度を指定しないならば,その数値は, 必要になるできるだけ多くの桁数で表示します。もし精度ゼロで0という値を変 換すると,何も文字が表示されません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.9 浮動小数点数の変換

この節では,浮動小数点数に対する変換指定子,すなわち `%f'`%e'`%E'`%g'および`%G' について論じます。

`%f'変換子は,その引数を,[-]ddd.ddd なる形式の固定小数点表記で表示します。ここで小数点以下の桁数は,指定し た精度によってコントロールされます。

`%e'変換子は,その引数を, [-]d.ddde[+|-]dd なる形式の指数表記で表記します。また,小数点以下の桁数は,指定した精度に よってコントロールされます。指数は,常に少なくも2桁が含まれます。`%E' 変換子も同様ですが,指数を`e'の代わりに`E'で表すことが異なりま す。

`%g'および`%G'変換子は,指数部分が-4以下もしくは精度以上である ときには,それぞれ`%e'または`%E'の形式で表示します。そうでなけ れば,`%f'形式を使用します。末尾のゼロは結果の分数部分から取り除か れ,後ろに桁が続くときにのみ小数点が表示される。

以下のフラグは,その挙動を修飾するために使用できます。

`-'

そのフィールドで左寄せにします。通常,結果は右寄せになります。

`+'

結果に,常にプラスまたはマイナスの符号を含めます。

` '

もしその結果がプラスまたはマイナスの符号で開始しなければ,かわりに先 頭にスペースを付加します。`+'フラグは,その結果に符号を含むように するので,このフラグと両方を当てると,このフラグは無視されます。

`#'

たとえ小数点以下に桁が無くとも,結果が常に小数点を含むように指定しま す。`%g'および`%G'変換子について,このフラグは,小数点以降 に続くゼロが,取り除かれずにそのままにする。

`0'

スペースの代わりに,フィールドをゼロで埋めます。符号あるいはベースを認識 した後にゼロを配置します。`-'フラグも指定されているか,精度が指定さ れていれば,このフラグは無視されます。

精度指定子は`%f'`%e'および`%E'変換子に対して,小数点 以下に何桁続くかを指定します。これらの変換子について,初期設定の精度は 6です。もしその精度が明示的に0であれば,小数点文字を表示 しません。`%g'および`%G'変換子について,その精度は,表示すべ き有効桁が何桁かを指定します。有効桁は小数点以前の最初の桁と,小数点以 下の全ての桁です。`%g'および`%G'に対して,精度が0また は未指定ならば,1という値のように扱われます。もし表示される値が 指定した桁数では詳細に表現できないならば,その値は適合する最も近い数に 丸められます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.10 他の出力の変換

この節では,printfに対するその他の変換子について解説します。

`%c'変換子は1文字を表示します。`-'フラグは,そのフィールドで 左寄せを指定するために使用できますが,他のフラグは何も指定されず,精度 あるいは型修飾子は何も与えることはできません。たとえば,

 
printf ("%c%c%c%c%c", "h", "e", "l", "l", "o");

これは`hello'と表示します。

`%s'変換子は文字列を表示します。対応する引数は,文字列でなければ なりません。精度は,書き出す最大の文字数を指示するために指定することが できます。一方,文字列内のnullで終わるまでの文字(nullは含まない)は, 出力ストリームに書き出されます。`-'フラグは,そのフィールドで左寄 せを指定するために使用できますが,他のフラグは何も指定されず,精度ある いは型修飾子は何も与えることはできません。たとえば,

 
printf ("%3s%-6s", "no", "where");

は,` nowhere '(先頭と末尾にスペースを含みます)と表示します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.11 フォーマット付き入力

Octaveは,フォーマット付き入力を読み込むために,scanffscanfおよびsscanf関数を提供しています。これらの関数の各々 には,2つの使い方が存在します。1つめは,ファイルからデータのベクトルを展 開するため,もうひとつは,より「Cライク」なものです。

Built-in Function: [val, count] = fscanf (fid, template, size)
Built-in Function: [v1, v2, …, count] = fscanf (fid, template, "C")

1番めの形式において,templateにならってfidから読み込み, 行列valとして結果を返す。

オプション引数sizeは,読み込むべきデータの総量を指定する。これは, 以下のうちどれか1つをとる。

Inf

可能な限り読み込み,列ベクトルを返す。

nr

nr個めの要素まで読み込み,列ベクトルを返す。

[nr, Inf]

可能な限り読み込み,nr行の行列を返す。もし読み込んだ要素数がきち んとnrの倍数になっていないならば,最後の列はゼロで埋められる。

[nr, nc]

nr * nc個の要素まで読み込み,nr行の行列を返す。 もし読み込んだ要素数がきちんとnrの倍数になっていないならば, 最後の列はゼロで埋められる。

sizeを省略すると,Infという値を仮定する。

もしtemplateに文字変換のみを指定すると,文字列を返す。

正常に読み込めた項目の数は,countに返る。

2番めの形式において,単一スカラの戻り値に対応するtemplateの 各変換識別子として,templateにならってfidから読み込む。 この形式は,より「C言語寄り」であり,Octaveの以前のバージョンと互換 性がある。変換に成功した数は,countに返される。

Built-in Function: [val, count] = sscanf (string, template, size)
Built-in Function: [v1, v2, …, count] = sscanf (string, template, "C")

これはfscanfのような関数であるが,文字をストリームの代わりに文字列 stringから得ることが異なっている。その文字列の終端に達することは, ファイルの末端(end-of-file)の状態であるとして扱われる。

scanfを呼び出すことは,任意の引数がテンプレート文字列のコントロー ル下で読み込まれるということについて,表面的にはprintfを呼ぶこと と等価です。テンプレート文字列内の変換識別子の表記法がprintfの それと非常に似ている一方で,テンプレートの解釈は,固定フィールドではな く,フォーマットなし入力で単にパターンマッチング向きです。たとえば,大 部分のscanf変換では,入力ファイル内の任意の数の「ホワイトスペー ス」(空白文字,タブおよび改行)を読み飛ばし,さらに,数値入力について は,出力変換に存在するような精度の概念がありません。通常は,テンプレー ト内のホワイトスペース以外の文字は,入力ストリーム内の文字に正確に一致 すると期待されます。

マッチングの失敗が発生するとき,scanfは直ちに終了し,マッ チしなかった最初の文字をそのストリームから読み込むべき次の文字として残 します。そしてscanfはうまく変換した全ての項目を返します。

フォーマット付き入力関数は,フォーマット付き出力関数と同じ頻度で使用さ れることはありません。理由の一部としては,それら関数を適切に使うには注 意を要するからです。別の理由は,マッチエラーから復帰することが難しいこ とです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.12 入力変換の記述方法

scanfのテンプレート文字列は,`%'で始まる変換識別子を交えた 通常の文字列を含みます。

テンプレートにある任意のホワイトスペース文字は,入力ストリームにおける 任意の数のホワイトスペースを読み込んで捨てます。マッチするホワイトスペー ス文字は,テンプレート文字列に登場するホワイトスペースと厳密に同じであ る必要はありません。たとえば,前後にホワイトスペースを伴うカンマを認識 させるには,テンプレートに` , 'を書いてください。

テンプレート文字列内の,変換識別子の一部ではない他の文字は,入力スト リームにおける文字列に厳密に一致しなければならない。もしこのケースに 合わなければ,マッチングの失敗が発生します。

scanfのテンプレート文字列内の変換指定子は,以下のような一般的な 形式になります。

 
% flags width type conversion

より詳細に言えば,入力変換方法の指定は,最初に`%'で開始し, 以下の順で並べた文字で構成されます。

許容される正確なオプションと,それがどのように解釈されるのかは,異なる変換 指定子のあいだで変化する。使用する特定のオプションについての情報は,個々の 変換に関する解説を参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.13 入力変換の表

各種変換指定子をまとめた表を示します。

`%d'

10進数で書かれた符号付き(あるいは符号なし)整数にマッチします。 数値入力の変換子を参照してください。

`%i'

C言語で整数の定数を指定するための任意のフォーマットによる符号付き(ある いは符号なし)整数にマッチします。 数値入力の変換子を参照してください。

`%o'

8進数表記で書かれた符号付き(あるいは符号なし)整数にマッチします。 数値入力の変換子を参照してください。

`%u'

10進数で書かれた符号なし整数にマッチします。 数値入力の変換子を参照してください。

`%x', `%X'

16進数で書かれた符号なし整数にマッチします。 数値入力の変換子を参照してください。

`%e', `%f', `%g', `%E', `%G'

符号付き(あるいは符号なし)浮動小数点数にマッチします。 数値入力の変換子を参照してください。

`%s'

ホワイトスペース以外の文字のみを含む文字列にマッチします。 文字列入力の変換子を参照してください。

`%c'

1文字以上の文字列にマッチします。読み込んだ文字数は,変換子に与えられた 最大フィールド幅によってコントロールされます。 文字列入力の変換子を参照してください。

`%%'

これは,入力ストリーム内で`%'文字そのものにマッチします。対応する 引数はありません。

もし変換指定子の記述が妥当なものでなければ,その挙動は定義されません。 代入を実行するテンプレート文字列における全ての変換指定子についてアドレ スを提供するために与えられる十分な関数がない,あるいはその引数が正しい 型でないならば,その挙動も定義されません。一方で,余分な引数は単に無視 されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.14 数値入力の変換子

この節は数値を読み込むためのscanf変換子について説明します。

`%d'変換子は,10進の符号付き(あるいは符号なし)整数にマッチしま す。

C言語で整数の定数を指定するための任意のフォーマットによる符号付き(ある いは符号なし)整数にマッチします。

たとえば,`%i'変換子のもとでは,`10'`0xa'あるいは `012'のどの文字列も整数として読み込むことができます。これら各々は 10進数10という数値を指定します。

`%o'`%u'および`%x'は,それぞれ8進数,10進数および16進数 の符号なし整数にマッチします。

`%X'変換子は`%x'と同一です。それらは桁として大文字と小文字の どちらも許容します。

C言語のscanfとは異なり,Octaveは`h'`l'および`L' 修飾子を無視します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.15 文字列入力の変換子

この節では,文字列と文字を読み込むためのscanf入力変換子(`%s'`%c')について説明しています。

`%c'変換子は最もシンプルです。これは常に固定文字数にマッチします。 最大フィールドは,何文字読み込むかを伝えます。もし最大値を指定しなけれ ば,初期値は1です。この変換子は,最初にあるホワイトスペース文字を読み飛 ばしません。この変換子は,精密に次のn文字を読み込み,読み込めない ならば失敗します。

`%c'変換子は,ホワイトスペース以外の文字列にマッチします。これは 最初にあるホワイトスペース文字を読み飛ばしますが,読み込んだ文字列の 後ろでホワイトスペースに遭遇すると停止します。

たとえば,以下の入力を読み込みます。

 
 hello, world

これを`%10c'で変換すると," hello, wo"という文字列になり ますが,同じ入力を`%10s'変換子は"hello,"を生み出します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.16 バイナリ入出力

Octaveはfreadfwrite関数を使用することにより,バイナリ データを読み書きすることができます。これは同名の標準C言語を真似たもの です。この関数は,整数データのバイト順を自動的に入れ替えることができ, データが読み込まれたときにサポートする浮動小数点フォーマット間で変換 することができます。

Built-in Function: [val, count] = fread (fid, size, precision, skip, arch)

指定したファイルIDfidから,型precisionのバイナリデータを読み 込む。

オプション引数sizeは,読み込むべきデータの総量を指定する。これは, 以下のうちの1つをとる。

Inf

可能な限り読み込み,列ベクトルを返す。

nr

nr個めの要素まで読み込み,列ベクトルを返す。

[nr, Inf]

可能な限り読み込み,nr行の行列を返す。もし読み込んだ要素数がきち んとnrの倍数になっていないならば,最後の列はゼロで埋められる。

[nr, nc]

nr * nc個の要素まで読み込み,nr行の行列を返す。 もし読み込んだ要素数がきちんとnrの倍数になっていないならば, 最後の列はゼロで埋められる。

sizeを省略すると,Infという値を仮定する。

追加の引数precisionは,読み込むべきデータの型を指定する文字列で あり,以下のうちの1つをとる。

"schar"
"signed char"

符号付き文字

"uchar"
"unsigned char"

符号なし文字

"int8"
"integer*1"

8ビット符号付き整数

"int16"
"integer*2"

16ビット符号付き整数

"int32"
"integer*4"

32ビット符号付き整数

"int64"
"integer*8"

64ビット符号付き整数

"uint8"

8ビット符号なし整数

"uint16"

16ビット符号なし整数

"uint32"

32ビット符号なし整数

"uint64"

64ビット符号なし整数

"single"
"float32"
"real*4"

32ビット浮動小数点数

"double"
"float64"
"real*8"

64ビット浮動小数点数

"char"
"char*1"

単一文字

"short"

単精度整数(サイズはプラットフォーム依存)

"int"

整数(サイズはプラットフォーム依存)

"long"

倍精度整数(サイズはプラットフォーム依存)

"ushort"
"unsigned short"

符号なし単精度整数(サイズはプラットフォーム依存)

"uint"
"unsigned int"

符号なし整数(サイズはプラットフォーム依存)

"ulong"
"unsigned long"

符号なし倍精度整数(サイズはプラットフォーム依存)

"float"

単精度浮動小数点数(サイズはプラットフォーム依存)

初期設定の精度は,"uchar"である。

引数precisionは,任意の反復カウントを指定することもできる。 たとえば,`32*single'は32個の単精度浮動小数点数のブロックを 読み込むことになる。ブロックによる読み込みは,引数skipと組み 合わせると有用である。

引数precisionは,型変換も指定することができる。たとえば, `int16=>int32'は16ビット整数値を読み込んで32ビット整数の配列を 返す。標準設定により,freadは倍精度配列を返す。特別な表記 `*TYPE'`TYPE=>TYPE'を短縮したものである。

変換と反復回数は組み合わせることができる。たとえば, `32*single=>single'は単精度浮動小数点値のブロックを読み込み, 標準の倍精度値配列のかわりに単精度値を返すようになる。

追加の引数skipは,各々の要素(あるいは要素のブロック)を読み 込んだ後,読み飛ばすべきバイト数を指定する。もしこれを指定しない ならば,0が指定されたものと仮定する。もし読み込んだ最後のブロック が完了しないならば,最初のスキップは省略される。たとえば,

 
fread (f, 10, "3*single=>single", 8)

この式は,最後の8バイトのスキップを省略する。なぜならば,最後の読み込み が,3値の完全なブロックにはならないからである。

オプション引数archは,そのファイルについてのデータフォーマットを指定 する文字列である。以下の値が利用できる。

"native"

そのマシンのフォーマット

"ieee-be"

IEEEビッグエンディアン

"ieee-le"

IEEEリトルエンディアン

"vaxd"

VAX D floatingフォーマット

"vaxg"

VAX G floatingフォーマット

"cray"

Cray floating フォーマット

現在のところ,この変換は`native'`ieee-be'および`ieee-le' についてのみサポートしている。

そのファイルから読み込んだデータは,valに返される。また,読み込 んだ値の数はcountに返される。

Built-in Function: count = fwrite (fid, data, precision, skip, arch)

precisionのバイナリデータを,指定したファイルIDfidに書き 出し,正常にファイルへ書き込んだ値の数を返す。

引数dataは,ファイルに書き込まれることになる値の行列である。この値 は,行方向に要素が連続しているように展開される(Fortranの配列順)。

残りの引数precisionskipおよびarchは,オプションであ り,freadの解説にあるように解釈される。

もしdataの値が大きすぎて指定した精度に当てはまらないならば, fwriteの挙動は定義されない。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.17 テンポラリファイル

Built-in Function: [fid, name, msg] = mkstemp (template, delete)

templateから生成される一意な名前を持つ,新規テンポラリファイルに 対応するファイルIDを返す。templateの最後の6文字はXXXXXXで なければならず,それらは一意なファイル名を作るための文字列に置き換えら れる。そのファイルは,読み書き両用モードで,システムに依存したパーミッ ション(GNU/Linuxシステムでは,glibc 2.0.7以降に対して0600となる) で生成される。このファイルは,O_EXCLフラグ付きでオープンされる。

もしオプション引数deleteが与えられ,これが真ならば,そのファイル はOctaveの終了時,またはpurge_tmp_files関数が呼ばれたときに自動 的に削除される。

この関数が成功すると,fidは妥当なファイルID,nameはファイ ル名,およびmsgは空文字列となる。そうでなければ,fidは -1,nameは空に,そしてmsgはシステム依存のエラーメッ セージとなる。

Built-in Function: [fid, msg] = tmpfile ()

一意な名前を持つ新規テンポラリファイルに対応するファイルIDを返す。 このファイルはバイナリの読み書き両用モード("w+b")でオー プンされる。このファイルは,クローズされるかOctaveが終了するときに 自動的に削除される。

この関数が成功すると,fidは妥当なファイルID,msgは空文 字列となる。そうでなければ,fidは-1,msgはシス テム依存のエラーメッセージとなる。

Built-in Function: tmpnam (dir, prefix)

一意なテンポラリファイル名を文字列として返す。

prefixを省略すると,"oct-"という値が使用される。 dirも省略すると,テンポラリファイルを作成するための標準的なディ レクトリが使用される。もしdirを与えるならば,それが存在していな ければならない。存在していなければ,標準的なディレクトリが使用される。 tmpnamによって名付けられたファイルはオープンされていないので, 自分でオープンしようとするときには,すでに利用可能では無くなっている という可能性がある(それほど起こりえないことだろうが)。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.18 ファイルの終端とエラー

Built-in Function: feof (fid)

与えられたファイルが,すでに読み終わった状態(end-of-file)にあれば1を, そうでなければ0を返す。これは,そのファイルがすでにファイル末尾まで読み 終わっているときに1を返すものであり,次の操作によってその状態になるだろ うということではないことに注意せよ。

Built-in Function: ferror (fid)

与えられたファイルについてエラー状態にあれば1を,そうでなければ0を 返す。これはエラーがすでに起こったときにのみ1を返すことになり,次の 操作がエラー状態に陥るだろうということではないことに注意せよ。

Built-in Function: freport ()

オープンされているファイル名,読み込み専用,書き出し専用,あるいは読み 書き両用かどうかのリストを表示する。例を示す。

 
freport ()

     -|  number  mode  name
     -| 
     -|       0     r  stdin
     -|       1     w  stdout
     -|       2     w  stderr
     -|       3     r  myfile

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2.19 ファイル内のポジション指定

与えられたファイルに対するファイルポインタのポジションをセットし,決定する ために3つの関数が利用できます。

Built-in Function: ftell (fid)

ファイルポインタの位置を,ファイルfidの先頭からの文字数として 返す。

Built-in Function: fseek (fid, offset, origin)

ファイルポインタを,ファイルfid内の任意の位置へセットする。

そのポインタは,originからoffset文字めに配置する。origin は,あらかじめ定義された変数SEEK_CUR(現在の位置),SEEK_SET (ファイルの先頭),SEEK_END(ファイルの末端),あるいは文字列 "cof","bof","eof"のいずれか1つを使うのがよい。オフセットはゼロで なければならず,そうでなければftellによって返される値とする (その場合,originSEEK_SETでなければならない)。

成功すると0,エラーの場合は-1を返す。

Built-in Variable: SEEK_SET
Built-in Variable: SEEK_CUR
Built-in Variable: SEEK_END

これらの変数は,関数fseekの3番めの引数として使用されることになる。

SEEK_SET

ファイルの先頭からの相対位置を指定する。

SEEK_CUR

現在位置からの相対位置を指定する。

SEEK_END

ファイルの末端からの相対位置を指定する。

Built-in Function: frewind (fid)

ファイルfidのファイルポインタを,先頭に移動する。成功すると0を, エラーが発生すると-1を返す。これは fseek (fid, 0, SEEK_SET)と等価である。

以下の例は,現在のファイルポジションを変数markerに格納し, ファイルの先頭にポインタを移動させ,4文字読み込み,もとのポジションを 返します。

 
marker = ftell (myfile);
frewind (myfile);
fourch = fgets (myfile, 4);
fseek (myfile, marker, SEEK_SET);

[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated on July, 20 2006 using texi2html 1.76.