Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

シーケンシャル・ファイルの入出力

この章では、InterSystems IRIS® Data Platform でのシーケンシャル・ファイルの使用法について説明します。すべてのオペレーティング・システムで、ディスク入出力ファイルはシーケンシャル・ファイルと見なされます。Windows システムでは、(プリンタがシリアル通信ポートに接続されていない限り) プリンタをシーケンシャル・ファイル入出力デバイスとして処理します。UNIX® システムでは、プリンタはターミナル入出力デバイスと見なされます。プリンタの詳細は、このドキュメントの "プリンタ" の章を参照してください。

シーケンシャル・ファイルの使用法

このセクションでは、InterSystems IRIS によるシーケンシャル・ファイルの処理方法について説明します。具体的には、シーケンシャル・ファイル入出力の概要と、関連コマンドについて説明します。

  • シーケンシャル・ファイルにアクセスするには、最初に OPEN コマンドを使用し、引数としてファイル名を指定して、ファイルを開く必要があります。また、必要に応じて OPEN の各種モード・パラメータを指定します。モード・パラメータは、OPEN で指定されたファイルが存在しない場合に、新しいファイルを作成するかどうかを指定します。同時に複数のファイルを開くことができます。

  • シーケンシャル・ファイルを開いた後、USE コマンドを使用し、そのファイル名を引数として指定して、ファイルにアクセスする必要があります。USE コマンドによって、指定されたファイルが現在のデバイスになります。したがって、一度に使用できるのは 1 つのファイルのみです。USE コマンドでは、モード・パラメータも指定できます。

  • その後、そのファイルに対して複数の READ コマンドまたは WRITE コマンドを発行できます。各 READ コマンドはファイルから 1 レコードを受け取り、各 WRITE コマンドはファイルに 1 レコードを引き渡します。“W” モード・パラメータを指定してファイルを開かないと、ファイルに書き込むことはできません。ファイルの範囲を超えて読み取ろうとすると、<ENDOFFILE> エラーを生じます。

  • $ZSEEK 関数を使用すると、シーケンシャル・ファイルの先頭、現在位置、または末尾からの文字数オフセットによって指定されるファイル位置を設定できます。$ZPOS 特殊変数には、現在のシーケンシャル・ファイルの先頭からの現在の文字数位置が含まれます。

  • ファイル入出力を完了したら、CLOSE コマンドを発行し、シーケンシャル・ファイルを閉じます。

これらの操作は、%Library.FileOpens in a new tab クラスのメソッドを使用して実行することもできます。

%Library.File.Exists()Opens in a new tab メソッドは、指定された名前のシーケンシャル・ファイルが既に存在するかどうかを示します。

%Library.File.SizeOpens in a new tab プロパティは、シーケンシャル・ファイル内の現在の文字数を返します。

%Library.File.DateModifiedOpens in a new tab プロパティは、ファイルが開いたときおよび閉じたとき (ファイルが変更された場合) に現在のローカル日付とローカル時刻で更新されます。

%Library.File.IsOpenOpens in a new tab プロパティは、ファイルが %Library.File.Open()Opens in a new tab メソッドによって開かれた場合にのみ 1 を返します。OPEN コマンドでは、このブーリアン・プロパティは設定されません。

ファイルの指定

シーケンシャル・ファイルは、キャノニック形式のパス名 (完全パス名)、またはシステムによって完全パス名に展開される相対パス名 (パス名の一部) で指定できます。パス名は、キャノニック形式にすることも (c:\InterSystems\IRIS\mgr\user\myfiles\testfile.txt)、現在のディレクトリを基準にすることもできます (testfile.txt)。先頭のピリオドが 1 つ (.) の場合、現在のディレクトリを示します。先頭のピリオドが 2 つ (..) の場合、現在のディレクトリの親を示します。OPEN コマンドで新しいファイルを作成する場合は、指定したディレクトリが既に存在している必要があります。

指定されたファイルが見つかりません」など、オペレーティング・システムによって返されるファイル・アクセス・エラーは %SYSTEM.Process.OSError() メソッドによって返されます。このメソッドは、山括弧で囲まれたオペレーティング・システムのエラー番号に続けて、エラー・テキストを返します。これを以下の Windows の例に示します。

