入出力 †
SAD ではファイル入出力は原則としてチャネルを通して行われます。 チャネルはOpenRead[], OpenWrite[], OpenAppend[] などによりファイルと結び付けられています。また、$Input、$Output などにより、そのときの入出力の流れをチャネルとして使用することもできます。このほかにパイプもチャネルとして利用できます。
ファイル入力 †
基本的なファイル入力は次のように行われます。
a = OpenRead["test.dat"]; (ア)
...
x = Read[a, Real]; (イ)
...
Close[a]; (ウ)
まず、(ア) のように、入力したいファイル名(文字列)を OpenRead に入れることにより、ある入力チャネルを開きます。そのチャネル番号はシンボル a に割り当てられます。次に(イ)のように、チャネル a を用いて必要な入力動作を繰り返します。作業が終了したら、(ウ)のように、Close でそのチャネルを解放します。
入力ファイルはいくつかの Record から成り立っているとみなします。Record は改行文字 ("\n")で区切られた任意の長さの文字列です。改行文字自身は Record には含まれません。また、Record の区切りの文字を変更することもできません。
OpenRead[] †
- OpenRead[ファイル名1]はファイル名1 (文字列) で表わされるファイルに対して入力チャネルを開き、そのチャネル番号を返します。
- OpenRead["!コマンド1"]はシステムのコマンドである コマンド1 を実行し、その出力結果に対して入力チャネルを開き、そのチャネル番号を返します。
例:
OpenRead["!ls -l"]。
- 何らかのエラーが発生した場合は OpenRead は番号ではなく、シンボル $Failed を返します。
Read[] †
- 関数 Read は
Read[チャネル1, 対象1, オプション1, ...]
のように用います。ここでチャネル1 は OpenRead で開いたチャネル番号、または $Input です。$Input はその時点の入力の流れを表わします。
- Read の二番目の引き数は読み込まれる対象の指定をします。それぞれの対象には三番目以降の引き数で指定可能なオプションがあります。オプションは シンボル -> 値 の様な規則で表わします。オプションの作用は表に示します。オプション省略時は表のデフォルト値に設定されます。
- Read の二番目の引き数に対象達のリストを指定すると、Read はそのリストにしたがって
ファイルから次々と対応する対象達を読み込み、結果を指定と同型のリストにして返します。また、この対象リストの階数は任意です。
- Read に際してファイルが終端に達した場合、Read はシンボル EndOfFile を返します。
- Read[チャネル1]はチャネル1 から式を読み込み、それを評価した結果を返します。この場合、ひとつの Record で式が完結しない場合、完結するまで読み進みます。
- Read[チャネル1, Word, オプション1, ..]
はチャネル1 から 1語を読み込み、それを返します。
- Read[チャネル1, Real, オプション1, ..]
はチャネル1 から 1語を読み込み、それを式として評価した値を返します。
- Read[チャネル1, Expression, オプション1, ..]
はチャネル1 から 1語を読み込み、それを式として評価した結果を返します。
- Read[チャネル1, Character, オプション1, ..]
はチャネル1 から1文字を読み込み、それを返します。
- Read[チャネル1, String, オプション1, ..]
はチャネル1 からその Record の終端までを読み込み、それを文字列として返します。
| オプション | デフォルト値 | 作用 |
| WordSeparators | " , \t" | 語の区切りを表わす文字達 |
| NullWords | False | Trueの時, 語の区切り字が連続したところに語 "" があるとみなす。 |
| ReadNewRecord | True | False の時、次の Record を読まず、語 "" を返す。 |
ReadString[] †
- ReadString[ch1]はch1からそのRecordの終端までを読み込み、それを文字列として返します。
- Read[ch1,String,...]と同値です。
Skip[] †
- Skip[チャネル1, 対象1, n, オプション1, ...]
は Read[チャネル1, 対象1, オプション1, ...]を n 回繰り返し、その最後の結果を返します。
- Skip[チャネル1, 対象1]
は Read[チャネル1, 対象1]と同値です。
Close[] †
- Close[チャネル1]
はチャネル1 を解放します。
Get[] †
- Get[ファイル名1]
はファイル名1 (文字列) に書かれた式達を次々に評価し、その最後の結果を返します。
- Get に対しては OpenRead, Close は必要ありません。
- 関数ライブラリのロードには Get を使います。
- AutoLoad[] を使えば、必要な場合だけ関数をロードすることができます。
ファイル出力 †
基本的なファイル出力は次のように行われます。
a = OpenWrite["test.dat"]; (ア)
...
Write[a, x, y, ...]; (イ)
...
Close[a]; (ウ)
まず、(ア)のように、出力したいファイル名(文字列)を OpenWrite に入れることにより、ある出力チャネルを開きます。そのチャネル番号はシンボル a に割り当てられます。次に(イ)のように、チャネル a を用いて必要な出力動作を繰り返します。作業が終了したら、(ウ)のように、Close でそのチャネルを解放します。
出力チャネルは OpenWrite の他に、OpenAppend でも開くことができます。この場合ファイルはその終端から書き込まれます。
出力ファイルの Record の長さは シンボル PageWidth で決まります。PageWidth の初期値は 131 または端末の表示幅 - 1 の小さいほうです。PageWidth を越える出力は自動的に改行されます。
OpenWrite[] †
- OpenWrite[ファイル名1]はファイル名1 (文字列) で表わされるファイルに対して出力チャネルを開き、そのチャネル番号を返します。ファイルはその先頭から書き込まれます。
- 何らかのエラーが発生した場合は OpenWrite は番号ではなく、シンボル $Failed を返します。
OpenAppend[] †
- OpenAppend[ファイル名1]
は ファイル名1 (文字列) で表わされるファイルに対して出力チャネルを開き、そのチャネル番号を返します。ファイルはその終端から書き込まれます。
- 何らかのエラーが発生した場合は OpenWrite は番号ではなく、シンボル $Failed を返します。
Write[] †
- Write[チャネル1, 式1, 式2, ...]
は チャネル1 に対して、式1 を評価し、その結果を文字列に変換した結果を出力します。この動作を 式2 以降にも行い、最後に改行文字を出力します。
- 式と式の間には区切り字はなにも入りません。
- 数値の文字列への変換は $FORM の値に従います。途中で $FORM を変更したいときには
- Write[..., $FORM = フォーマット1; 式1, ...]
のようにすれば式1 以降の $FORM がフォーマット1 に変更されます。元のフォーマットを保存したいときには StandardForm などを利用します。
- チャネル1としては OpenWrite[], OpenAppend[] で開いたチャネル番号、または $Output が指定できます。$Output はその時点の出力の流れを表わします。
Print[] †
- Print[式1, 式2, ...]
はその時点での出力の流れ $Output に対して、式1 を評価し、その結果を文字列に変換した結果を出力します。この動作を 式2 以降にも行い、最後に改行文字を出力します。
- 式と式の間には区切り字はなにも入りません。
- 数値の文字列への変換は $FORM の値に従います。途中で $FORM を変更したいときには Print[..., $FORM = フォーマット1; 式1, ...]
のようにすれば式1 以降の $FORM がフォーマット1 に変更されます。元のフォーマットを保存したいときには StandardForm などを利用します。
WriteString[] †
- WriteString[チャネル1, 式1, 式2, ...]
はチャネル1 に対して、式1 を評価し、その結果を文字列に変換した結果を出力します。この動作を 式2 以降にも行います。最後に改行文字は出力しません。
- 式と式の間には区切り字はなにも入りません。
- 数値の文字列への変換は $FORM の値に従います。途中で $FORM を変更したいときには
- WriteString[..., $FORM = フォーマット1; 式1, ...]
のようにすれば式1 以降の $FORM がフォーマット1 に変更されます。元のフォーマットを保存したいときには StandardForm などを利用します。
- チャネル1としては OpenWrite[], OpenAppend[] で開いたチャネル番号、または $Output が指定できます。$Output はその時点の出力の流れを表わします。
Close[] †
- Close[チャネル1]
はチャネル1 を解放します。