バージョン 6.3.3
 —  オペレーション  —

ワークファイル

ワークファイルは、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 という名前の環境変数を識別し、% が左右両方のデリミタとして使用されています。

有効なデリミタは次のとおりです。

デリミタのタイプ 有効なデリミタ
左デリミタ

%
$

右デリミタ

%
/
.
\

注意:
文字列の末尾の印はデフォルトでは右デリミタです。%TEMPTEMP という名前の環境変数であると認識されます。

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 つの意味があります。

例:

次の 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 を使用してワークファイルを定義することもできます。

Top of page

ワークファイルフォーマット

ワークファイルのフォーマットは、定義されているワークファイルタイプによって異なります。 さまざまなワークファイルフォーマットを使用できます。 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 および圧縮 ASCII

書き込まれた各レコードは改行(CR/LF)で終了されるため、ASCII フォーマットは英数字データにのみ推奨されます。

ワークファイル用に ASCII フォーマットを定義するには、ピリオドと任意の拡張子("SAG" と "NCD" を除く)を含むファイル名(例:<file-name>.<ext>)またはピリオドを含み拡張子を含まないファイル名(例:<file-name>)のいずれかを入力します。

Entire Connection フォーマット

使用可能なタイプ:Entire Connection

Entire Connection 製品では、データファイル(実際のデータを含む)とフォーマットファイル(データファイルのデータに関するフォーマット情報を含む)の 2 つのファイルを使用します。

Natural は、タイプ Entire Connection 用の対応するフォーマットファイルを自動的に生成します。 フォーマットファイルは、名前はデータファイルと同じですが、拡張子は "NCF" です。 拡張子 "NCF" を持つフォーマットファイルの内容の詳細ついては、『Entire Connection』ドキュメントを参照してください。

ワークファイル用に Entire Connection フォーマットを定義するには、ピリオドと拡張子 "NCD" を含むファイル名(例:<file-name>.NCD)を入力します。

Entire Connection フォーマットのワークファイルはローカルディスクとの間で直接読み書きできます。

拡張子 NCD を持つワークファイルについての特別な考慮」も参照してください。

注意:

  1. READ WORK FILE ステートメントの RECORD オプションは、フォーマット Entire Connection のワークファイルを読み込むのには使用できません。
  2. ワークファイルタイプ Entire Connection では、オペランドフォーマット U(Unicode)はサポートされていません。 このワークファイルタイプで U が使用された場合は、ランタイムエラーメッセージが表示されます。

Portable フォーマット

使用可能なタイプ:Portable

タイプ Portable は、ワークファイルが別のマシンに転送されるときに、ワークファイルの自動エンディアン変換を実行します。 例えば、PC(リトルエンディアン)で書き込まれたワークファイルは、RS6000 または HP マシン(ビッグエンディアン)で正しく読み取ることができます。 エンディアン変換は、フィールドフォーマット I2、I4、F4、F8、および U にのみ適用されます。 浮動小数点フォーマットは、IEEE であるとみなされます。 ただし、ハードウェアシステムによって、IEEE 浮動小数点表現にはわずかな違いがあります。 ルールとして、これらの違いは、ワークファイルに通常書き込まれない無限と NaN 表現にのみ適用されます。 詳細については、ハードウェア記述を確認してください。

異なる表記のマシンによってファイルが読まれる場合にのみ変換が実行されるように、ファイルは常にマシン固有の表記で記述されます。 これにより、速いパフォーマンスが保たれます。

上記の変換以外には、このフォーマットにはその他の変換はありません。

READ WORK FILE ステートメントがダイナミック変数に使用される場合は、変数は現在のレコード長にサイズ変更されます。

Unformatted フォーマット

使用可能なタイプ:Unformatted

タイプ Unformatted は、1 つのダイナミック変数と 1 つのレコードを持つ完全なファイルを読み書きします(例えば、データベースから読み込んだビデオを保存するため)。 フォーマット情報は挿入されず、すべてそのまま読み書きされます。

CSV フォーマット

使用可能なタイプ:CSV(コンマ区切りの値)

注意:
ワークファイルタイプ CSV を使用する場合は、CATALOG または STOW コマンドを使用してソースを再カタログする必要があります。 ワークファイルタイプ CSV を Natural バージョン 4 の生成プログラムで使用することはできません。

Natural フィールドは、以下のように CSV ワークファイルに保存されます。

  1. 最初の手順では、内部フィールドデータが可読フォーマットに変換されます。

  2. 次の手順では、可読フォーマットのフィールドデータが CSV ワークファイルレコードにコピーされます。 ワークファイル内のフィールドは、指定されたセパレータ文字で区切られています。 フィールドに特殊文字が含まれている場合は、フィールドは二重引用符で区切られます。 書き込まれた各レコードは、改行(CR/LF)で終了されます。

Natural フィールド名を含むヘッダーがワークファイルに書き込まれるように定義している場合は(『コンフィグレーションユーティリティ』ドキュメントの「ワークファイルの割り当て」を参照)、以下が適用されます。

Top of page

拡張子 NCD を持つワークファイルについての特別な考慮

拡張子 "NCD" を持つファイルが Entire Connection で作成されて READ WORK FILE ステートメントで Natural に読み込まれる場合は、セッションプロパティで Entire Connection オプションの[Keep trailing blanks]がアクティブになっている必要があります。 詳細については、『Entire Connection』ドキュメントを参照してください。

注意:
Entire Connection を使用して NCD ファイルを作成し、オブジェクトハンドラを使用してこのファイルをロードすると、ソース制御レコードが見つからないことを示すエラーが表示されることがあります。 これを回避するには、NCD ファイルを作成するときに[Keep trailing blanks]オプションがアクティブになっていることを確認します。

Entire Connection フォーマットのワークファイルについては以下の点を考慮してください。

Top of page