USER>OPEN "C:\InterSystems\IRIS\mgr\nodir\testfile.txt":("WNS"):5
 
USER>w $SYSTEM.Process.OSError()
<3> The system cannot find the path specified.

USER>w ##class(%File).TempFilename("txt","C:\InterSystems\IRIS\mgr\nodir\testfile",.oserrnum)

USER>w $SYSTEM.Process.OSError()
<3> The system cannot find the path specified.

以下の Windows の例ではすべて、現在のネームスペース (USER) ディレクトリにファイルが作成されます。

  • 完全パス名 : OPEN "C:\InterSystems\IRIS\mgr\user\testfile1.txt":("WNS"):10

  • ファイル名の展開 : OPEN "testfile2.txt":("WNS"):10

  • 現在のディレクトリの展開 : OPEN ".\testfile3.txt":("WNS"):10

以下の Windows の例では、現在のネームスペース (USER) ディレクトリの既存の子ディレクトリにファイルが作成されます。

  • 現在のディレクトリの子 : OPEN "mytemp\testfile4.txt":("WNS"):10

以下の Windows の例では、親ディレクトリ (..) 構文を使用してファイルが作成されます。

  • 親ディレクトリ (C:\InterSystems\IRIS\mgr\) : OPEN "..\testfile5.txt":("WNS"):10

  • 現在のディレクトリ (親ディレクトリの子) C:\InterSystems\IRIS\mgr\user\OPEN "..\user\testfile6.txt":("WNS"):10.

  • 親ディレクトリの別の子 C:\InterSystems\IRIS\mgr\temp\OPEN "..\temp\testfile7.txt":("WNS"):10.

  • 親ディレクトリの親 C:\InterSystems\IRIS\OPEN "..\..\testfile8.txt":("WNS"):10.

Windows のパス名では、ディレクトリの区切り文字に \ (円記号) が使用されます。UNIX のパス名では、ディレクトリの区切り文字に / (スラッシュ) が使用されます。有効な文字は、8 ビット ASCII または ISO Latin-1 Unicode です。

Windows のファイル・パス名は以下の形式で指定します。

device:\directory\file.type

例えば、C:\InterSystems\IRIS\mgr\user\myfiles\testfile.txt のように指定します。type 接尾語はオプションです。

UNIX® のファイル・パス名は以下の形式で指定します。

../directory/name

ファイル・パス名は、完全に展開されたときに 256 文字を超えてはいけません。すべてのディレクトリのパス名の長さが 256 文字を超えると、<DIRECTORY> エラーが生成されます。ファイル名の長さが原因でパス名の長さが 256 文字を超えた場合は、<NAMEADD> エラーが生成されます。

UNIX® のファイル・パス名には、あらゆる種類の文字を 255 個まで使用できます。ファイル名に含まれるピリオド (“.”) とアンダースコア (“_”) はどの位置でも使用できますが、通常、その名前を意味的に区切るために使用します。例えば、ファイル・タイプとして .dat を使用して、ファイル名 pat_rec.dat を定義できます。

現在の UNIX® 既定ディレクトリのファイルにアクセスする場合、通常はその名前を指定するだけで済みます。システムは、ディレクトリに既定値を埋め込みます。

DLL 名は、完全パス名として指定することも、パス名の一部を指定することもできます。パス名の一部を指定した場合、InterSystems IRIS によって現在のディレクトリに展開されます。一般的に、DLL はバイナリ・ディレクトリ ("bin") に格納されます。バイナリ・ディレクトリの位置を確認するには、%SYSTEM.UtilOpens in a new tab クラスの BinaryDirectory()Opens in a new tab メソッドを呼び出します。

ファイル・パス名ツール

現在のデバイスがシーケンシャル・ファイルである場合、$ZIO には、そのファイルの完全パス名が含まれます。

$ZSEARCH を使用して、指定したファイルまたはディレクトリの完全なファイル指定 (パス名とファイル名) を返すことができます。ファイル名にワイルドカードを含めると、$ZSEARCH は、ワイルドカードを満たす一連の完全修飾パス名を返します。

