バッチモードでの Natural

このドキュメントでは、Natural をバッチモードで実行する場合の特殊な考慮事項について説明します。次のトピックについて説明します。


バッチモードとは?

Natural では、2 つの処理モードを区別しています。

  • (Natural スタジオを使用する)対話式モード

  • バッチモード

2 つのモードの主な違いは、対話式モードでは、コマンドとデータがユーザーによりキーボードから入力され、出力が画面に表示されることです。バッチモードでは、ユーザーが介入することなく、入力がファイルから読み取られ、出力がファイルに書き込まれます。

Natural がバッチジョブとして実行されている場合、バッチジョブを実行したユーザーが Natural を操作する必要ありません。バッチジョブは、順番の決まった入力データを受け取って順番に実行されるプログラムで構成されます。

バッチモードは、大量のデータを定期的に処理する場合に便利です。

バッチモードでの Natural セッションの開始

バッチモードは、パラメータ BATCHMODE を使用してアクティブ化されます。

Start of instruction setバッチモードでNatural セッションを開始するには

  1. 以下に示すように、ダイナミックパラメータ BATCHMODE で Natural を起動します。

    natural BATCHMODE

    上記の呼び出し(BATCHMODE パラメータのみが指定されている場合)では、必要な入出力チャネルがコンフィグレーションユーティリティで定義済みであるとみなされます。入出力チャネルについて詳しくは、このセクションで後述する「バッチモードでの Natural の使用」を参照してください)。パラメータファイル内のバッチモードに関連するプロファイルパラメータの詳細については、『コンフィグレーションユーティリティ』ドキュメントの「バッチモード」を参照してください。

    また、必要な入出力チャネルをダイナミックパラメータとして上記の呼び出しに追加することもできます。これについては、このセクションの「バッチモードのサンプルセッション」で後述します。上記の呼び出しでダイナミックパラメータとして指定された入出力チャネルは、パラメータファイル内のチャネル定義を上書きします。

  2. 出力チャンネルとして定義されているファイルをチェックします。終了時には、このファイルには、セッションが正常に終了したことを示すメッセージが含まれている必要があります。

バッチモードでの Natural セッションの終了

バッチモードの Natural セッションは、セッション中に次のいずれかを検出すると終了します。

注意:
バッチ入力ファイルで入力終了条件が発生すると、バッチセッションも終了します。この場合、出力チャネルとして定義されたファイルに、予期しない終了を示すメッセージが含まれています。

バッチモードでの Natural の使用

バッチモードで Natural セッションを開始するには、ダイナミックパラメータ BATCHMODE を指定する必要があります。さらに、入出力チャネルは以下で説明するように定義する必要があります。

重要:
バッチモードでは、入力チャネル CMSYNIN および/または CMOBJIN、ならびに出力チャネル CMPRINT が常に必要です。

以下では次のトピックについて説明します。

入出力チャネル

バッチモードには次のパラメータを使用できます。

パラメータ 説明
CMSYNIN Natural プログラムの実行中に INPUT ステートメントによって読み込まれる Natural コマンドとデータ(オプション)を含むバッチ入力ファイルを定義します。
CMOBJIN INPUT ステートメントで読み取るデータを含むバッチ入力ファイルを定義します。このデータは、該当する RUN または EXECUTE コマンドの直後に、パラメータ CMSYNIN で定義されたファイルに配置することもできます。
CMPRINT Natural プログラムの DISPLAYPRINT および WRITE ステートメントから得られた出力のバッチ出力ファイルを定義します。
CMPRTnn セッション中に実行される任意の Natural プログラムによって参照される追加レポートの出力ファイルを定義します。nn は、DISPLAYPRINT、または WRITE ステートメントで使用されているレポート番号に対応する 01~31 の 2 桁の 10 進数です。
CMWRKnn セッション中に実行される任意の Natural プログラムによって参照されるワークファイルを定義します。nn は、READ WORK FILEまたは WRITE WORK FILE ステートメントで使用されている番号に対応する 01~32 の 2 桁の 10 進数である必要があります。
NATLOG パラメータ CMPRINTで定義されたバッチ出力ファイルに書き込むことができなかったメッセージを記録するために使用します。バッチモードで NATLOG を有効にすることをお勧めします。

