GNU Octave 2.1.x 日本語マニュアル/入力と出力
16 入力と出力
[編集]入出力関数は,明確に2つに分類できます。 1群めは,Matlab で利用できる関数を真似たものです。 2群めは,C言語で使用されている標準I/Oライブラリを真似たものであり,さらなる柔軟性と出力の制御を提供してくれます。
対話的に実行しているとき,Octave は通常,端末の1画面の長さに収まらない出力を,lessやmoreといったページャ (1画面単位で表示するプログラム)に送ります。 これにより,多量の出力が,読む前に流れてしまうという問題を回避します。 less(あるいはmoreの一部のバージョン)を使用すると,前方や後方に移動したり,特定の項目を検索したりできます。
通常,Octave がトップレベルプロンプトの表示を準備する直前,あるいは標準入力から読み込む (たとえばfscanfやscanf関数を使用する)直前まで,ページャによる出力の表示は行われません。 これは,もしあなたが1 個のコマンドステートメントで,かなりの量の作業を実施しようとするならば,何らかの出力がスクリーンに現れる前に, いくらかの遅れが存在することを意味します。 関数fflushは,出力を強制的にページャ(あるいは任意の他のストリーム)へと直ちに送るために使えるでしょう。
変数PAGERに値をセットすることにより,ページャとして実行するためのプログラムを選ぶことができます。 また,変数page_screen_outputの値を0 にセットすることにより,ページごとの表示をやめることができます。
more
[編集][Command]
more on
[編集][Command]
more off
[編集][Command]
出力のページ区切りをするかどうかを切り替えます。 引数を付けないときは,現在のオンとオフを切り替えます。
PAGER
[編集][Built-in Variable]
初期値は,ふつうは"less","more"あるいは"pg" です。 これは利用しているシステムにどんなプログラムがインストールされているかに依存します。 付記C [Installation]を参照してください。
対話的に実行しているとき,Octave は,端末の1 画面の長さに収まらない出力を,変数PAGERの値の名前を持つプログラムに送ります。
page_screen_output
[編集][Built-in Variable]
もしpage_screen_outputがゼロでないならば,1ページよりも長い全ての出力は,ページャに送られます。 これは,一度に1 画面ずつ眺められるようにするものです。 ページャの中には (lessのような?付記C [Installation]を参照のこと),出力の後方へさかのぼる機能を持つものがあります。 初期値は1 です。
page_output_immediately
[編集][Built-in Variable]
もし,page_output_immediatelyの値がゼロでないならば,Octaveは,出力が得られるとすぐにページャに送ります。 そうでなければ,Octave はその出力をバッファリングし,その出力をページャに流すため,プロンプトが表示される直前まで待機します。
fflush (fid)
[編集][Built-in Function]
出力をfid にフラッシュします。 これは,全ての保留中の出力を,他のイベントが発生する前にスクリーンへと出そうとするときに便利です。 たとえば,inputを呼ぶ前に標準出力ストリームをフラッシュすることは,いつもよい心がけです。 fflushは成功時に0を,エラー時にはOSに依存するエラー値(UNIXでは!1)を返します。
16.1 基本的な入出力
[編集]16.1.1 端末への出力
[編集]Octave は通常,式が評価されるとすぐにその値を表示するので,すべてのI/O 関数の最も単純なも のは,単なる式であるといえます。 たとえば,以下の式はpiの値を表示するでしょう。
pi
a pi = 3.1416
これは,その値とともに変数名(または‘ans’)が表示されるということを受け入れられるのであれば,問題なく動作しています。 変数名を表示させずに,変数の値を表示するためには,関数dispを使用してください。 formatコマンドは,Octave が,dispや通常の表示メカニズムを通して値を表示する方法をいくらか制御する機能を提供します。
ans
[編集][Built-in Variable]
この変数は,最も最近計算した結果で,明示的に変数へ代入していない値を保持します。 たとえば,以下の式を実行した後,
3^2 + 4^2
ansの値は25 です。
fdisp (fid, x)
[編集][Built-in Function]
x の値を,ストリームfid に表示します。 例を示す。
fdisp (stdout, "The value of pi is:"), fdisp (stdout, pi)
a the value of pi is:
a 3.1416
fdispによる出力は,常に改行で終わることに注意してください。
disp (x)
[編集][Built-in Function]
x の値を画面に表示します。 例を示す。
disp ("The value of pi is:"), disp (pi)
a the value of pi is:
a 3.1416
dispによる出力は,常に改行で終わることに注意してください。 もし出力値がリクエストされるならば,dispは何も表示せず,フォーマット済み出力を文字列で返します。
format options
[編集][Command]
dispおよびOctave の通常の表示メカニズムによって生み出される出力のフォーマットを制御します。 妥当なオプションは,以下の表に列挙してあります。
- short
Octave は,最大10 文字幅(行列の列間に挟むスペースはカウントしない)の フィールド内に,少なくとも有効桁が5 桁で数字を表示しようとします。 もしOctave が行列の書式設定ができず,その結果,列が小数点で並んでおり, 全ての数値が最大のフィールド幅内に収まっていれば,‘e’フォーマットに切り替えます。
- long
Octave は,最大20 文字幅(行列の列間に挟むスペースはカウントしない)のフィールド内に, 少なくとも有効桁が15 桁で数字を表示しようとします。 ‘short’フォーマットと同様に,もしOctave が行列の書式設定ができず,その結果,列が小数点で並んでおり, 全ての数値が最大のフィールド幅内に収まっていれば,‘e’フォーマットに切り替えます。
- long e
short e ‘format long’あるいは‘format short’と同様であるが,常に‘e’ フォーマッ トで出力結果を表示します。 たとえば,‘short e’フォーマットについて,piは 3.14e+00と表示されます。
- long E
short E ‘format long e’あるいは‘format short e’と同様であるが,常に大文字の‘E’ フォーマットで出力結果を表示します。 たとえば,‘long E’ フォーマットでは,pi は3.14159265358979E+00と表示されます。
- long g
short g 数値の大きさに基づいて,通常の‘long’(あるいは‘short’)と‘long e’(ある いは‘short e’)フォーマットを選択します。 たとえば,‘short g’フォーマットで は,
pi .^ [2; 4; 8; 16; 32]
は以下のように表示されます。
ans =
3.1416
9.8696
97.409
9488.5
9.0032e+07
8.1058e+15
- long G
short G ‘format long g’または‘format short g’と同じであるが,大文字の‘E’フォー マットを使用します。 たとえば,‘short G’フォーマットでは,
pi .^ [2; 4; 8;16; 32]
は以下のように表示されます。
ans =
3.1416
9.8696
97.409
9488.5
9.0032E+07
8.1058E+15
- free
none 行列の列を小数点でそろえようとはせずに,自由なフォーマットで出力します。 これは複素数についても,‘0.60419 + 0.60709i’のような出力ではなく,‘(0.604194,0.607088)’のようなフォーマットになります。
- bank 小数点以下2 桁までの固定フォーマットで表示します。
- +
- + chars
- plus
- plus chars
ゼロでない行列の要素を‘+’記号で,ゼロの要素をスペースで表示します。 このフォーマットは,巨大な行列の構造を確かめるときに非常に有効です。
オプション引数chars は,それぞれゼロより大きい,ゼロより小さい,ゼロに等しい値を表示するために使用する3文字のリストです。 たとえば,‘+ "+-."’フォーマットでは,
[1, 0, -1; -1, 0, 1]
は以下のように画面に表示されます。
ans =
+.-
-.+
native-hex メモリに格納されている形式どおりに,16 進数を表示します。 たとえば,最下位バイトが最初にくるIEEE の8 バイト実数を利用するワークステーションにおいて,piの値をhexフォーマットで表示すると, 400921fb54442d18となります。 このフォーマットは,数値にのみ有効です。 hex native-hexと同様ですが,常に最上位バイトを最初に表示します。
- native-bit
メモリに格納されている形式どおりに,2進数を表示します。 たとえば,piの値は,以下のようになります。
01000000000010010010000111111011
01010100010001000010110100011000
(ここでは折り返しが発生する関係上,32 ビット区切りで2段表示しています) これは,最下位バイトが最初にくるIEEE の8バイト実数を利用するワークステーションにおいて,表示したときのものです。 このフォーマットは,数値にのみ有効です。
bit native-binと同様ですが,常に最上位バイトを最初に表示します。
compact 列数ラベルの周囲に余計な空白を入れない。
loose 列数ラベルの上下に空白行を挿入する(これは標準設定です)。
標準設定により,Octave は最大10 文字幅のフィールド内に,有効桁が5 桁で数字を表示しようとします。
もしOctave が行列の書式設定ができず,その結果,列が小数点で並んでおり,全ての数値が最大のフィールド幅内に収まっていれば,‘e’フォーマットに切り替えます。
もしformatが引数無しで起動されるならば,標準のフォーマット状態を復元します。
print_answer_id_name
[編集][Built-in Variable]
もしprint_answer_id_nameの値がゼロでなければ,その結果とともに変数名を表示します。 そうでなければ,結果の値のみを表示します。 初期値は1 です。
16.1.2 端末からの入力
[編集]Octave には,ユーザ入力を促すことを容易にする3 つの関数が存在します。 inputとmenu関数は,通常,ユーザとの対話的設計を管理するために使用され,keyboard関数は,通常,簡単なデバッグを行うために使用されます。
input (prompt)
[編集][Built-in Function]
input (prompt, "s")
[編集][Built-in Function]
プロンプトを表示し,ユーザ入力を待ちます。 たとえば,
input ("Pick a number, any number! ")
は,以下のようなプロンプトを表示します。
Pick a number, any number!
そして,ユーザが値を入力するのを待ちます。 ユーザによって入力された文字列は式として評価されます。 ゆえに,それがリテラル定数,変数名,あるいは他の妥当な式となり得えます。 現在,inputは,式を評価することによって生み出された値の数にかかわらず,単に1つの値のみを返します。 もし文字列値を得ることだけに興味があるならば,2番めの引数として文字列"s"を付けてinputを呼び出すと良いでしょう。 これは,ユーザによって入力された文字列を,評価せずに返すようにOctave に命令します。 ページャによって表示される出力が待機されることがあるので,input を呼ぶ前に,常にfflush(stdout)を呼ぶことは良い心がけです。 これは,保留中の出力が,あなたの出すプロンプトより前にスクリーンに表示されるようにするものです。
menu (title, opt1, . . . )
[編集][Function File]
タイトル文字列に続けて一連のオプションを表示します。 各々のオプションは,数値とともに表示します。 戻り値は,ユーザが選択したオプションの数値です。 この関数は,対話的プログラムに役立ちます。 渡すことのできるオプションの数には制限はありませんが,簡単には1画面に収まらないメニューを出すことは混乱の元です。
keyboard (prompt)
[編集][Built-in Function]
この関数は,通常は単なるデバッグのために使用されます。 keyboard関数を実行するとき,Octaveはプロンプトを表示し,ユーザ入力を待機します。 その後,入力文字列が評価され,その結果が表示されます。 これにより,関数内で変数の値を試験すること,および変数に新たな値を代入することが可能になります。 keyboardは,何に値も返しません。 また,ユーザが‘quit’ または‘exit’と打ち込むまで入力の待ち受けを継続します。 keyboardが何も引数を付けずに起動されると,標準のプロンプト‘debug> ’が使用されます。 inputとkeyboardの両方とも,プロンプトにおいて通常のコマンドライン履歴および編集関数が利用できます。 Octave には,ユーザに改行を入力してもらう必要なく,キーボードから1文字を得ることが可能な関数も用意されています。
kbhit ()
[編集][Built-in Function]
キーボードから,単一のキー投下を読み込みます。 1 つの引数を付けて呼び出すと,キー入力を待機しませn。 たとえば,
x = kbhit ();
x には,入力が行われるとすぐに,キーボードから入力した次の文字がセットされます。
x = kbhit (1);
これは上の例と同じであるが,キー投下を待たず,何もキーが得られなかったならば空の文字 列を返します。
16.1.3 単純なファイル入出力
[編集]saveとloadコマンドは,様々なフォーマットでデータをファイルに書き出したり,ファイルから読み込んだりするものです。 save コマンドによって書き出されるファイルの標準フォーマットは,組み込み変数default_save_formatとsave_precisionを使用することでコントロールできます。 Octave は,未だに構造体変数あるいはユーザ定義型を保存(save)したり読み出(load)したりすることはできないことに注意してください。
save options file v1 v2 . . .
[編集][Command]
あるファイルfile に,変数v1, v2, . . . を保存します。 特殊なファイル名‘-’ は,端末に出力内容を書き出します。 もし変数名を列記しないならば,Octave は現在のスコープにある全ての変数を書き出します。 saveコマンドで利用できるオプションは,以下の表に列挙してあります。 出力フォーマットを修正するオプションは,組み込み変数default_save_formatによって指定されたフォー マットの設定を上書きします。
- -ascii
Octaveのテキストデータフォーマットで,データを保存します。 警告: このオプションの意味は,Matlab との互換性のため,Octave の将来のバージョンで変更されることがあります。 この変更があっても,現在のコードの意味を保つためには,かわりに-textオプションを使用してください。
- -text
Octave のテキストデータフォーマットで,データを保存します。
- -binary
Octave のバイナリデータフォーマットで,データを保存します。
- -float-binary
Octave のバイナリデータフォーマットで,単精度のみを利用してデータを保存します。 保存される全ての値が単精度の表現になることを分かっているときにのみ,このオプションを使用するべきです。
- -mat
- -mat-binary
Matlab のバイナリデータフォーマットで,データを保存します。
- -V4
- -v4
- -4
- -mat4-binary
Matlab version 4 のバイナリデータフォーマットで,データを保存します。
- -hdf5
HDF5 フォーマットでデータを保存します。 (HDF5 は,University of Illinois のNational Center for Supercomputing Applications によって開発された,フリーで軽量なバイナリフォーマットである)
Octave の実行形式がHDF5 ライブラリをリンクしていないときには,HDF による保存や読み込みはできません。
- -float-hdf5
HDF5 フォーマットで,単精度のみを利用してデータを保存します。 保存される全ての値が単精度の表現になることを分かっているときにのみ,このオプションを使用するべきです。
- -save-builtins
組み込み変数も保存するようにします。 初期設定では,Octave は組み込み変数を保存しない。
保存すべき変数のリストは,以下の特殊文字から構成されるワイルドカードパターンを含んで も良いでしょう。
- ? 任意の1 文字にマッチします。
- 0 文字以上の文字列にマッチします。
- [ list ] list によって指定された文字のいずれかにマッチします。もし最初の文字が!あるいは^ならば,list で指定した以外の全ての文字にマッチします。
たとえば,‘[a-zA-Z]’なるパターンは,全ての大文字と小文字にマッチします。
Matlab のバイナリデータフォーマットを使用する場合を除き,グローバル変数はグローバル 属性が付いたまま保存されます。 したがって,もし後になって‘load’を使用して読み込むならば, グローバル変数として復元されることになります。
以下のコマンド
- save -binary data a b*
は,変数‘a’と‘b’で始まる全ての変数を,Octave のバイナリフォーマットで,ファイル‘data’に保存します。
saveの挙動を変更するための3 つの変数と,Octave が予期せぬ終了を迎えたときに,変数を保存するかどうかをコントロールするための3 つの変数があります。
crash_dumps_octave_core
[編集][Built-in Variable]
もしこの変数にゼロでない値がセットされるならば,Octave がクラッシュしたりハングアップ や終了などの信号を受け取ったときに,現在の全ての変数を"octave-core"というファイルに 保存しようとします。 初期値は1です。
sighup_dumps_octave_core
[編集][Built-in Variable]
もしこの変数にゼロでない値がセットされ,crash_dumps_octave_coreもゼロでないなら ば,Octave がハングアップ信号を受け取ったときに,現在のすべての変数を"octave-core"と いうファイルに保存しようとします。 初期値は1です。
sigterm_dumps_octave_core
[編集][Built-in Variable]
もしこの変数にゼロでない値がセットされていれば,Octave が終了信号を受け取ったときに, 現在のすべての変数を"octave-core"というファイルに保存しようとします。 初期値は1です。
default_save_format
[編集][Built-in Variable]
この変数は,saveコマンドに対する標準フォーマットを指定します。 以下の値のうち,いずれか1つをとるべきです、
- "ascii",
- "binary",
- float-binaryあるいは"mat-binary"。
標準設定の保存フォーマットは,Octave のテキストフォーマットです。
save_precision
[編集][Built-in Variable]
この変数は、テキストフォーマットでデータを保存するときの桁数を指定します。デフォルト値は17です。
save_header_format_string
[編集][Built-in Variable]
この変数は,Octave によって保存されるテキストフォーマットのファイルの行頭において書き 出されるコメント行の書式文字列を指定します。 この書式文字列は,strftimeに渡されます。 また, ‘#’で始まるべきであり,改行文字を含んではいけない。 もしsave_header_format_string が空の文字列ならば,テキストデータファイルから先頭行コメントを省略します。 初期値は,以下の文字列です。
"# Created by Octave VERSION, %a %b %d %H:%M:%S %Y %Z <USER@HOST>"
load options file v1 v2 . . .
[編集][Command]
ファイルfile から,指定した変数をロード(読み込み)します。 save と同様に,変数名を列記することができるが,loadはマッチした変数名のみを取り出すことになります。 たとえば,ファイル‘data’に保存した変数を復元するには,以下のコマンドを使用してください。
- load data
もしファイルからグローバルのマークが付いた変数が読み出され,同じ名前を持つグローバルシンボルがすでに存在するときには,その変数はグローバルシンボルテーブルにロードされます。
また,もしファイル中で変数にグローバルなマークが付いており,ローカルシンボルが存在しているならば,ローカルシンボルはグローバルテーブルに移動し,ファイルからの値が与えられます。 これら両方のケースは,ある種のエラーの結果であるように見えることから,それらは警告を発します。
1 個の出力引数をつけて起動すると,Octave はシンボルテーブルに変数を挿入するかわりに,データを返します。 もしそのデータファイルが数値のみを含んでいれば(桁をタブまたはスペースで区切ってあれば),それらの値を含む行列を返します。 そうでなければ,loadは,ファイル内の変数名に対応するメンバを持つ構造体を返します。
loadコマンドは,Octave のテキストおよびバイナリ形式,Matlab のバイナリ形式で保存されたデータを読むことができます。 ファイル形式は自動的に認識され,異なる浮動小数点形式 (現在のところ,IEEE ビッグまたはリトルエンディアンのみであり,その他の形式は今後追加されるであろう)からの変換が行われます。
loadで利用できるオプションを以下の表に示す。
- -force
‘-force’オプションは,後方互換性を無視して受け入れられます。 現在,Octaveは,その時点でメモリに存在する変数を,ファイル中に存在する同名の変数で上書きします。
- -ascii
そのファイルがOctave のテキストフォーマットであると仮定します。
警告: このオプションの意味は,Matlab との互換性のため,Octave の将来の バージョンで変更されることがあります。 この変更があっても,現在のコードの意味を保つためには,かわりに-textオプションを使用してください。
- -binary
そのファイルがOctave のバイナリフォーマットであると仮定します。
- -mat
- -mat-binary
そのファイルがMatlab version 6 のバイナリフォーマットであると仮定します。
- -V4
- -v4
- -4
- -mat4-binary
そのファイルがMatlab version 4 のバイナリフォーマットであると仮定します。
- -hdf5
そのファイルがHDF5 フォーマットであると仮定します。 (HDF5 は,University of Illinois のNational Center for Supercomputing Applications によって開 発された,フリーで軽量なバイナリフォーマットである)Octave は,他のソフトウエアが作成したHDF5 ファイルを読むことができます。 しかし,サポートしていないデータセットは読み飛ばされます。
Octave の実行形式がHDF5 ライブラリをリンクしていないときには,HDF に よる保存や読み込みはできません。
- -import
‘-import’は,後方互換性を無視して受け入れられます。 現在,Octave は多次元HDF データをサポートしており,Octave の識別子として妥当でない変数名につ いて,それを自動的に修正します。
- -text そのファイルがOctave のテキストフォーマットであると仮定します。
16.2 Cスタイルの入出力関数
[編集]Octave のC スタイル入出力関数は,C 言語の標準入出力ライブラリの機能の大部分を提供します。
しかし,入力関数のいくつかについて,引数リストはわずかに異なっています。 これは,Octave には引数の参照渡しを行う方法がないためです。
これ以降において,file はファイル名を参照し,fidはfopen によって返される整数のファイル番号を指します。
常に利用できる3 つのファイルが存在します。 これらのファイルは,対応するファイル番号を用いてアクセスすることもできますが,以下の表で与えられるシンボル名を常に使用すべきです。 なぜならば,これを使用することにより,プログラムが理解しやすくなるからです。
stdin
[編集][Built-in Variable]
標準入力ストリームです(ファイル番号0)。 Octave を対話的に使用しているとき,これはコマンドライン編集関数に渡されています(フィルタ)。
stdout
[編集][Built-in Variable]
標準出力ストリームである(ファイル番号1)。 標準出力に書き出されるデータは,通常,ページャに渡されます。
stderr
[編集][Built-in Variable]
標準エラーストリームである(ファイル番号2)。 たとえページ区切りをオンにしていても,標準エラーはページに送りません。 エラーメッセージや待ち受けを出すときに有用です。
16.2.1 ファイルのオープンとクローズ
[編集][fid, msg] = fopen (name, mode, arch)
[編集][Built-in Function]
fid_list = fopen ("all")
[編集][Built-in Function]
file = fopen (fid)
[編集][Built-in Function]
fopenの最初の形式では,指定したモード(読み込み限定,読み書き両用など)とアーキテク チャ設定(IEEE ビッグエンディアンやIEEE リトルエンディアンなど)でファイルをオープン
し,そのファイルを後で参照するために用いる整数を返します。 もしエラーが発生したならば,fidは!1 にセットされ,msg には,対応するエラーメッセージが含まれます。 mode は,そのファイルが読み込み,書き出し,あるいはその両方の,どの目的のためにオープンされるかどうかを指定する1 文字か2 文字の文字列です。
fopenの2 番めの形式では,fopen関数は,現時点でオープンしている全てのファイル(stdin,stdoutおよび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’についてのみサポートしています。
fclose (fid)
[編集][Built-in Function]
指定したファイルをクローズします。 成功すると,fcloseは0 を返し,そうでなければ!1 を返します。
16.2.2 単純な出力
[編集]fputs (fid, string)
[編集][Built-in Function]
ある文字列を,フォーマット無しでファイルに書き出します。
成功すると正の数を,エラーの場合はEOF を返します。
puts (string)
[編集][Built-in Function]
ある文字列を,フォーマット無しで標準出力に書き出します。
成功すると正の数を,エラーの場合はEOF を返します。
16.2.3 行単位の入力
[編集]fgetl (fid, len)
[編集][Built-in Function]
ファイルから,文字を読み込む。 改行まで,あるいはEOF まで,またはlen 文字読み込んだ後に停止します。 読み込んだ文字を,末尾の改行を除いた上で,文字列として返します。 len を省略すると,fgetlは次の改行までの文字を読み込む。 もし読み込むべき文字がこれ以上ないならば,fgetlは!1 を返します。
fgets (fid, len)
[編集][Built-in Function]
ファイルから,文字を読み込む。 改行まで,あるいはEOF まで,またはlen 文字読み込んだ後に停止します。 読み込んだ文字を,末尾の改行を付けたまま,文字列として返します。 len を省略すると,fgetlは次の改行までの文字を読み込みます。 もし読み込むべき文字がこれ以上ないならば,fgetlは!1 を返します。
16.2.4 フォーマット付き出力
[編集]この節は,printfや関連する関数の呼び出し方について説明しています。 以下の関数は,フォーマット付き出力のために利用可能です。 これらは,同名のC 言語関数を真似たものですが,それらの関数はベクトルや行列の値を表示するパフォーマンスを向上するために,異なるフォーマットテンプレートを解釈します。
printf (template, . . . )
[編集][Built-in Function]
テンプレート文字列template に従って,オプション引数をstdoutに表示します。 表示した文字数を返します。
fprintf (fid, template, . . . )
[編集][Built-in Function]
この関数は,出力がstdoutの代わりにストリームfid に書き出すことを除き,printfと同様 です。
sprintf (template, . . . )
[編集][Built-in Function]
この関数は,出力が文字列として返されることを除き,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’フォーマットを使い分けます。 ‘%’と適用する変換を表す文字の間に修正子を書くことにより,より詳細なフォーマットをコントロールすることができます。 これは,変換の通常の挙動をわずかに変更します。 たとえば,大部分の変換指定は,最小のフィールド幅やフィールド内の左寄せや右寄せにするかどうかを合図できるようにします。
特定のフラグや許容される修正子とその解釈は,特定の変換に依存します。 それらは以降の節において,より詳細に解説されています。
16.2.5 行列の出力変換
[編集]行列の値が与えられたとき,Octave のフォーマット付き出力関数は,その行列の全ての値が出力されるまで,書式テンプレートを繰り返し適用します。 たとえば,以下のようになります。
- printf ("%4.2f %10.2e %8.4g\n", hilb (3));
- a 1.00 5.00e-01 0.3333
- a 0.50 3.33e-01 0.25
- a 0.33 2.50e-01 0.2
もし複数の値が,一度の呼び出しで表示されるならば,1 つの値から次の値まで移動するときには,出力関数は書式テンプレートの最初には戻りません。 このことは,行列内の要素数が,書式フォーマットにおいて変換する数のちょうど倍数になっていないときには,よく分からない出力になることがあります。 以下の例を参照してください。
- printf ("%4.2f %10.2e %8.4g\n", [1, 2], [3, 4]);
- a 1.00 2.00e+00 3
- a 4.00
もしこれを望まないならば,1 回の呼び出しで出力しようとせずに,何度も呼び出しを繰り返してください。
16.2.6 出力変換の記述方法
[編集]このセクションでは,printfのテンプレート文字列に現れるであろう変換指定子の細かな記述方法についての詳細を述べています。 テンプレート文字列内にあって,変換指定子ではない文字は,そのままストリームに表示されます。 printfのテンプレート文字列における変換指定子は,以下のような一般的な形式をとります。
- % flags width [ . precision ] type conversion
- (% フラグ幅[ . 精度] 型変換方法)
たとえば,変換指定子‘%-10.8ld’について,‘-’はフラグであり,‘10’はフィールド幅を指定し,精度は‘8’であり,‘l’という文字は型修飾子であって,‘d’は変換のスタイルである(この例について言えば,数値の引数を,10 進数表記,最低10 文字幅となるフィールドに8 桁以内の左寄せで表示せよということです)。
より詳細に言えば,出力変換方法の指定は,最初に‘%’で開始し,以下の順で並べた文字で構成されます。
2 ゼロ,あるいは変換指定子の通常の挙動を修飾するフラグ文字; 2 最小フィールド幅を指定する10 進の整数(オプション); もし通常の変換によってこの幅よりも少ない文字数となれば,そのフィールドは指定した幅になるようにスペースを詰める。 これは最小の値です。 すなわち,もし通常の変換によってこの幅よりも多い文字数となれば,そのフィールドは丸められません。 通常,その出力はフィールド内で右寄せとなります。
フィールド幅を‘*’と指定することもできます。 これは,引数リストの次の引数が,(表示すべき実際の値ではなく)フィールド幅として使用します。 その値は最も近い整数に丸められます。 もしこの値が負ならば,これは‘-’フラグ(以下を参照)を指定し,フィールド幅としてその絶対値を使用することを意味します。
2 数値の変換に対して,書き出す桁数を指定するための精度(オプション);もし精度を指定するならば,10 進整数をピリオド(‘.’)の後ろに置く(省略するとゼロとみなす)。
精度には‘*’を指定することもできます。 これは,引数リストの次の引数が,(表示すべき実際の値ではなく)精度として使用します。 この値は整数でなければならず,負であれば無視されます。
2 型修飾文字列(オプション);この文字は,Octave のprintf関数では無視されるが,C 言語のprintfとの互換性のために提供されていると考えておくとよいでしょう。 2 適用する変換を指定する文字;
許容される正確なオプションと,それがどのように解釈されるのかは,異なる変換指定子のあいだで変化します。 使用する特定のオプションについての情報は,個々の変換に関する解説を参照してください。
16.2.7 出力変換の表
[編集]全てのさまざまな変換が行うことをまとめた表を示します。
‘%d’, ‘%i’ 整数を符号付き10 進数として表示します。 詳細はSection 16.2.8 [Integer Conversions]を参照してください。 ‘%d’と‘%i’は,出力に対して同じ意味ですが,入力に対するscanfで使用するときには異なる意味になります(Section 16.2.13 [Tableof Input Conversions]を参照してください)。
‘%o’ 整数を符号なし8 進数として表示します。 詳細はSection 16.2.8 [Integer Conversions]を参照してください。
‘%u’ 整数を符号なし10 進数として表示します。 詳細はSection 16.2.8 [Integer Conversions]を参照してください。
‘%x’, ‘%X’ 整数を符号なし16 進数として表示します。
‘%x’は小文字を,‘%X’は大文字を使用します。
詳細はSection 16.2.8 [Integer Conversions]を参照してください。
‘%f’ 浮動小数点数を通常の(固定小数点)表記で表示します。 詳細はSection 16.2.9[Floating-Point Conversions]を参照してください。
‘%e’, ‘%E’ 浮動小数点数を指数表記で表示します。 ‘%e’は小文字を,‘%E’は大文字を使用します。 詳細はSection 16.2.9 [Floating-Point Conversions]を参照してください。
‘%g’, ‘%G’ 浮動小数点数を通常の(固定小数点)表記または指数表記のどちらかで表示します。 数値の大きさに対してより適切な方法で表示します。 ‘%g’は小文字を,‘%G’は大文字を使用します。 詳細はSection 16.2.9 [Floating-Point Conversions]を参照してください。
‘%c’ 1 文字を表示します。 Section 16.2.10 [Other Output Conversions]を参照してください。
‘%s’ 文字列を表示します。 Section 16.2.10 [Other Output Conversions]を参照してください。
‘%%’ ‘%’という文字そのものを表示します。 Section 16.2.10 [Other Output Conversions]を参照してください。
もし変換識別子の記述方法が妥当なものでなければ,予測できないことが起こり,表示が行われないでしょう。 もしテンプレート文字列内の全ての変換指定子について値を与えるために提供する引数が充分でなければ,あるいはその引数が正しい型でなければ,結果は予測不能です。 もし変換指定子よりも多くの引数を与えるならば,余分な引数値は単に無視されます; これは,ときに有用です。
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 という値を変換すると,何も文字が表示されません。
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という値のように扱われます。 もし表示される値が指定した桁数では詳細に表現できないならば,その値は適合する最も近い数に丸められます。
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 ’(先頭と末尾にスペースを含みます)と表示します。
16.2.11 フォーマット付き入力
[編集]Octave は,フォーマット付き入力を読み込むために,scanf,fscanfおよびsscanf関数を提供しています。 これらの関数の各々には,2 つの使い方が存在します。 1 つめは,ファイルからデータのベクトルを展開するため,もうひとつは,より「C ライク」なものです。
[val, count] = fscanf (fid, template, size)
[編集][Built-in Function]
[v1, v2, ..., count] = fscanf (fid, template, "C")
[編集][Built-in Function]
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 に返されます。
[val, count] = sscanf (string, template, size)
[編集][Built-in Function]
[v1, v2, ..., count] = sscanf (string, template, "C")
[編集][Built-in Function]
これはfscanfのような関数であるが,文字をストリームの代わりに文字列string から得るこ とが異なっています。 その文字列の終端に達することは,ファイルの末端(end-of-file)の状態であるとして扱われます。
scanfを呼び出すことは,任意の引数がテンプレート文字列のコントロール下で読み込まれるということについて,表面的にはprintfを呼ぶことと等価です。 テンプレート文字列内の変換識別子の表記法がprintfのそれと非常に似ている一方で,テンプレートの解釈は,固定フィールドではなく,フォーマットなし入力で単にパターンマッチング向きです。 たとえば,大部分のscanf変換では,入力ファイル内の任意の数の「ホワイトスペース」(空白文字,タブおよび改行)を読み飛ばし,さらに,数値入力については,出力変換に存在するような精度の概念がありません。 通常は,テンプレート内のホワイトスペース以外の文字は,入力ストリーム内の文字に正確に一致すると期待されます。
マッチングの失敗が発生するとき,scanfは直ちに終了し,マッチしなかった最初の文字をそのス トリームから読み込むべき次の文字として残します。 そしてscanfはうまく変換した全ての項目を返します。
フォーマット付き入力関数は,フォーマット付き出力関数と同じ頻度で使用されることはありません。 理由の一部としては,それら関数を適切に使うには注意を要するからです。 別の理由は,マッチエラーから復帰することが難しいことです。
16.2.12 入力変換の記述方法
[編集]scanfのテンプレート文字列は,‘%’で始まる変換識別子を交えた通常の文字列を含みます。
テンプレートにある任意のホワイトスペース文字は,入力ストリームにおける任意の数のホワイト スペースを読み込んで捨ています。 マッチするホワイトスペース文字は,テンプレート文字列に登場するホワイトスペースと厳密に同じである必要はありません。 たとえば,前後にホワイトスペースを伴うカンマを認識させるには,テンプレートに‘ , ’を書いてください。
テンプレート文字列内の,変換識別子の一部ではない他の文字は,入力ストリームにおける文字列に厳密に一致しなければならない。 もしこのケースに合わなければ,マッチングの失敗が発生します。
scanfのテンプレート文字列内の変換指定子は,以下のような一般的な形式になります。
- % flags width type conversion
より詳細に言えば,入力変換方法の指定は,最初に‘%’で開始し,以下の順で並べた文字で構成されます。
2 フラグ文字‘*’(オプション); これは,この識別子によって読み込んだテキストを無視するということです。 scanfがこのフラグを用いた識別子を見つけたときには,変換識別子の残りによって指示されたように入力から読み込むが,この入力は捨てて何の値も返さない。 また,うまく代入できた階数のカウントをインクリメントされません。
2 最大フィールド幅を指定する10 進の整数(オプション);この最大数に達したとき,あるいはマッチしない文字が見つかったときには,入力ストリームからの読み込みを停止します。 大部分の変換子は,最初のホワイトスペース文字を捨てられ,これら読み捨てた文字は最大フィールド幅に向けてカウントとされません。 最初のホワイトスペースを読み捨てない変換は,きちんと説明します。
2 型修飾文字(オプション); この文字は,Octave のscanf関数では無視されるが,C言語のscanfとの互換性のために提供されていると考えておくとよい。
2 適用する変換を指定する文字; 許容される正確なオプションと,それがどのように解釈されるのかは,異なる変換指定子のあいだで変化します。 使用する特定のオプションについての情報は,個々の変換に関する解説を参照してください。
16.2.13 入力変換の表
[編集]各種変換指定子をまとめた表を示します。
‘%d’ 10 進数で書かれた符号付き(あるいは符号なし)整数にマッチします。 Section 16.2.14[Numeric Input Conversions]を参照してください。
‘%i’ C 言語で整数の定数を指定するための任意のフォーマットによる符号付き(あるいは符号なし)整数にマッチします。 Section 16.2.14 [Numeric Input Conversions]を参照してください。
‘%o’ 8 進数表記で書かれた符号付き(あるいは符号なし)整数にマッチします。 Section 16.2.14[Numeric Input Conversions]を参照してください。
‘%u’ 10 進数で書かれた符号なし整数にマッチします。 Section 16.2.14 [Numeric Input Conversions]を参照してください。
‘%x’, ‘%X’ 16 進数で書かれた符号なし整数にマッチします。 Section 16.2.14 [Numeric Input Conversions]を参照してください。
‘%e’, ‘%f’, ‘%g’, ‘%E’, ‘%G’ 符号付き(あるいは符号なし)浮動小数点数にマッチします。 Section 16.2.14 [Numeric Input Conversions]を参照してください。
‘%s’ ホワイトスペース以外の文字のみを含む文字列にマッチします。 Section 16.2.15 [String Input Conversions]を参照してください。
‘%c’ 1 文字以上の文字列にマッチします。 読み込んだ文字数は,変換子に与えられた最大フィールド幅によってコントロールされます。 Section 16.2.15 [String Input Conversions]を参照してください。
‘%%’ これは,入力ストリーム内で‘%’文字そのものにマッチします。 対応する引数はありません。
もし変換指定子の記述が妥当なものでなければ,その挙動は定義されません。 代入を実行するテンプレート文字列における全ての変換指定子についてアドレスを提供するために与えられる十分な関数がない,あるいはその引数が正しい型でないならば,その挙動も定義されません。 一方で,余分な引数は単に無視されます。
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’ 修飾子を無視します。
16.2.15 文字列入力の変換子
[編集]この節では,文字列と文字を読み込むためのscanf入力変換子(‘%s’ と‘%c’)について説明しています。
‘%c’変換子は最もシンプルです。 これは常に固定文字数にマッチします。 最大フィールドは,何文字読み込むかを伝えます。 もし最大値を指定しなければ,初期値は1 です。 この変換子は,最初にあるホワイトスペース文字を読み飛ばしません。 この変換子は,精密に次のn 文字を読み込み,読み込めないならば失敗します。
‘%c’変換子は,ホワイトスペース以外の文字列にマッチします。 これは最初にあるホワイトスペース文字を読み飛ばしますが,読み込んだ文字列の後ろでホワイトスペースに遭遇すると停止します。
たとえば,以下の入力を読み込みます。
- hello, world
これを‘%10c’で変換すると," hello, wo"という文字列になりますが,同じ入力を‘%10s’変換子は"hello,"を生み出します。
16.2.16 バイナリ入出力
[編集]Octave はfreadとfwrite関数を使用することにより,バイナリデータを読み書きすることができ ます。 これは同名の標準C 言語を真似たものです。 この関数は,整数データのバイト順を自動的に入れ替えることができ,データが読み込まれたときにサポートする浮動小数点フォーマット間で変換することができます。
[val, count] = fread (fid, size, precision, skip, arch)
[編集][Built-in Function]
指定したファイル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に返されます。
count = fwrite (fid, data, precision, skip, arch)
[編集][Built-in Function]
型precision のバイナリデータを,指定したファイルIDfid に書き出し,正常にファイルへ書き込んだ値の数を返します。
引数data は,ファイルに書き込まれることになる値の行列です。 この値は,行方向に要素が連続しているように展開される(Fortran の配列順)。
残りの引数precision,skip およびarch は,オプションであり,freadの解説にあるように解釈されます。
もしdata の値が大きすぎて指定した精度に当てはまらないならば,fwriteの挙動は定義されません。
16.2.17 テンポラリファイル
[編集][fid, name, msg] = mkstemp (template, delete)
[編集][Built-in Function]
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 はシステム依存のエラーメッセージとなります。
[fid, msg] = tmpfile ()
[編集][Built-in Function]
一意な名前を持つ新規テンポラリファイルに対応するファイルID を返します。 このファイルはバイナリの読み書き両用モード("w+b")でオープンされます。 このファイルは,クローズされるかOctave が終了するときに自動的に削除されます。
この関数が成功すると,fid は妥当なファイルID,msg は空文字列となります。 そうでなければ,fid は!1,msg はシステム依存のエラーメッセージとなります。
tmpnam (dir, prefix)
[編集][Built-in Function]
一意なテンポラリファイル名を文字列として返します。
prefix を省略すると,"oct-"という値が使用されます。 dir も省略すると,テンポラリファイルを作成するための標準的なディレクトリが使用されます。 もしdir を与えるならば,それが存在していなければなりません。 存在していなければ,標準的なディレクトリが使用されます。 tmpnamによって名付けられたファイルはオープンされていないので,自分でオープンしようとするときには,すでに利用可能では無くなっているという可能性がある(それほど起こりえないことでしょうが)。
16.2.18 ファイルの終端とエラー
[編集]feof (fid)
[編集][Built-in Function]
与えられたファイルが,すでに読み終わった状態(end-of-file)にあれば1 を,そうでなければ0 を返します。 これは,そのファイルがすでにファイル末尾まで読み終わっているときに1 を返すものであり,次の操作によってその状態になるだろうということではないことに注意してください。
ferror (fid)
[編集][Built-in Function]
与えられたファイルについてエラー状態にあれば1 を,そうでなければ0 を返します。 これはエラーがすでに起こったときにのみ1 を返すことになり,次の操作がエラー状態に陥るだろうということではないことに注意してください。
freport ()
[編集][Built-in Function]
オープンされているファイル名,読み込み専用,書き出し専用,あるいは読み書き両用かどうかのリストを表示します。 例を示す。
- freport ()
- a number mode name
- a
- a 0 r stdin
- a 1 w stdout
- a 2 w stderr
- a 3 r myfile
16.2.19 ファイル内のポジション指定
[編集]与えられたファイルに対するファイルポインタのポジションをセットし,決定するために3つの関数が利用できます。
ftell (fid)
[編集][Built-in Function]
ファイルポインタの位置を,ファイルfid の先頭からの文字数として返します。
fseek (fid, offset, origin)
[編集][Built-in Function]
ファイルポインタを,ファイルfid 内の任意の位置へセットします。 そのポインタは,origin からoffset 文字めに配置します。 origin は,あらかじめ定義された変数SEEK_CUR(現在の位置),SEEK_SET (ファイルの先頭),SEEK_END(ファイルの末端),あるいは文字列"cof","bof","eof"のいずれか1 つを使うのがよい。 オフセットはゼロでなければならず,そうでなければftellによって返される値とする(その場合,origin はSEEK_SETでなければならない)。 成功すると0,エラーの場合は!1 を返します。
SEEK_SET
[編集][Built-in Variable]
SEEK_CUR
[編集][Built-in Variable]
SEEK_END
[編集][Built-in Variable]
これらの変数は,関数fseekの3番めの引数として使用されることになります。
- SEEK_SET ファイルの先頭からの相対位置を指定します。
- SEEK_CUR 現在位置からの相対位置を指定します。
- SEEK_END ファイルの末端からの相対位置を指定します。
frewind (fid)
[編集][Built-in Function]
ファイルfid のファイルポインタを,先頭に移動します。 成功すると0 を,エラーが発生すると!1 を返します。 これはfseek (fid, 0, SEEK_SET)と等価です。 以下の例は,現在のファイルポジションを変数markerに格納し,ファイルの先頭にポインタを移動させ,4文字読み込み,もとのポジションを返します。
- marker = ftell (myfile);
- frewind (myfile);
- fourch = fgets (myfile, 4);
- fseek (myfile, marker, SEEK_SET);