ワークファイルは、Natural プログラムでデータを読み書きできるファイルです。
これらのファイルは、データの中間ストレージやプログラム間のデータ交換に使用されます。 データは、Natural ステートメント
READ WORK FILE
および
WRITE WORK
FILE
を使用してワークファイルとの間で転送できます。
このドキュメントでは、次のトピックについて説明します。
コンフィグレーションユーティリティまたは
DEFINE WORK FILE
ステートメントを使用して、最大 32 のワークファイルに名前(パスを含む)を割り当てることができます。
使用できるワークファイルの最大数は、パラメータ WORK
の設定によって異なります。
名前およびパスが割り当てられていないワークファイルを使用するプログラムを実行すると、Natural
はファイル名を自動的に作成し、ローカルコンフィグレーションファイルに指定された一時ディレクトリにワークファイルを書き込みます。
このファイル名は、指定されたワークファイル番号と、オペレーティングシステムによって割り当てられた任意の番号で構成されます。
ワークファイル名の生成は、一意の名前を生成するアルゴリズムに基づいています。 Natura パラメータ
TMPSORTUNIQ
に応じて、命名規則は異なります。 ワークファイル名が Natural
以外から参照される場合は、ファイルの識別上の問題を回避するために、名前を明示的に指定することをお勧めします。
以下では次のトピックについて説明します。
コンフィグレーションユーティリティでは、ワークファイル名はパラメータファイルの[ワークファイル設定(Work
Files)]カテゴリで割り当てられます。 上記のパラメータ
WORK
および TMPSORTUNIQ
もこのカテゴリにあります。 詳細については、『コンフィグレーションユーティリティ』ドキュメントの「ワークファイルの割り当て」を参照してください。
ヒント:
ワークファイルの割り当てを確認するには、"ワークファイル(Work Files)"
で検索します。 詳細については、『コンフィグレーションユーティリティ』ドキュメントの「パラメータの検索」を参照してください。
以下では次のトピックについて説明します。
ワークファイルは、Windows の環境変数を使用して定義することもできます。
パラメータファイルにワークファイル名を定義すると、パラメータファイルをそれ以上変更せずにワークファイル名を設定できます。 例えば、パラメータファイル(または
DEFINE WORK FILE
ステートメント)にワークファイルの名前を次のように指定します。
%Natural%\%myfile%
オペレーティングシステムに次のように設定されているとします。
set Natural=D:\natural set myfile=sub\test
この場合は、次のファイル名に展開されます。
D:\natural\sub\test
環境変数名は特殊文字で区切られます。 左デリミタは変数の左側に、右デリミタは変数の右側にあります。
例えば、文字列 %TEMP%
の場合は、TEMP
という名前の環境変数を識別し、%
が左右両方のデリミタとして使用されています。
有効なデリミタは次のとおりです。
デリミタのタイプ | 有効なデリミタ |
---|---|
左デリミタ |
% |
右デリミタ |
% |
注意:
文字列の末尾の印はデフォルトでは右デリミタです。%TEMP
は
TEMP
という名前の環境変数であると認識されます。
Windows では "%"
のみが環境変数に有効な左デリミタですが、Natural for Windows では以前のバージョンとの上位互換性を維持するために左デリミタとして
"%" と "$" が許可されます。
この設定により、Windows セッションでの UNIX 系ワークファイル名割り当てが可能です。 $TEMP
は、Natural
for Windows と Natural for UNIX の両方で環境変数 TEMP
として認識されます。
例:
以下の Natural コード行は同じであると解釈されます。
DEFINE WORK FILE 1 '$TEMP\myfile.dat'
および
DEFINE WORK FILE 1 '%TEMP%\myfile.dat'
TEMP
は環境変数として認識されます。 文字列
$TEMP
(または%TEMP%
)は、ランタイム時に環境変数
TEMP
の内容に置き換えられます。
ファイル名のドル記号($)には、2 つの意味があります。
"$" は、デリミタに埋め込まれた文字列の左または中央にある場合は、使用されている環境変数の左デリミタとして解釈されます。 左デリミタの後ろから右デリミタまたは EOS までのすべての文字は、環境変数の名前であるとみなされます。
"$" は、文字列の最後の文字である場合は、デリミタ文字とはみなされません。 スキャンされる文字列の一部です。
例:
次の Natural コード行は、エラーにはなりません。
DEFINE WORK FILE 1 '\\MYPC\C$\myfile.dat'
\\MYPC\C$
はデフォルトの共有とみなされます。
"C$" は有効なディレクトリです。
ただし、次の Natural コード行は、A が定義されているかどうかによってエラーになる可能性があります。
DEFINE WORK FILE 1 '\\MYPC\C$A\myfile.dat'
"A" は前にドル記号があるために環境変数として解釈されます。 "A" が定義されていない場合は、エラーが発生します。 "A" が定義されている場合は、エラーは発生しません。
ライブラリ SYSEXT
のアプリケーションプログラミングインターフェイス USR1050N
を使用してワークファイルを定義することもできます。
ワークファイルのフォーマットは、定義されているワークファイルタイプによって異なります。 さまざまなワークファイルフォーマットを使用できます。 Natural では、ファイル名と拡張子をチェックすることによってフォーマットが認識されます。
file-name.extension
file-name は最大 8 文字、extension は最大 3 文字です。
ワークファイルフォーマットは以下のとおりです。
『Unicode およびコードページのサポート』ドキュメントの「Windows、UNIX、および OpenVMS プラットフォームでのワークファイルおよび出力ファイル」も参照してください。
使用可能なタイプ:SAG
このフォーマットは、Software AG に固有です。すべてのデータタイプに使用できるため、推奨されるフォーマットです。
書き込まれた各レコードの前には、レコードの長さを含める 2 バイトが付加されます。
ワークファイル用にバイナリフォーマットを定義するには、ピリオドと拡張子 "SAG" を含むファイル名(例:<file-name>.SAG)またはピリオドを含まないファイル名(例:<file-name>)のいずれかを使用します。
使用可能なタイプ:ASCII および圧縮 ASCII
書き込まれた各レコードは改行(CR/LF)で終了されるため、ASCII フォーマットは英数字データにのみ推奨されます。
ワークファイル用に ASCII フォーマットを定義するには、ピリオドと任意の拡張子("SAG" と "NCD" を除く)を含むファイル名(例:<file-name>.<ext>)またはピリオドを含み拡張子を含まないファイル名(例:<file-name>)のいずれかを入力します。
使用可能なタイプ:Entire Connection
Entire Connection 製品では、データファイル(実際のデータを含む)とフォーマットファイル(データファイルのデータに関するフォーマット情報を含む)の 2 つのファイルを使用します。
Natural は、タイプ Entire Connection 用の対応するフォーマットファイルを自動的に生成します。 フォーマットファイルは、名前はデータファイルと同じですが、拡張子は "NCF" です。 拡張子 "NCF" を持つフォーマットファイルの内容の詳細ついては、『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
コマンドを使用してソースを再カタログする必要があります。 ワークファイルタイプ CSV を Natural バージョン 4
の生成プログラムで使用することはできません。
Natural フィールドは、以下のように CSV ワークファイルに保存されます。
最初の手順では、内部フィールドデータが可読フォーマットに変換されます。
内部 Natural データフォーマット B(バイナリ)、O(オブジェクトハンドル)、G(GUI ハンドル)、および C(属性制御)のフィールドデータは、フィールド変換なしでレコードにコピーされます。 データがそのまま取得されます。
内部 Natural データフォーマット
A(英数字)のフィールドデータは、指定されたワークファイルコードページ(『コンフィグレーションユーティリティ』ドキュメントの「ワークファイル」を参照)に変換されます。
コンフィグレーションユーティリティでワークファイルコードページが指定されていない場合は、パラメータ
CP
で定義されたデフォルトのコードページが使用され、変換は行われません。
内部 Natural データフォーマット
U(Unicode)のフィールドデータは、指定されたワークファイルコードページ(『コンフィグレーションユーティリティ』ドキュメントの「ワークファイル」を参照)に変換されるか、ワークファイルコードページが指定されていない場合はパラメータ
CP
で定義されたデフォルトのコードページに変換されます。
内部 Natural フォーマット D(日付)および T(時刻)の値は、英数字出力フォーマットに変換されます。
DTFORM
パラメータは、ユーザー指定の日付および時刻フォーマットが使用されるように評価されます。
数値タイプの内部フィールド値は、英数字出力フォーマットに変換されます。
次の手順では、可読フォーマットのフィールドデータが 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 フォーマットのワークファイルについては以下の点を考慮してください。
READ WORK FILE
ステートメントで NCD ファイルを読み込むときに、対応する NCF
フォーマットファイルが使用できないか無効な情報を含んでいる場合は、NCD ファイルは ASCII ワークファイルとみなされます。
データを NCD ファイルに追加するために APPEND
属性が使用されている場合は、新旧データのレコードレイアウト(NCF
フォーマットファイルに書き込まれるフィールドフォーマットおよび長さの情報)が一致する必要があります。
レコードレイアウトが異なる場合は、ランタイム中にエラーが発生します。
Entire Connection で処理できる WRITE WORK FILE VARIABLE
の最大ワークファイルレコードサイズは、32767 バイトです。
拡張子が "NCD" の "古い" ワークファイルがある場合は、拡張子を変更する必要があります。
以下の各プロファイルパラメータは、読み書き両方の操作に対して同じ値に設定する必要があります。
DC
(小数点文字)
IA
(INPUT 割り当て文字)
ID
(INPUT 区切り文字)
メインフレームコンピュータでの浮動小数点変数に有効な値の範囲は、他のプラットフォームと異なることに注意してください。 メインフレームの F4 および F8 変数に有効な値の範囲は次のとおりです。
±5.4 * 10-79 to ±7.2 * 1075
他のほとんどのプラットフォームで F4 変数に有効な値の範囲は次のとおりです。
±1.17 * 10-38 to ±3.40 * 1038
他のほとんどのプラットフォームで F8 変数に有効な値の範囲は次のとおりです。
±2.22 * 10-308 to ±1.79 * 10308