入力および出力ファイルのコードページ

以下のパラメータは、入力ファイルのエンコードおよび出力ファイルのエンコードに使用されるコードページを指定するために使用されます。

パラメータ 説明
CPSYNIN コマンドのバッチ入力ファイルのエンコードに使用するコードページを指定します。このファイルは、パラメータ CMSYNIN で定義されます。
CPOBJIN データのバッチ入力ファイルのエンコードに使用するコードページを指定します。このファイルは、パラメータ CMOBJIN で定義されます。
CPPRINT バッチ出力ファイルのエンコードに使用するコードページを指定します。このファイルは、パラメータ CMPRINT で定義されます。

CMSYNIN および CMOBJIN に対するエンコード:

  • 入力ファイル CMSYNIN または CMOBJIN のいずれかにコードページが指定されている場合、入力ファイルのデータはこのコードページを使用してエンコードされているとみなされます。

  • 入力ファイル CMSYNIN または CMOBJIN のいずれかにコードページが指定されていない場合、入力ファイル内のデータは、Natural パラメータ CP で指定されたデフォルトのコードページを使用してエンコードされているとみなされます。

  • Natural パラメータ CP でコードページが指定されていない場合、入力ファイルのデータは現在のシステムコードページを使用してエンコードされているとみなされます。

CMPRINT に対するエンコード:

  • 出力ファイル CMPRINT にコードページが指定されている場合、出力データはこのコードページを使用してエンコードされます。

  • 出力ファイル CMPRINT にコードページが指定されていない場合、出力データは、Natural パラメータ CP で指定されたデフォルトのコードページを使用してエンコードされます。

  • Natural パラメータ CP でコードページが指定されていない場合、出力データは現在のシステムコードページを使用してエンコードされます。

エンコード/デコードが失敗した場合(例えば、ファイルのエンコードに使用されるコードページに含まれていない文字が CMPRINT に書き込まれた場合)、バッチジョブはスタートアップエラー 42(バッチモードドライバエラー)で終了し、エンコード/デコードエラーが発生したファイルが示されます。

特に、これらの各パラメータでは、コードページとして UTF-8 を指定することができることに注意してください。これにより、UTF-8 でエンコードされた Unicode データの読み取りと書き込みが可能になります。

バッチモードのサンプルセッション

この例では、バッチモードで Natural を起動する方法を説明します。単純な Natural プログラムが実行され、データ項目がバッチ入力ファイルから取得されます。この項目が INPUT ステートメントで処理された後、続く DISPLAY ステートメントによってデータがバッチ出力ファイルに書き込まれます。続いて、Natural が終了します。

この例では、ライブラリ SYSEXBAT に保存されているプログラム RECCONT を使用しています。

注意:
このライブラリに保存されているオブジェクトの詳細については、ライブラリ SYSEXBAT 内のテキスト A-README を参照してください。

サンプルセッションが、次のコールによって呼び出されます。

natural BATCHMODE CMSYNIN=cmd.txt CMOBJIN=data.txt CMPRINT=out.txt NATLOG=ALL

注意:
このコールでは、すべてのファイルが現在のディレクトリにあり、出力がこのディレクトリに書き込まれることを想定しています。ファイルが別のディレクトリにある場合、または出力を別のディレクトリに書き込む場合は、パスを指定する必要があります。

上記の呼び出しのパラメータを以下で説明します。

BATCHMODE

パラメータ BATCHMODE はバッチモードを有効にし、システム変数の値 *DEVICEBATCH に設定します。