%Library.FileOpens in a new tab クラスには、ファイル・システム・サービスを提供するさまざまなメソッドが用意されています。これには、以下のものがあります。

  • NormalizeDirectory()Opens in a new tab。指定されたファイルまたはディレクトリの完全パス名を返します。

  • NormalizeFilenameWithSpaces()Opens in a new tab。パス名に含まれているスペースをホスト・プラットフォームに合わせて適切に処理します。パス名にスペース文字が含まれている場合、パス名の処理はプラットフォームによって異なります。Windows および UNIX® の場合はパス名にスペース文字を使用することができますが、スペースを含むパス名は、追加の二重引用符 () で全体を囲む必要があります。これは、Windows の cmd /c 文に従っています。詳細は、Windows のコマンド・プロンプトで cmd /? を指定してください。

チルダ (~) 展開

Windows のパス名では、チルダ (~) は、長い名前が 8.3 形式で圧縮されていることを示します。例えば、c:\PROGRA~1\ のように表示されます。圧縮されたディレクトリ名を変換するには、%Library.FileOpens in a new tab クラスの NormalizeDirectory()Opens in a new tab メソッドを使用します。

UNIX® のパス名では、チルダ (~) 展開を使用して、現在のユーザのホーム・ディレクトリまたは指定したユーザのホーム・ディレクトリを示すことができます。

  • ~~/myfile.txt は、現在のユーザのホーム・ディレクトリに展開されます (それぞれ /Users/techwriter//Users/techwriter/myfile.txt)。

  • ~guest/myfile.txt は、ユーザ “guest” のホーム・ディレクトリに展開されます (/Users/guest/myfile.txt)。ただし、ユーザ “guest” が存在しない場合は、現在のユーザの完全なディレクトリ・パス名に展開され、~guest/myfile.txt がリテラルとして追加されます (/Users/techwriter/iris/mgr/user/~guest/myfile.txt)。

  • ~myfile.txt~123.txt は、現在のユーザの完全なディレクトリ・パス名にリテラルとして追加されます (それぞれ /Users/techwriter/iris/mgr/user/~myfile.txt/Users/techwriter/iris/mgr/user/~123.txt)。

OPEN コマンド

OPEN は、シーケンシャル・ファイルを開きます。OPEN コマンドを使用して、InterSystems IRIS データベース・ファイルを開くことはできません。

OPEN コマンドで開いたシーケンシャル・ファイルを、別のプロセスでも開くことができます。OPEN コマンドの “L” モード・パラメータまたは ObjectScript の LOCK コマンド、またはその両方を使用してシーケンシャル・ファイルへの同時アクセスを制御できます。ファイル・ロックのサポートは、基礎となるオペレーティング・システムのファイル・アクセス規則によって提供されます。

ObjectScript の OPEN コマンドで開くファイルとデータベース・ファイルとの間で、プロセスごとに開くことができるファイルの数を InterSystems IRIS で割り当てます。OPEN コマンドで開くファイルが多すぎて OPEN コマンドへの割り当てができない場合、<TOOMANYFILES> エラーを生じます。InterSystems IRIS ではプロセスごとに開くことができるファイルの最大数は 1,024 です。プロセスごとに開くことができるファイルの実際の最大数は、プラットフォーム固有の設定です。例えば、Windows の既定では、プロセスごとに開くことができるファイルの最大数は 998 です。詳細は、オペレーティング・システムのマニュアルを参照してください。

OPEN 構文

OPEN filename{{:({parameters{:reclength{:terminators}}})}{:timeout}}

各項目の内容は次のとおりです。

引数 説明
filename 引用符で囲まれた有効なファイル指定です。このファイル・パス名は 255 文字以内にする必要があります。有効な文字は、8-bit ASCII または ISO Latin-1 Unicode です。UNIX のパス名には、チルダ (~) 展開を使用して、現在のユーザのホーム・ディレクトリを示すことができます。例 : ~myfile~/myfile
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 オプション — InterSystems IRIS がファイルを開こうと試みる際の秒数です。この間にファイルを開くことができない場合、$TEST を 0 に設定し、制御をプロセスに戻します。成功した場合、$TEST が 1 に設定されます。

timeout 引数は、オプションですが、強くお勧めします。これは、OPEN の成功または失敗が、$TEST 特殊変数の値によって示され、$TEST は、timeout を指定した場合のみ設定されるためです。$TEST は、時間内にオープンが成功すると 1 に設定されます。時間が切れると、$TEST は 0 に設定されます。

OPEN モード・パラメータ

OPEN モード・パラメータは次の 2 つの方法で指定できます。

  • “VRWN” など、引用符で囲まれた文字コード文字列。これらの文字 1 つで 1 つのパラメータを指定します。文字コードは、任意の順序で指定できます。InterSystems IRIS では、左から右の順に実行されるので、文字コード間の相互関係により優先の順序が決まる場合もあります。

  • 一連の /keyword パラメータ。引用符では囲みません。パラメータどうしは、コロンで区切って記述します。キーワード・パラメータは、任意の順序で指定できます。InterSystems IRIS では、パラメータが左から右の順に実行されるので、パラメータ間の相互関係により優先の順序が決まる場合もあります。

文字コード・パラメータとキーワード・パラメータを組み合わせて指定する場合、文字コード文字列を先に指定し、続けてキーワード・パラメータをコロンで区切って指定します。以下の例では、3 つの文字コード・パラメータの後に、2 つのキーワード・パラメータと reclen 引数および timeout 引数を指定しています。

  OPEN "mytest":("WNS":/OBUFSIZE=65536:/GZIP=0:32767):10
OPEN モード・パラメータ
文字コード キーワード 説明
N /NEW

新しいファイル。指定されたファイルが存在しない場合は、ファイルが作成されます。指定されたファイルが読み取り専用ファイルとして既に存在する場合は、古いファイルが削除され、同じ名前の新しいファイルに置き換えられます (許可されている場合)。このパラメータを使用する並行プロセスが同じファイルを上書きすることを防止するには、ファイル・ロックを使用する必要があります。

“N” モード (または “T” モード) の指定がなく、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

ファイルが存在しない場合は、ファイルを作成します。“N” モードのように、既存ファイルを削除し再作成しません。既定では、新しいファイルは作成されません。この既定の動作は、%SYSTEM.ProcessOpens in a new tab クラスの FileMode()Opens in a new tab メソッド、または Config.MiscellaneousOpens in a new tab クラスの FileModeOpens in a new tab プロパティが有効になっている場合にオーバーライドされます。
T /TRUNCATE ファイルの切り捨て : 指定されたファイルが存在し、書き込み可能な場合、そのファイルは切り捨てられ、その属性は変更されません。指定されたファイルが存在しない場合、“N” モードが指定されているかのように、新しいファイルが作成されます。“WT” と “WNT” は機能的に同一です。
D

/DELETE[=n]

または

/DEL[=n]

ファイルの削除 : ファイルを閉じたときに、そのファイルを自動的に削除することを指定します。/DELETE を指定した場合、または /DELETE=nn が 0 以外の場合、このパラメータ・コードが有効になります。/DELETE=nn が 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 プロパティを設定して構成できます。/OBUFSIZE と共に使用できます。
L   排他ロック : ファイルへの排他書き込みアクセスを指定するには、“L” モードを “W” (書き込み) モードと共に使用します。“WL” または “WRL” は、現在のプロセスがファイルへの排他書き込みアクセスを持つことを指定します。“RL” で開いたファイルに対しては、そのまま共有読み取りアクセスが維持されます。ファイルを同時に開く操作に対する “L” モードの効果は、Windows と UNIX® とでは異なります。詳細は、以下の “OPEN モード・ロック“ セクションを参照してください。UNIX® システムでは、1 つのプロセスでファイルへの “WL” (または “WRL”) アクセスが指定されている場合、そのファイルへの読み取りアクセスを要求する他のプロセスは、“RL” を指定する必要があります。これは、UNIX® がファイル・ロックを調整できるようにするためです。
A

/APPEND

または

/APP

追加 : WRITE 処理によって、既存のファイルの最後にデータが追加されます。既定では、追加されるのではなく、既存のデータが上書きされます。
S /STREAM 既定ターミネータとしてキャリッジ・リターン、改行、または改ページを使用するストリーム形式です。S、V、F、および U の各モードは、相互排他的です。ストリーム・レコード形式が既定です。
V /VARIABLE

可変長 : 各 WRITE によって 1 つのレコードが作成されます。Windows および UNIX® の場合、可変長レコードの長さは任意です。reclen 引数は無視されます。

可変長シーケンシャル・ファイルの末尾以外のどの場所にもレコードを挿入しないでください。WRITE では、WRITE コマンドが実行された時点以降のファイル内のデータがすべてアクセスできなくなっています。S、V、F、および U の各モードは、相互排他的です。ストリーム・レコード (S) 形式が既定です。

UTF8 変換を使用した Unicode データなど、変換テーブルを使用して記述された可変長レコードは、入力データとは異なる文字列長の格納レコードになる場合があります。このレコードを読み取る際に、InterSystems IRIS では元の入力文字列長を使用します。

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 出力バッファリング : WRITE 用の出力バッファを作成します。int 変数は、バッファ・サイズをバイト単位で指定する整数です。ファイルを書き込み専用 (“W”) でオープンする場合にのみ使用できます (“R” または “RW” の場合は不可)。特に WAN 経由で少量の書き込みを頻繁に実行する場合に、パフォーマンスを大幅に向上させることができます。ただし、システム・クラッシュが発生した場合、バッファ内のデータは失われます。CLOSEWRITE *-1、または WRITE *-3 が実行されると、バッファ内のデータがディスクにフラッシュされます。
  /GZIP[=n] GZIP 圧縮 : GZIP と互換性のあるストリーム・データ圧縮を指定します。/GZIP を指定した場合、または /GZIP=n (n は 0 以外) を指定した場合、WRITE の発行時に圧縮、READ の発行時に解凍が有効になります。/GZIP=0 を指定した場合は、圧縮と解凍が無効になります。/GZIP=0 を発行して、圧縮/解凍を無効にする前に、$ZEOS 特殊変数をチェックして、ストリーム・データの読み込みが実行中でないことを確認してください。/GZIP 圧縮は、/IOTABLE を使用して構築した変換などの入出力変換には影響しません。これは、圧縮がその他すべての変換 (暗号化を除く) の後に適用され、解凍がその他すべての変換 (暗号化を除く) の前に適用されるためです。
  /COMPRESS=str

ストリーム・データの圧縮タイプを以下のいずれかの値で指定します。

  • "zlib" — zlib 圧縮ライブラリを使用します。/COMPRESS="zlib"/GZIP=1 と同等です。

  • "zstd" — Zstandard 圧縮アルゴリズムを使用します。

  • "lz4" — LZ4 圧縮アルゴリズムを使用します。

  • "deflate" — DEFLATE 圧縮アルゴリズムを使用します。

圧縮を無効にするには、/COMPRESS="" を指定します。文字列を圧縮するには、%SYSTEM.Util.Compress()Opens in a new tab を使用します。

OPEN 引数キーワード

次のテーブルは、シーケンシャル・ファイルの 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 が失敗することを示します。

Windows の 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 システムの場合、このテーブルの相互作用は、同じ InterSystems IRIS インスタンスからの同時オープン、2 つの異なる InterSystems IRIS インスタンスからの同時オープン、InterSystems IRIS および非 InterSystems IRIS アプリケーションによる同時オープン (非 InterSystems IRIS アプリケーションでは以下に示す制限があります) に同等に適用されます。

UNIX® の OPEN モードでの相互作用
  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® システムの場合、このテーブルに示す相互作用は、同じ InterSystems IRIS インスタンスから同時にファイルを開く操作にのみ該当します。2 つの異なる InterSystems IRIS インスタンスから同時に開く操作や、InterSystems IRIS および非 InterSystems IRIS アプリケーションで同時に開く操作には適用されません。

非 InterSystems IRIS ソフトウェアでの相互作用

Windows システムでは、InterSystems IRIS で “WL” 書き込みアクセスしてシーケンシャル・ファイルを開くと、通常、非 InterSystems IRIS アプリケーションで書き込みアクセスしても、同じシーケンシャル・ファイルを開くことはできなくなります。同様に、シーケンシャル・ファイルを書き込みアクセスで開いている非 InterSystems IRIS アプリケーションが存在すると、通常、InterSystems IRIS プロセスからは同時 “WL” 書き込みアクセスはできなくなります。

ただし、メモ帳やワードパッドなど特定の非 InterSystems IRIS アプリケーションは、ファイルを開き、共有モードでファイルのコピーを作成した後、直ちにファイルを閉じます。そのため、InterSystems IRIS プロセスは、“WL” モードでファイルを開くことができます。これらの非 InterSystems IRIS アプリケーションで、コピーしたファイルを変更し、それを元のファイルに保存しようとした場合や、元のファイルを再び開こうとした場合はエラーが発生します。さらに重大な状況が発生することもあります。例えば、これらの非 InterSystems IRIS アプリケーションの 1 つでファイルを開き、InterSystems IRIS でもそのファイルを開いて変更し、閉じたとします。ここで非 InterSystems IRIS アプリケーションでそのファイルの変更を保存すると、両方のプロセスで発生した変更が保存されるので、ファイル・データの整合性が損なわれる可能性があります。

UNIX® システムでは、“WL” 書き込みアクセスのために InterSystems IRIS でシーケンシャル・ファイルを開いても、InterSystems IRIS 以外のアプリケーションの動作には何も影響ありません。非 InterSystems IRIS アプリケーションからの書き込みアクセスを確実に制限するには、ロックを使用する必要があります。

以下の例では、現在のディレクトリのファイル “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

各項目の内容は次のとおりです。

USE コマンド・パラメータ
引数 説明
file 引用符で囲まれた有効なファイル指定です。指定するファイルは、既に開いている必要があります。UNIX のパス名には、チルダ (~) 展開を使用して、現在のユーザのホーム・ディレクトリを示すことができます。例 : ~myfile~/myfile
position

オプション — ファイル内の次の READ あるいは WRITE の位置です。position の値は数式で記述され、意味はファイルのレコード形式に依存します。固定長の場合、position はゼロを基準とした絶対レコード番号で、各レコードは事前に OPEN コマンドで指定された文字数で構成されます。ストリームあるいは可変長レコードの場合、position はゼロを基準とした絶対バイト位置です。既定では、ファイルの先頭から順番にレコードが読み取りまたは書き込まれます。

$ZSEEK 関数を使用すると、シーケンシャル・ファイルの先頭、現在位置、または末尾からの文字数オフセットによって指定されるファイル位置を設定できます。$ZPOS 特殊変数には、シーケンシャル・ファイルの先頭からの現在の文字数位置が含まれます。

USE のみのコマンド・キーワード

上述のような OPEN で共有するコマンド・キーワードの他に、USE コマンドには独自のキーワード・セットがあります。

シーケンシャル・ファイルで使用する 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\IRIS\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 コマンドは、シーケンシャル・ファイルの所有権を放棄します。

指定のファイルが開かれていないか、存在しない場合、InterSystems IRIS は、CLOSE を無視し、エラーを発行せずに返します。

構文

CLOSE file 
CLOSE file:"D" 
CLOSE file:("R":newname)
引数 説明
file 引用符で囲まれた有効なファイル指定です。指定するファイルは、既に開いている必要があります。UNIX のパス名には、チルダ (~) 展開を使用して、現在のユーザのホーム・ディレクトリを示すことができます。例 : ~myfile~/myfile
"D" この引数で指定された名前のファイルを閉じて削除します。
("R":newname) この引数で指定された名前のファイルを閉じ、newname という名前を付けます。

CLOSE のみで使用するコマンド・キーワード

以下のテーブルは、CLOSE コマンドを使用してシーケンシャル・ファイルを制御する場合にのみ使用するキーワードの説明です。

シーケンシャル・ファイルに対して CLOSE のみで使用するコマンド・キーワード
キーワード 既定値 説明

/DELETE[=n]

または

/DEL[=n]

ファイルを開くときに削除するようマークされていない限り、0 D パラメータ・コードに相当します。ファイルを削除するように指定します。/DELETE を指定した場合、または /DELETE=n の n が 0 以外の場合はパラメータ・コードが有効になり、/DELETE=n の n が 0 の場合は無効になります。

/RENAME=name

または

/REN=name

ファイル名を変更しない R パラメータ・コードとファイル名位置パラメータに相当します。R パラメータ・コードは、ファイル名を変更し、ファイル名位置パラメータがファイルに新しい名前を付けるように指定します。
FeedbackOpens in a new tab