テンプレートを使用する理由
通常、アプリケーション・データが入っているデータ・セットの構造は十分に定義されていて、データ・セット中の各レコードはいくつかのフィールドから構成されています。それぞれのフィールドには、個人名、製品コード、金額など (アプリケーションによって異なる) の別個のデータ項目が入っています。このデータは、さまざまなタイプのものがあり、一部のフィールドには文字データが入り、他のフィールドには数値データ (ストレージ・スペースを節約するためにバイナリー形式でエンコードされている可能性がある) が入るといったようになります。
このようなデータ・セットを効率的に処理するには、レコード構造を認識し、個々のフィールドを選択して処理できるツールが必要です。
例えば、テキスト・エディター (ISPF エディターなど) を使用してアプリケーション・データ・セットを表示すると、各レコードは文字ストリングとして表示されて、レコードが個々のフィールドから構成されていることは示されません。2 進数またはパック 10 進数形式でエンコードされた数値データの入ったフィールド は、数値でなく文字値 (通常は「表示不能文字」) で表されます。
- 特定のフィールドのデータを検索して置き換えたい場合には、フィールドの長さを変えないように注意する必要があります。そうしないと、以後のフィールドの境界が移動して、レコード構造を壊す可能性があります。
- データが 2 進数やパック 10 進数でエンコードされている数値フィールドのデータを探して置き換えたい場合には、数値でなくその形式 (通常は 16 進値) で検索値や置き換え値を指定する必要があります。
- 編集しようとしているファイルにいくつかのレコード・タイプが (それぞれ独自の構造で) 入っていて、1 つのレコード・タイプのデータだけを検索し置き換えたい場合には、編集作業から他のレコード・タイプを除外する必要があります。
説明のために、ここでは、ISPF エディターに表示された英数字フィールドと数値フィールドが混在するレコードがあるとします。
EDIT USERID.FMDATA(DATA2) - 00.02 Columns 00001 00072
000013 01Grant Smith Í
000014 01Andrew Apple 5 Ì&
000015 01Graham Prestcott õ ç
「Grant Smith」レコードには、数値 “94” が含まれ、2 進数値フィールドに 保管されています。この数値を、テンプレートを使用しないで 94 から 48 に変更するには、以下を行う必要があります。
- レコード・データの 16 進値を表示します。
- フィールドが占めている桁位置を判別します。
- 数値の 48 を 16 進値の等価値 (X'30') に変換します。
- 数値フィールドの古い 16 進値 (X'5E') に新しい値を上書きするか、あるいは CHANGE コマンドを使用して新旧の 16 進値を入れ替えます。
以下に、テンプレートを使用して File Manager エディターに表示された同じレコードを示します。
REC-TYPE NAME EMPLOYEE-NO AGE SALARY MONTH(1) MONTH(2)
#2 #3 #4 #5 #6 #7 #7
AN 1:2 AN 3:20 BI 23:2 BI 25:2 PD 27:4 BI 31:4 BI 35:4
<> <---+----1----+----> <---+-> <---+-> <---+--> <---+---> <---+--->
01 Grant Smith 7712 94 75000 6 15
2 進数値フィールド AGE の数値を 94 から 48 に変更するため には、94 に 48 を単に上書きするか、あるいは以下のコマンドを入力する だけです (ここで、#5 は AGE フィールドの「フィールド参照」です)。
CHANGE 94 48 #5
このほかに、データをコピーするときにも、テンプレートを使用できます。レコード構造を認識しないコピー・ユーティリティーを使用する場合、データ・セット全体のコピーまたは複数のレコードのコピーしか実行できないことがよくあります。特定のフィールド値のレコードだけ、または特定のフィールドだけをコピーしたい場合には、カスタム・プログラムを書く必要があります。
File Manager でテンプレートを使用するときには、コピーしたいレコードだけを選択し、必要なフィールドをそのレコードのフィールド・リストから選択するための基準を指定することができます。