CMSYNIN=cmd.txt

バッチ入力ファイル cmd.txt は、ファイルシステムに保存されるテキストファイルです。このファイルの内容を以下に示します。ライブラリ SYSEXBAT へのログオン、Natural プログラム RECCONT の実行、および Natural セッションの終了のための Natural システムコマンドが含まれています。

LOGON SYSEXBAT
EXECUTE RECCONT
FIN

Natural プログラム RECCONT の内容は次のとおりです。

DEFINE DATA
LOCAL
  1 #firstname   (A10)
  1 #lastname    (A10)
END-DEFINE
INPUT (IP=OFF AD=M) #firstname #lastname
DISPLAY #firstname #lastname
END
CMOBJIN=data.txt

RECCONT プログラム内の INPUT ステートメントは、バッチ入力ファイル data.txt で定義されたデータを使用します。これは、ファイルシステムに保存されているテキストファイルです。このファイルの内容を以下に示します。

Ben %
Smith

注意:
パーセント文字(%)は、情報が次行に続くことを示します。

CMPRINT=out.txt

プログラム RECCONT 内の DISPLAY ステートメントは、ファイルシステムで作成されたバッチ出力ファイル out.txt にデータを書き込みます。このファイルの内容を以下に示します。

NEXT LOGON SYSEXBAT
Logon accepted to library SYSEXBAT.
NEXT EXECUTE RECCONT

                      
DATA Ben %
DATA Smith
Page     1                                                   25.04.05  13:39:09 

#FIRSTNAME #LASTNAME                                                            
---------- ----------                                                           

Ben        Smith                                                                
NEXT FIN
NAT9995 Natural session terminated normally.
NATLOG=ALL

上記のコールでサンプルセッションを呼び出すと、(バッチ入出力ファイルファイルの名前も含めて)すべてのタイプのメッセージを含むログファイルが作成されます。通常、ログファイルは、ローカルコンフィグレーションファイルに定義されている Natural の一時ディレクトリに作成されます。NATLOG パラメータの説明を参照してください。

次の図は、バッチモードで Natural が入力を読み取り出力を書き込むさまざまな方法を示しています。

Batch mode

上図に示すように、次のいずれかの手順に従います。

  • CMOBJIN および CMSYNIN
    バッチ入力には異なるファイルが使用されます。あるファイルには Natural コマンドが含まれ、別のファイルにはデータが含まれます。

    natural BATCHMODE CMSYNIN=cmd.txt CMOBJIN=data.txt CMPRINT=out.txt
  • CMSYNIN
    バッチ入力には 1 つのファイルが使用されます。これには Natural コマンドとデータの両方が含まれています。

    natural BATCHMODE CMSYNIN=data.txt CMOBJIN=data.txt CMPRINT=out.txt

    注意:
    使用されるバッチ入力ファイルは 1 つのみですが、パラメータ CMSYNINCMOBJIN の両方を指定する必要があります。両方のパラメータが同じファイルを参照する必要があります。

  • CMOBJIN および STACK
    バッチ入力には 1 つのファイルが使用されます。これにはデータが含まれています。Natural コマンドは、プロファイルパラメータ STACK を使用して指定します。

    natural BATCHMODE CMOBJIN=data.txt STACK="(LOGON SYSEXBAT; RECCONT;FIN)"

バッチモード検出

システム変数 *DEVICE は、Natural がバッチモードまたは対話式モードのどちらで実行されているかを示します。

モード 説明
バッチモード *DEVICE には値 BATCH が含まれます。この値は、パラメータ BATCHMODE によって設定されます。
対話式モード *DEVICEには BATCH 以外の値が含まれています。ほとんどの場合、値 VIDEO が含まれています。

例:

IF *DEVICE = "BATCH" THEN
   WRITE 'This is the background task'
ELSE
   WRITE 'This is the interactive session'
END-IF

バッチモード制限

