ワークファイルとはデータを書き込むことができるファイルで、ワークファイルからデータを Natural プログラムで読み取ることができます。これらは、データの中間ストレージおよびプログラム間のデータ交換に使用されます。Natural ステートメント
READ WORK FILE
および WRITE WORK
FILE
、または UPLOAD PC FILE
および DOWNLOAD PC
FILE
を使用して、ワークファイルとの間でデータを転送できます。
このドキュメントでは、次のトピックについて説明します。
コンフィグレーションユーティリティまたはDEFINE WORK
FILE
ステートメントを使用して、最大 32 個のワークファイルの名前(パスを含む)を割り当てることができます。
使用できるワークファイルの最大数は、パラメータ WORK
の設定によって異なります。
名前とパスが割り当てられていないワークファイルを使用するプログラムを実行すると、Natural が自動的にファイル名を作成し、ワークファイルをローカルコンフィグレーションファイルで指定された一時ディレクトリに書き込みます。このようなファイルの名前は、指定されたワークファイル番号と、オペレーティングシステムによって割り当てられた任意の番号で構成されます。ワークファイル名の生成は、固有の名前の生成を試みるアルゴリズムに基づいています。Natural
パラメータ TMPSORTUNIQ
により、命名規則が異なる場合があります。ワークファイル名が Natural の外部から参照されている場合は、ファイルの識別時に問題が発生しないよう、名前を明示的に指定することをお勧めします。
以下では次のトピックについて説明します。
コンフィグレーションユーティリティでは、パラメータファイルの Work
Files カテゴリにワークファイル名が割り当てられます。上記のパラメータ WORK
および TMPSORTUNIQ
は、このカテゴリにも含まれます。詳細については、『コンフィグレーションユーティリティ』ドキュメントの「ワークファイルの割り当て」を参照してください。
ヒント:
"Work Files" を検索し、ワークファイルの割り当てを見つけます。詳細については、『コンフィグレーションユーティリティ』ドキュメントの「パラメータの検索」を参照してください。
以下では次のトピックについて説明します。
ワークファイルは UNIX 環境変数を使用して定義することもできます。パラメータファイルでワークファイル名を定義した後は、パラメータファイルを変更せずにワークファイル名を設定できます。例えば、パラメータファイル(または DEFINE WORK
FILE
ステートメント)のワークファイルに次の名前を指定する場合:
$NATURAL/$myfile
および、お使いのオペレーティングシステムで以下の設定を想定した場合:
set NATURAL=/usr/natural set myfile=sub/test
これにより、次のファイル名に展開されます。
usr/natural/sub/test
注意:
シェルによってチルダ文字(~)の解釈はさまざまなため、この文字は Natural では解釈されません。
環境変数の名前は特殊文字で区切られます。左側のデリミタは変数の左側にあり、右側のデリミタは右側にあります。
例えば、文字列 $TEMP
は TEMP
という名前の環境変数を識別します。$
はともに、左側および右側のデリミタとして使用されます。
有効なデリミタ:
デリミタのタイプ | 有効なデリミタ |
---|---|
左側のデリミタ |
$ |
右側のデリミタ |
/ |
また、ライブラリ SYSEXT
のアプリケーションプログラミングインターフェイス USR1050N
を使用して、ワークファイルを定義することもできます。
ワークファイルのフォーマットは、定義されているワークファイルタイプによって異なります。さまざまなワークファイルフォーマットを使用できます。Natural は、ファイル名とその拡張子を確認することでフォーマットを認識します。
file-name.extension
ここで、file-name には最大 8 文字を使用でき、extension には最大 3 文字を使用できます。
ワークファイルフォーマットは次のとおりです。
『Unicode およびコードページのサポート』ドキュメントの「ワークファイルと出力ファイル」も参照してください。
使用可能なタイプ:SAG
Software AG に固有のこのフォーマットは、すべてのデータタイプで使用できるため、推奨されるフォーマットです。ただし、異なるエンディアンモードのプラットフォーム間で移行することはできません。
書き込まれる各レコードの先頭の 2 バイトには、レコードの長さが格納されます。長さ自体は、プラットフォーム固有のフォーマットで書き込まれます。
ワークファイルのバイナリフォーマットを定義するには、ピリオドと拡張子 SAG(<file-name>.SAG など)を含むファイル名を使用します。
使用可能なタイプ:ASCII および圧縮 ASCII。
各書き込みレコードは改行(LF)で終了するため、ASCII フォーマットは英数字データにのみ推奨されます。
ワークファイルの ASCII フォーマットを定義するには、SAG および NCD を除く任意の拡張子とピリオドを含むファイル名(<file-name>.<ext> など)、または、ピリオドを含み拡張子を持たないファイル名(<file-name> など)を入力します。
使用可能なタイプ:Entire Connection および Transfer。
ワークファイルは、2 つの異なる方法でアクセスできます。
UNIX 上でローカルにアクセスする方法。この目的には、ワークファイルタイプの Entire Connection が使用されます。
Entire Connection を使用したデータ転送を介してアクセスする方法。この目的には、ワークファイルタイプ Transfer が使用されます。データは Entire Connection に送信され、PC にデータが書き込まれます。
製品 Entire Connection には 2 つのファイル(実際のデータを含むデータファイルと、データファイル内のデータに関するフォーマット情報を含むフォーマットファイル)が使用されます。
Natural は、タイプ Entire Connection に対応するフォーマットファイルを自動的に生成します。フォーマットファイルはデータファイルと同じ名前ですが、拡張子が NCF です。拡張子 NCF を持つフォーマットファイルの詳細については、『Entire Connection』ドキュメントを参照してください。
タイプ Transfer を使用する場合、製品 Entire Connection によりフォーマットファイルが生成されます(オプション Create format file がユーザープロパティで非アクティブ化されていない場合。詳細については、『Entire Connection』ドキュメントを参照してください)。
ワークファイルの Entire Connection フォーマットを定義するには、拡張子 NCD とピリオドを含むファイル名(<file-name>.NCD など)を入力します。
Entire Connection フォーマットのワークファイルをローカルディスクに対して直接読み取り/書き込みできます。
「拡張子 NCD のワークファイルに関する特別な考慮事項」も参照してください。
注意:
READ WORK FILE
ステートメントの RECORD
オプションは、フォーマット Entire Connection のワークファイルの読み取りには使用できません。
使用可能なタイプ:Portable
タイプ Portable は、ワークファイルが異なるマシンに転送されるときに、ワークファイルの自動エンディアン変換を実行します。例えば、PC(リトルエンディアン)で書かれたワークファイルを RS6000 または HP マシン(ビッグエンディアン)で正しく読み取ることができます。エンディアン変換は、フィールドフォーマット I2、I4、F4、F8、および U にのみ適用されます。浮動小数点のフォーマットは IEEE とみなされます。ただし、IEEE の浮動小数点表記はハードウェアシステムによって若干異なります。原則として、これらの違いは通常はワークファイルに書き込まれない無限大表現および NaN 表現にのみ適用されます。不明な点がある場合は、ハードウェアの説明を確認してください。
ファイルは常にマシン固有の表現で書き込まれるため、変換は、表現の異なるマシンによってファイルが読み取られた場合にのみ実行されます。これにより、可能な限り高速なパフォーマンスが維持されます。
上記の変換を除き、このフォーマットで変換は行われません。
ダイナミック変数に READ WORK
FILE
ステートメントを使用すると、変数のサイズが現在のレコードの長さに変更されます。
使用可能なタイプ:Unformatted
タイプ Unformatted は、1 つのダイナミック変数と 1 つのレコードのみを含むファイル全体の読み取りまたは書き込みを行います(例えば、データベースから読み取られたビデオを保存する場合)。フォーマット情報は挿入されません。すべてがそのまま書き込まれ、読み取られます。
使用可能なタイプ:CSV(コンマ区切りの値)
注意:
ワークファイルタイプ CSV を使用する場合は、CATALOG
または STOW
コマンドを使用してソースを再カタログする必要があります。Natural バージョン 4 の生成プログラムでは、ワークファイルタイプ CSV を使用できません。
Natural フィールドは、次のように CSV ワークファイルに保存されます。
最初の手順では、内部フィールドデータが読み取り可能なフォーマットに変換されます。
内部の Natural データフォーマット B(バイナリ)、O(オブジェクトハンドル)、G(GUI ハンドル)、C(属性制御)のフィールドデータは、フィールド変換なしでレコードにコピーされます。データはそのまま取得されます。
内部の Natural データフォーマット A(英数字)のフィールドデータは、指定されたワークファイルのコードページに変換されます(『コンフィグレーションユーティリティ』ドキュメントの「ワークファイル」を参照)。コンフィグレーションユーティリティでワークファイルのコードページが指定されていない場合は、パラメータ CP
で定義されたデフォルトのコードページが使用されます。変換は行われません。
内部の Natural データフォーマット U(Unicode)のフィールドデータは、指定されたワークファイルのコードページに変換されます(『コンフィグレーションユーティリティ』ドキュメントの「ワークファイル」を参照)。ワークファイルのコードページが指定されていない場合は、パラメータ CP
で定義されたデフォルトのコードページに変換されます。
内部の Natural フォーマット D(日付)と T(時刻)の値は、英数字出力フォーマットに変換されます。ユーザーが指定した日時フォーマットが使用されるように、DTFORM
パラメータが評価されます。
数値タイプの内部フィールド値は、英数字出力フォーマットに変換されます。
2 番目の手順では、読み取り可能なフォーマットのフィールドデータが CSV ワークファイルレコードにコピーされます。ワークファイルのフィールドは、指定されたセパレータ文字で区切られます。フィールドに特殊文字が含まれている場合、フィールドは二重引用符で区切られます。各書き込み記録は改行(CR/LF)で終了します。
Natural フィールド名を持つヘッダーをワークファイルに書き込むよう定義した場合(『コンフィグレーションユーティリティ』マニュアルの「ワークファイルの割り当て」を参照)、以下が適用されます。
WRITE WORK
FILE
ステートメントでは、最初に書き込まれたレコードのフィールド名を含むヘッダー行がワークファイルの最初の行に格納されます。後続の CSV レコードに異なる数のフィールドが含まれている場合は、ヘッダー行が後続の CSV レコードに対応していない可能性があります。
READ WORK
FILE
ステートメントでは、CSV ワークファイルの最初の行がヘッダー行とみなされます。したがって、最初の行はスキップされます(つまり、最初の行のレコードデータは返されません)。
拡張子 NCD を持つファイルが Entire Connection によって作成され、READ WORK
FILE
ステートメントを介して Natural に読み込まれる場合、セッションプロパティで Entire Connection オプション Keep trailing blanks をアクティブ化する必要があります。詳細については、『Entire Connection』ドキュメントを参照してください。
注意:
Entire Connection を使用して NCD ファイルを作成し、オブジェクトハンドラを使用してこのファイルをロードすると、ソースコントロールレコードが見つからないことを示すエラーが表示される場合があります。これを回避するには、NCD ファイルを作成するときにオプション Keep
trailing blanks がアクティブであることを確認してください。
次の考慮事項は、Entire Connection フォーマットのワークファイルに適用されます。
NCD ファイルが READ WORK FILE
ステートメントで読み込まれ、対応する NCF フォーマットファイルが利用できないか、または無効な情報を含んでいる場合、NCD ファイルは ASCII ワークファイルとみなされます。
APPEND
属性を使用して NCD ファイルにデータを追加する場合、古いデータと新しいデータのレコードレイアウト(NCF フォーマットファイルに書き込まれるフィールドフォーマットおよび長さの情報)が一致している必要があります。レコードレイアウトが異なる場合は、ランタイム中にエラーが発生します。
Entire Connection で処理できる WRITE WORK FILE
VARIABLE
のワークファイルレコードの最大サイズは 32767 バイトです。
拡張子 NCD の "古い" ワークファイルがある場合は、拡張子を変更する必要があります。
次の各プロファイルパラメータは、読み取りおよび書き込み操作の両方で同じ値に設定する必要があります。
DC
(小数点文字)
IA
(入力割り当て文字)
ID
(入力デリミタ文字)
メインフレームコンピュータ上の浮動小数点変数に使用できる値の範囲は、他のプラットフォームとは異なることに注意してください。メインフレーム上の F4 変数と F8 変数に設定可能な値の範囲は次のとおりです。
±5.4 * 10-79~±7.2 * 1075
F4 変数について、その他の大半のプラットフォームで設定可能な値範囲は次のとおりです。
±1.17 * 10-38~±3.40 * 1038
F8 変数について、その他の大半のプラットフォームで設定可能な値の範囲は次のとおりです。
±2.22 * 10-308~±1.79 * 10308
Entire Connection でデータ転送中に DBMS コールが発行され、その数が画面 I/O 間で許可される DBMS コールの制限を超える場合(プロファイルパラメータ MADIO
で指定)、Natural エラーメッセージが返されます。このエラーを回避するために、ライブラリ SYSEXT
にアプリケーションプログラミングインターフェイス USR1068N
が用意されています。USR1068
はデータベースコールのカウンタをゼロ(0)にリセットします。データ転送中に DBMS コールが発行されるたびに呼び出す必要があります。
ローカルアクセスを使用すると(つまり、データ転送が行われません)、Entire Connection フォーマットのワークファイルをローカルディスクに対して直接読み取り/書き込みできます。ただし、データ転送を使用して Entire Connection フォーマットのワークファイルにアクセスすることもできます。どちらの方法も同時に使用できますが、ワークファイル番号が異なる場合のみ使用できます。
データ転送(タイプ Transfer)を使用してアクセスするワークファイルは、Entire Connection フォーマット(NCD)である必要があります。
データ転送では、Natural ステートメント READ WORK
FILE
および WRITE WORK FILE
はローカルディスクとの間で読み取りや書き込みを行わず、Entire Connection を実行する PC にデータを転送します。その後、Entire Connection によって、PC のディスクとの間で読み取り/書き込み操作が実行されます。
ワークファイル番号を使用するには、コンフィグレーションユーティリティでプロファイルパラメータ ECPMOD
を ON
に設定する必要があります。この場合、ワークファイル名を割り当てる必要はありません。これは、Entire Connection がファイル名の入力を求めるためです。