シーケンシャル・ファイルの入出力
この章では、Caché でのシーケンシャル・ファイルの使用法について説明します。すべてのオペレーティング・システムで、ディスク入出力ファイルはシーケンシャル・ファイルと見なされます。Windows システムでは、(プリンタがシリアル通信ポートに接続されていない限り) プリンタをシーケンシャル・ファイル入出力デバイスとして処理します。UNIX® システムでは、プリンタはターミナル入出力デバイスと見なされます。プリンタの詳細は、このドキュメントの "プリンタ" の章を参照してください。
シーケンシャル・ファイルの使用法
このセクションでは、Caché によるシーケンシャル・ファイルの処理方法について説明します。具体的には、シーケンシャル・ファイル入出力の概要と、関連コマンドについて説明します。
-
シーケンシャル・ファイルにアクセスするには、最初に OPEN コマンドを使用し、引数としてファイル名を指定して、ファイルを開く必要があります。また、必要に応じて OPEN の各種モード・パラメータを指定します。モード・パラメータは、OPEN で指定されたファイルが存在しない場合に、新しいファイルを作成するかどうかを指定します。同時に複数のファイルを開くことができます。
-
シーケンシャル・ファイルを開いた後、USE コマンドを使用し、そのファイル名を引数として指定して、ファイルにアクセスする必要があります。USE コマンドによって、指定されたファイルが現在のデバイスになります。したがって、一度に使用できるのは 1 つのファイルのみです。USE コマンドでは、モード・パラメータも指定できます。
-
その後、そのファイルに対して複数の READ コマンドまたは WRITE コマンドを発行できます。各 READ コマンドはファイルから 1 レコードを受け取り、各 WRITE コマンドはファイルに 1 レコードを引き渡します。“W” モード・パラメータを指定してファイルを開かないと、ファイルに書き込むことはできません。ファイルの範囲を超えて読み取ろうとすると、<ENDOFFILE> エラーを生じます。
-
ファイル入出力を完了したら、CLOSE コマンドを発行し、シーケンシャル・ファイルを閉じます。
OPEN コマンド
OPEN は、Caché シーケンシャル・ファイルを開きます。OPEN コマンドを使用して、Caché データベース・ファイルを開くことはできません。
OPEN コマンドで開いたシーケンシャル・ファイルを、別のプロセスでも開くことができます。OPEN コマンドの “L” モード・パラメータまたは ObjectScript の LOCK コマンド、またはその両方を使用してシーケンシャル・ファイルへの同時アクセスを制御できます。ファイル・ロックのサポートは、基礎となるオペレーティング・システムのファイル・アクセス規則によって提供されます。
Caché は、データベース・ファイルと ObjectScript の OPEN コマンドで開くファイルとの間に、プロセスごとに開くことができるファイル数割り当てを適用します。OPEN コマンドで開くファイルが多すぎて OPEN コマンドへの割り当てができない場合、<TOOMANYFILES> エラーを生じます。Caché のプロセスごとに開くことができるファイルの最大数は 1,024 です。プロセスごとに開くことができるファイルの実際の最大数は、プラットフォーム固有の設定です。例えば、Windows の既定では、プロセスごとに開くことができるファイルの最大数は 998 です。詳細は、オペレーティング・システムのマニュアルを参照してください。
OPEN 構文
OPEN filename{{:({parameters{:reclength{:terminators}}})}{:timeout}}
各項目の内容は次のとおりです。
引数 | 説明 |
---|---|
filename | 引用符で囲まれた有効なファイル仕様です。このファイル・パス名は 255 文字以内にする必要があります。有効な文字は、8-bit ASCII または ISO Latin-1 Unicode です。 |
parameters | オプション — 引用符で囲まれた 1 文字コードの文字列です。実行できるファイル形式と処理タイプを定義します (スラッシュ (/) で始まるキーワードを使用して parameters を指定することもできます)。コード定義については、テーブル “OPEN モード・パラメータ” を参照してください。パラメータに R と W のいずれも指定しない場合は、R が既定値です。このシステム全体の既定のオープン・モードは、Config.MiscellaneousOpens in a new tab クラスの OpenModeOpens in a new tab プロパティを設定して構成できます。新規ファイルを開くには、N パラメータを指定する必要があります。指定しない場合、OPEN は、停止あるいはタイムアウトにより失敗します。パラメータに S、V、F、および U のいずれも指定しない場合、新しい Windows ファイルまたは UNIX® ファイルに対する既定値は S です。既存ファイルの既定値は、ファイルの作成時に指定されたモードです。A が指定されていない場合、WRITE 処理によって、以前のファイルの内容が上書きされます。パラメータは、左から右の順に適用されます。 |
reclen | オプション — Windows システムおよび UNIX システムでは、(S) レコードおよび (U) レコードの場合は最大長、固定長 (F) レコードの場合は絶対レコード長を指定します。可変長 (V) レコードの場合は無視されます。既定値は 32767 です。 |
terminators | オプション — ストリーム・モードにのみ対応するユーザ定義のレコード・ターミネータ文字列です。既定のターミネータのキャリッジ・リターン、改行、改ページをオーバーライドします。ユーザ定義のターミネータは入力にのみ適用され、ファイルへのデータの記述方法には影響を与えません (ターミネータは特殊文字としてファイルに書き込まれます)。ユーザ定義のターミネータが複数ある場合は、単一のターミネータとして使用される複数文字シーケンスではなく、ターミネータのリストとして処理されます。 |
timeout | オプション — Caché がファイルを開こうと試みる秒数です。この間にファイルを開くことができない場合、$TEST を 0 に設定し、制御をプロセスに戻します。成功した場合、$TEST が 1 に設定されます。 |
timeout 引数は、オプションですが、強くお勧めします。これは、OPEN の成功または失敗が、$TEST 特殊変数の値によって示され、$TEST は、timeout を指定した場合のみ設定されるためです。$TEST は、時間内にオープンが成功すると 1 に設定されます。時間が切れると、$TEST は 0 に設定されます。
OPEN モード・パラメータ
OPEN モード・パラメータは次の 2 つの方法で指定できます。
-
“VRWN” など、引用符で囲まれた文字コード文字列。これらの文字 1 つで 1 つのパラメータを指定します。文字コードは、任意の順序で指定できます。Caché では、パラメータが左から右の順に実行されるので、パラメータ間の相互関係により優先の順序が決まる場合もあります。
-
一連の /keyword パラメータ。引用符では囲みません。パラメータどうしは、コロンで区切って記述します。キーワード・パラメータは、任意の順序で指定できます。Caché では、パラメータが左から右の順に実行されるので、パラメータ間の相互関係により優先の順序が決まる場合もあります。
文字コード・パラメータとキーワード・パラメータを組み合わせて指定する場合、文字コード文字列を先に指定し、続けてキーワード・パラメータをコロンで区切って指定します。以下の例では、3 つの文字コード・パラメータの後に、2 つのキーワード・パラメータと reclen 引数および timeout 引数を指定しています。
OPEN "mytest":("WNS":/OBUFSIZE=65536:/GZIP=0:32767):10
文字コード | キーワード | 説明 |
---|---|---|
N | /NEW |
新しいファイル。指定されたファイルが存在しない場合は、ファイルが作成されます。指定されたファイルが既に存在する場合、同じ名前で新しいファイルが作成されます。古いファイルのステータスは、使用しているオペレーティング・システムによって異なります。UNIX® および Windows では、古いファイルは削除されます (このパラメータを使用する 2 つの並行プロセスが同じファイルを上書きすることを防止するには、ファイル・ロックを使用する必要があります)。 “N” オプションの指定がなく、OPEN で指定されたファイルが存在しない場合、Windows および UNIX® では、既定で新しいファイルは作成されません。この動作は、%SYSTEM.ProcessOpens in a new tab クラスの FileMode()Opens in a new tab メソッドを使用して構成できます。システム全体の既定の動作は、Config.MiscellaneousOpens in a new tab クラスの FileModeOpens in a new tab プロパティで設定できます。 |
E |
/CREATE または /CRE |
UNIX® の場合のみ — ファイルが存在しない場合にファイルを作成します。N モードのように、既存ファイルを削除し再作成しません。既定では、新しいファイルは作成されません。この既定の動作は、%SYSTEM.ProcessOpens in a new tab クラスの FileMode()Opens in a new tab メソッド、または Config.MiscellaneousOpens in a new tab クラスの FileModeOpens in a new tab プロパティが有効になっている場合にオーバーライドされます。 |
D |
/DELETE[=n] または /DEL[=n] |
ファイルの削除 : ファイルを閉じたときに、そのファイルを自動的に削除することを指定します。/DELETE を指定した場合、または /DELETE=n の n が 0 以外の場合、このパラメータ・コードが有効になります。/DELETE=n の n が 0 の場合、パラメータ・コードが無効になります。既定では、ファイルは削除されません。 |
R | /READ | 読み取り : READ コマンドでファイルにアクセスできます。他のプロセスもこのファイルにアクセスできます (ただし、“L” パラメータを参照のこと)。“R” モードで存在しないファイルを開こうとすると、プロセスは停止します。これを防ぐには、タイムアウトを使用します。“R” は、すべてのプラットフォームの既定値です。このシステム全体の既定のオープン・モードは、Config.MiscellaneousOpens in a new tab クラスの OpenModeOpens in a new tab プロパティを設定して構成できます。 |
W |
/WRITE または /WRI |
書き込み : WRITE コマンドでファイルにアクセスできます。Windows および UNIX® では、“W” によって、プロセスにレコードへの排他書き込みアクセスと共に、ファイルへの共有書き込みアクセスが指定されます。ファイルへの排他書き込みアクセスを指定するには “WL” を使用します。“W” モードで存在しないファイルを開こうとすると、ファイルが作成されるまで、あるいはプロセスがタイムアウト、Process Terminate、または RESJOB で解決されるまで、プロセスは停止します。“R” は、すべてのプラットフォームの既定値です。このシステム全体の既定のオープン・モードは、Config.MiscellaneousOpens in a new tab クラスの OpenModeOpens in a new tab プロパティを設定して構成できます。Windows では、/OBUFSIZE と共に使用できます。 |
L | 排他ロック : ファイルへの排他書き込みアクセスを指定するには、このオプションを “W” (書き込み) オプションと共に使用します。“WL” または “WRL” は、現在のプロセスがファイルへの排他書き込みアクセスを持つことを指定します。“RL” で開いたファイルに対しては、そのまま共有読み取りアクセスが維持されます。ファイルを同時に開く操作に対する “L” オプションの効果は、Windows と UNIX® とでは異なります。詳細は、以下の “OPEN モード・ロック“ セクションを参照してください。UNIX® システムでは、1 つのプロセスでファイルへの “WL” (または “WRL”) アクセスが指定されている場合、そのファイルへの読み取りアクセスを要求する他のプロセスは、“RL” を指定する必要があります。これは、UNIX® がファイル・ロックを調整できるようにするためです。 | |
A |
/APPEND または /APP |
追加 : WRITE 処理によって、既存のファイルの最後にデータが追加されます。既定では、追加されるのではなく、既存のデータが上書きされます。 |
S | /STREAM | 既定ターミネータとしてキャリッジ・リターン、改行、または改ページを使用するストリーム形式です。TCP デバイスを継承するジョブ起動プロセスは、自動的に “S” 形式に設定されます。USE コマンドを使用して、この形式をリセットできます。S、V、F、および U の各モードは、相互排他的です。ストリーム・レコード形式が既定です。 |
V | /VARIABLE |
可変長 : 各 WRITE によって 1 つのレコードが作成されます。Windows および UNIX® の場合、可変長レコードの長さは任意です。reclen 引数は無視されます。 可変長シーケンシャル・ファイルの末尾以外のどの場所にもレコードを挿入しないでください。WRITE では、WRITE コマンドが実行された時点以降のファイル内のデータがすべてアクセスできなくなっています。S、V、F、および U の各モードは、相互排他的です。ストリーム・レコード (S) 形式が既定です。 UTF8 変換を使用した Unicode データなど、変換テーブルを使用して記述された可変長レコードは、入力データとは異なる文字列長の格納レコードになる場合があります。このレコードを読み取る際に、Caché では元の入力文字列長を使用します。 |
F |
/FIXED または /FIX |
固定長 : それぞれのレコードは、reclen 引数で指定された長さです。例えば、 OPEN "myfile":("RF":4) USE "myfile":0 READ x:5この例では、最初の 4 文字のレコードを変数 x に読み取ります。READ 処理でのみ使用します (WRITE 処理では使用しません)。S、V、F、および U の各モードは、相互排他的です。 |
U | /UNDEFINED | 未定義長 : ファイル・レコードの長さを未定義に指定します。したがって、READ 処理では、読み取る文字数を指定する必要があります。最大レコード長は、reclen 引数で指定されます。出力時に変換しません。既定値は、最大文字列長です。S、V、F、および U の各モードは、相互排他的です。 |
K\name\ または Knum |
/TRANSLATE[=n]: /IOTABLE[=name] または /TRA[=n]: /IOT[=name] |
入出力変換モード : “K” パラメータをデバイスに使用すると、システム全体で変換が有効になっていれば、そのデバイスで入出力変換が発生します。テーブル名を指定することで、変換の基本となっている既存の定義済みテーブルを特定します。キーワードを使用するときは、/TRANSLATE を指定して入出力変換を有効にし (有効にするには n=1、無効にするには n=0)、/IOTABLE=name を使用して、使用する変換テーブルを指定します。使用可能な変換テーブルのリストは、$ZCONVERT 関数のドキュメントの、“3 つのパラメータ形式 : エンコード変換” を参照してください。プロトコルのオンとオフを切り替える + オプションと - オプションは、K プロトコルでは使用できません (テーブルをロードするスロット数の “num” を示す従来の Knum は廃止されましたが、現在もサポートされています。システム管理者は、テーブル・タイプごとの選択ウィンドウにある % NLS ユーティリティにスロット番号を表示できます)。このパラメータは、OPEN コマンドと USE コマンドのいずれでも使用できます。 |
Y\name\ または Ynum |
/XYTABLE[=name] あるいは以下のようになります。 /XYT[=name] |
$X/$Y アクション・モード : デバイスに対して “Y” パラメータを使用すると、$X/$Y というアクション・テーブルが使用されます。テーブル名を指定することで、変換の基本となっている既存の定義済み $X/$Y アクション・テーブルを識別します。$X/$Y アクションは常に使用できます。“Y” が指定されず、システムで既定の $X/$Y が定義されていない場合、組み込みの $X/$Y アクション・テーブルが使用されます。プロトコルのオンとオフを切り替える + オプションと - オプションは、Y プロトコルでは使用できません (テーブルをロードするスロット数の “num” を示す従来の Ynum は廃止されましたが、現在もサポートされています。システム管理者は、テーブル・タイプごとの選択ウィンドウにある NLS ユーティリティにスロット番号を表示できます)。このパラメータは、OPEN コマンドと USE コマンドのいずれでも使用できます。 |
/NOXY [=n] | $X および $Y の処理なし : /NOXY を指定した場合、または /NOXY=n (n は 0 以外の値) を指定した場合、$X および $Y の処理が無効になります。これにより READ 操作および WRITE 操作のパフォーマンスを大幅に向上させることができます。$X および $Y の変数値が不確定であるため、マージン処理 ($X に依存) は無効になります。/NOXY=0 の場合は、$X および $Y の処理が有効になります。これが既定です。このパラメータは、OPEN コマンドと USE コマンドのいずれでも使用できます。 | |
/OBUFSIZE=int | Windows の場合のみ — 出力バッファリング : WRITE 用の出力バッファを作成します。int 変数は、バッファ・サイズをバイト単位で指定する整数です。ファイルを書き込み専用 (“W”) でオープンする場合にのみ使用できます (“R” または “RW” の場合は不可)。特に WAN 経由で少量の書き込みを頻繁に実行する場合に、パフォーマンスを大幅に向上させることができます。ただし、システム・クラッシュが発生した場合、バッファ内のデータは失われます。CLOSE、WRITE *-1、または WRITE *-3 が実行されると、バッファ内のデータがディスクにフラッシュされます。 | |
/GZIP[=n] | GZIP 圧縮 : GZIP と互換性のあるストリーム・データ圧縮を指定します。/GZIP を指定した場合、または /GZIP=n (n は 0 以外) を指定した場合、WRITE の発行時に圧縮、READ の発行時に解凍が有効になります。/GZIP=0 を指定した場合は、圧縮と解凍が無効になります。/GZIP=0 を発行して、圧縮/解凍を無効にする前に、$ZEOS 特殊変数をチェックして、ストリーム・データの読み込みが実行中でないことを確認してください。/GZIP 圧縮は、/IOTABLE を使用して構築した変換などの入出力変換には影響しません。これは、圧縮がその他すべての変換 (暗号化を除く) の後に適用され、解凍がその他すべての変換 (暗号化を除く) の前に適用されるためです。 |
OPEN 引数キーワード
次のテーブルは、シーケンシャル・ファイルの OPEN コマンド引数キーワードを示しています。
キーワード | 既定値 | 説明 |
---|---|---|
/PARAMS=str または /PAR=str |
既定なし | parameters 位置パラメータに相当します (位置に依存しない方法でパラメータ文字コード文字列を指定する方法を提供します)。 |
/RECORDSIZE=int または /REC=int |
既定なし | reclen 位置パラメータに相当します。固定長レコードのレコード・サイズを設定します (現在 READ 処理のみに実装されます)。 |
/TERMINATOR=str または /TER=str |
既定なし | ユーザ定義のターミネータを構築する terminators 位置パラメータに相当します。str は、ストリーム・モードにのみ適用されるユーザ定義のレコード・ターミネータ文字列です。既定のターミネータのキャリッジ・リターン、改行、および改ページをオーバーライドします。ユーザ定義のターミネータは入力にのみ適用され、ファイルへのデータの記述方法には影響を与えません (ターミネータは特殊文字としてファイルに書き込まれます)。ユーザ定義のターミネータが複数ある場合は、単一のターミネータとして使用される複数文字シーケンスではなく、ターミネータのリストとして処理されます。 |
OPEN モード・ロック
2 つのプロセスが同じシーケンシャル・ファイルを開こうとした場合、2 番目の OPEN が成功するか失敗するかは、最初の OPEN が使用するモードによって決まります。以下のテーブルは、排他 (“L”) と非排他の読み取りモードと書き込みモードを使用してファイルを開こうとする 2 つのプロセス間の相互作用を示しています。これらの相互作用の解釈はブラットフォームによって異なることに注意してください。Windows オペレーティング・システムと UNIX® オペレーティング・システムについてテーブルを示します。
以下のテーブルでは、横軸が、最初の OPEN でファイルを開くモードを示し、縦軸が 2 番目の OPEN でファイルを開くモードを示しています。A 1 は 2 番目の OPEN が成功することを示し、0 は 2 番目の OPEN が失敗することを示します。
W | RW | RL | WL | RWL | R | |
W | 1 | 1 | 1 | 0 | 0 | 1 |
RW | 1 | 1 | 1 | 0 | 0 | 1 |
RL | 1 | 1 | 1 | 0 | 0 | 1 |
WL | 0 | 0 | 0 | 0 | 0 | 0 |
RWL | 0 | 0 | 0 | 0 | 0 | 0 |
R | 1 | 1 | 1 | 0 | 0 | 1 |
Windows システムの場合、このテーブルの相互作用は、同じ Caché インスタンスからの同時オープン、2 つの異なる Caché インスタンスからの同時オープン、Caché および非 Caché アプリケーションによる同時オープン (非 Caché アプリケーションでは以下に示す制限があります) に同等に適用されます。
W | RW | RL | WL | RWL | R | |
W | 1 | 1 | 1 | 1 | 1 | 1 |
RW | 1 | 1 | 1 | 1 | 1 | 1 |
RL | 1 | 1 | 1 | 0 | 0 | 1 |
WL | 1 | 1 | 0 | 0 | 0 | 1 |
RWL | 1 | 1 | 0 | 0 | 0 | 1 |
R | 1 | 1 | 1 | 1 | 1 | 1 |
UNIX® システムの場合、このテーブルに示す相互作用は、同じ Caché インスタンスから同時にファイルを開く操作にのみ該当します。2 つの異なる Caché インスタンスから同時に開く操作や、Caché および非 Caché アプリケーションで同時に開く操作には適用されません。
非 Caché ソフトウェアでの相互作用
Windows システムでは、Caché で “WL” 書き込みアクセスしてシーケンシャル・ファイルを開くと、通常、非 Caché アプリケーションで書き込みアクセスしても、同じシーケンシャル・ファイルを開くことはできなくなります。同様に、シーケンシャル・ファイルを書き込みアクセスで開いている非 Caché アプリケーションが存在すると、通常、Caché プロセスからは同時 “WL” 書き込みアクセスはできなくなります。
ただし、メモ帳やワードパッドなど特定の非 Caché アプリケーションは、ファイルを開き、共有モードでファイルのコピーを作成した後、直ちにファイルを閉じます。そのため、Caché プロセスは、“WL” モードでファイルを開くことができます。これらの非 Caché アプリケーションで、コピーしたファイルを変更し、それを元のファイルに保存しようとした場合や、元のファイルを再び開こうとした場合はエラーが発生します。さらに重大な状況が発生することもあります。例えば、これらの非 Caché アプリケーションの 1 つでファイルを開き、Caché でもそのファイルを開いて変更し、閉じたとします。ここで非 Caché アプリケーションでそのファイルの変更を保存すると、両方のプロセスで発生した変更が保存されるので、ファイル・データの整合性が損なわれる可能性があります。
UNIX® システムでは、“WL” 書き込みアクセスのために Caché でシーケンシャル・ファイルを開いても、Caché 以外のアプリケーションの動作には何も影響ありません。非 Caché アプリケーションからの書き込みアクセスを確実に制限するには、ロックを使用する必要があります。
例
以下の例では、現在のディレクトリのファイル “LUDWIG.B” を開きます。モード・パラメータが指定されていないので、ファイルは以下のように既定の読み取りアクセスのストリーム・モードで開きます。
OPEN "LUDWIG.B"
以下の例では、現在のディレクトリにある新規ファイル “LIST.FILE” を書き込みアクセスのストリーム形式で開きます。通常、括弧で囲む引数のうち、最初の引数のみを指定する場合、括弧は必要ありません。
OPEN "LIST.FILE":"WNS"
以下の例は、読み取りアクセスおよび書き込みアクセスを使用し、現在のディレクトリ内のファイル “CARDS” を 80 文字の固定レコード長で開きます。
OPEN "CARDS":("FRW":80)
以下の例は、ディレクトリ c:\usr\dir のストリーム形式ファイル “STRNG” を、既定のターミネータは使用せずに開きます。
OPEN "c:\usr\dir\STRNG":("S"::$CHAR(0)_$CHAR(255))
USE コマンド
USE コマンドは、開いたシーケンシャル・ファイルを現在のデバイスにします。多数のシーケンシャル・ファイルを開くことができますが、一度に使用できるシーケンシャル・ファイルは 1 つのみです。
構文
USE file:position
各項目の内容は次のとおりです。
引数 | 説明 |
---|---|
file | 引用符で囲まれた有効なファイル仕様です。指定するファイルは、既に開いている必要があります。 |
position | オプション — ファイル内の次の READ あるいは WRITE の位置です。position の値は数式で記述され、意味はファイルのレコード形式に依存します。固定長の場合、position はゼロを基準とした絶対レコード番号で、各レコードは事前に OPEN コマンドで指定された文字数で構成されます。ストリームあるいは可変長レコードの場合、position はゼロを基準とした絶対バイト位置です。既定では、ファイルの先頭から順番にレコードが読み取りまたは書き込まれます。 |
USE のみのコマンド・キーワード
上述のような OPEN で共有するコマンド・キーワードの他に、USE コマンドには独自のキーワード・セットがあります。
キーワード | 既定値 | 説明 |
---|---|---|
/POSITION=n | 現在のファイル位置です (ファイルを付加モードで開かない限り、ファイルを最初に開くと、ポインタはファイルの先頭にあります。付加モードでは、ポインタがファイルの末尾にあります)。 | 位置パラメータに相当します。ファイル内で次の READ あるいは WRITE の位置を設定します。 |
READ コマンドと WRITE コマンド
READ コマンドまたは WRITE コマンドの後には、位置パラメータを持つ次の USE コマンドが発行されるまで、READ 処理または WRITE 処理を続けることができます。
READ コマンド
READ コマンドは、現在のデバイスから一度に 1 レコード読み取ります。ファイルの範囲を超えて読み取ると、<ENDOFFILE> エラーを生じます。
構文
READ x#n:timeout
各項目の内容は次のとおりです。
引数 | 説明 |
---|---|
x | ファイルから読み取ったレコードを保持する変数です。 |
n | オプション — 可変長読み取りの場合、読み取る文字数です。整数で指定します。固定長読み取りの場合、この引数は無視されます。 |
timeout | オプション — 読み取り処理の完了を待機するタイムアウトまでの秒数。整数値、または整数値に変換される変数のいずれかです。 |
timeout 引数は、オプションですが、強くお勧めします。これは、timeout が指定されている場合、READ の成功または失敗が、$TEST 特殊変数の値によって示されるためです。$TEST は、時間内に読み取りが成功すると 1 に設定されます。時間が切れると、$TEST は 0 に設定されます。
次の例は、Windows シーケンシャル・ファイルから固定長レコードを読み取る READ 処理を示しています。シーケンシャル・ファイルを作成し、それにデータを書き込み、ファイルを閉じます。次に、このファイルを 4 文字の固定長読み取り用に開きます ("RF":4)。USE 位置引数を、最初のレコード (レコード 0) に設定します。読み取り処理が実行されるたびに、この位置が進みます。FOR ループによって、4 文字のレコードごとに、添え字付き変数に読み込まれます。その後、ZWRITE コマンドが、これらの添え字付きローカル変数とそれらの値をすべて表示します。
SET myf="C:\InterSystems\Cache\mgr\temp\myfixedlengthfile"
OPEN myf:("NW") USE myf WRITE "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
CLOSE myf
OPEN myf:("RF":4) USE myf:0 FOR i=1:1:7 {READ x(i):5}
CLOSE myf
ZWRITE
WRITE コマンド
WRITE コマンドは、現在のデバイスのシーケンシャル・ファイルに、一度に 1 レコードずつ書き込みます。
構文
WRITE x
各項目の内容は次のとおりです。
引数 | 説明 |
---|---|
x | 変数 x のデータは、シーケンシャル・ファイルに 1 レコードとして書き込まれます。 |
例
以下の例は、固定長ファイルの 3、4、5 番目のレコードを読み取ります。
SET myfile="FIXED.LEN"
OPEN myfile:("FR":100)
USE myfile:2
READ var1(3),var1(4),var1(5)
CLOSE コマンド
CLOSE コマンドは、シーケンシャル・ファイルの所有権を放棄します。
構文
CLOSE file CLOSE file:"D" CLOSE file:("R":newname)
引数 | 説明 |
---|---|
file | この引数で指定された名前のファイルを閉じます。 |
"D" | この引数で指定された名前のファイルを閉じて削除します。 |
("R":newname) | この引数で指定された名前のファイルを閉じ、newname という名前を付けます。 |
CLOSE のみで使用するコマンド・キーワード
以下のテーブルは、CLOSE コマンドを使用してシーケンシャル・ファイルを制御する場合にのみ使用するキーワードの説明です。
キーワード | 既定値 | 説明 |
---|---|---|
/DELETE[=n] または /DEL[=n] |
ファイルを開くときに削除するようマークされていない限り、0 | D パラメータ・コードに相当します。ファイルを削除するように指定します。/DELETE を指定した場合、または /DELETE=n の n が 0 以外の場合はパラメータ・コードが有効になり、/DELETE=n の n が 0 の場合は無効になります。 |
/RENAME=name または /REN=name |
ファイル名を変更しない | R パラメータ・コードとファイル名位置パラメータに相当します。R パラメータ・コードは、ファイル名を変更し、ファイル名位置パラメータがファイルに新しい名前を付けるように指定します。 |