Natural がバッチモードで実行されている場合は、一部の機能が使用できなくなるか、無効になります。

  • 対話式入力または対話式出力はできません。

  • INPUT ステートメントのデータのみを処理できます。

  • 端末データベース SAGtermcap はサポートされていません。そのため、別の文字セットに使用される端末機能 TCS はサポートされていません。別の文字セットを使用するには、代わりに環境変数 NATTCHARSET を使用してください。

  • CMPRINT で定義されたバッチ出力ファイルには、色およびビデオ属性は書き込まれません。

  • 充填文字は INPUT ステートメント内には表示されません。

  • 特定の Natural システムコマンドはバッチモードで実行できないため、無視されます。『システムコマンド』ドキュメントには、この制限が適用される各システムコマンドに対応する注記が記載されています。

バッチモードシミュレーション

前述のバッチモードに加えて、バッチモードのシミュレートも可能です。ただし、バッチモードのシミュレーションではなく、バッチモードを使用することをお勧めします。バッチモードには、バッチモードシミュレーションと比較して次の利点があります。

  • キーワードデリミタモードがサポートされており、簡単なデータ入力が可能です。

  • 構成可能なフォーマット済みの出力処理。

  • 拡張エラー処理。

  • 起動およびシャットダウンの高速化。

  • プログラムの実行の高速化。

入力チャネルがファイルにリダイレクトされる場合、Natural は入力コマンドとデータをキーボードからではなく、このファイルから読み取ります。端末で行うのとまったく同じ方法でデータを指定する必要があります。例えば、入力フィールドが 2 つあるの場合、2 つ目のフィールドに配置するには、最初のフィールドの末尾を空白で満たす必要があります。キーワードデリミタモードはサポートされていません。キーワードデリミタモードを使用するには、バッチモードシミュレーションの代わりにバッチモードを使用します。

出力チャネルがファイルにリダイレクトされると、Natural は画面に表示されるすべての出力をこのファイルに書き込みます。制御シーケンスもファイルに書き込まれるため、ファイルを読み取れなくなります。フォーマット済みの出力を取得するには、バッチモードシミュレーションではなくバッチモードを使用します。

Natural の起動時にダイナミックパラメータ BATCH を使用して、システム変数 *DEVICE を値 BATCH に設定します。この値は Natural プログラムで確認できます。

例:入力チャネルのリダイレクト

natural BATCH < input-file-name

Natural は、この入力ファイルからすべての入力操作を受け取ります(この入力ファイルの例を以下に示します)。

例:入出力チャネルのリダイレクト

natural BATCH < input-file-name > output-file-name

Natural レポートのみを保持し、他のすべての出力を非表示にする場合(NULL デバイスへの出力の書き込み)、プロファイルパラメータ MAINPR を有効なプリンタ番号に設定し、パラメータファイル内の対応する論理プリンタ(デバイス)に実行可能ファイルを割り当て、次のように指定します。

natural BATCH < input-file-name > /dev/null

Natural レポートはすべて実行可能ファイルに書き込まれますが、画面出力は省略されます。入力ファイルは、Natural で入力がまったく必要ない場合でも指定する必要があります。この場合、NULL デバイスも使用できます。

サンプル入力ファイル

dlist program *^M
fin^M

バッチモードシミュレーションの入力ファイルには、対話式セッションで実行する同じキー入力が含まれている必要があります。

上記のサンプル入力ファイルでは、次のキー入力が使用されます。

d Direct Command]ウィンドウを開きます。
プログラムのリストを表示します。* すべてのプログラムのリストの表示に使用される Natural システムコマンドを実行します。
^M CTRL+M キーの組み合わせ(改行)の省略表記です。ENTER キーをシミュレートします。
FIN Natural セッションの終了に使用される Natural システムコマンドを実行します。
^M CTRL+M キーの組み合わせ(改行)の省略表記です。ENTER キーをシミュレートします。