以下に添付図面を参照して、この発明に係る変換プログラム、プログラム変換方法およびプログラム変換装置の実施例を詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
以下の実施例では、実施例1に係るプログラム変換装置の構成およびプログラム変換装置の処理、COBOL登録集として生成された各代替処理の流れを順に説明し、最後に実施例1による効果を説明する。
[プログラム変換装置の構成]
最初に、図1を用いてプログラム変換装置の構成を説明する。図1は、実施例1に係るプログラム変換装置の構成を示すブロック図である。図1に示すように、このプログラム変換装置10は、移行前資産記憶部11、データベース12、制御部13、移行後資産記憶部14を有する。以下にこれらの各部の処理を説明する。
移行前資産記憶部11は、オフコンのCOBOL(Common Business Oriented Language)プログラムをオープン系のCOBOLプログラムに移行する前の資産に関する情報を記憶しており、マージファイルデータ11aおよびCOBOLソースデータ11bを記憶する。マージファイルデータ11aは、マージファイルに関する情報であって、例えば、構成項目名、属性、キーとしている項目、マージを構成する物理ファイル名や項目などがテキスト形式で記載されているデータである。また、COBOLソースデータ11bは、COBOLプログラムのソースコードである。
データベース12は、マージ論理ファイルへのアクセスに用いられるキーに関する情報や、マージ論理ファイルが参照する物理ファイルのリンクに関する情報などを記憶する。データベース12は、マージ一覧情報記憶部12a、キー情報記憶部12b、ソース解析情報記憶部12cを有する。
マージ一覧情報記憶部12aは、マージ論理ファイルに関する情報であるマージ一覧情報を記憶する。例えば、マージ一覧情報12aは、図2に例示するように、マージ論理ファイル名である「LF名」、マージ論理ファイルへのアクセスに用いられるキーが一意であるかを示す「対応可能フラグ」、マージする物理ファイル名を示す「マージするPF名」を記憶する。図2は、マージ一覧情報の一例を示す図である。ここで、対応可能フラグの項目には、「1」または「0」のいずれかの値が設定されており、対応可能フラグが「1」であることは、アクセスに用いられるキーが一意であることを示している。一方、対応可能フラグが「0」であることは、アクセスに用いられるキーが一意でないことを示している。
図2の例を挙げて説明すると、マージ一覧情報記憶部12aは、LF名「lfm1」、対応可能フラグ「1」、マージするPF名「pfa」、「pfb」、「pfc」が対応付けて記憶されている。これは、マージ論理ファイル「lfm1」が複数の物理ファイル「pfa」、「pfb」、「pfc」をマージしており、アクセスに用いられるキーが一意であることを示している。
キー情報記憶部12bは、マージ論理ファイルへのアクセスに用いられるキーに関する情報であるキー情報を記憶する。例えば、キー情報記憶部12bは、図3に例示するように、マージされた物理ファイル名である「PF名」、マージ論理ファイルを含む全論理ファイル名である「LF名」を記憶する。また、キー情報記憶部12bは、図3に例示するように、論理ファイルへのアクセスに用いられるキーが一意であるかを示す「一意性」、キーを構成する項目名である「キーを構成する項目名」、追加されたキーの項目である「追加キーの項目名」を記憶する。図3は、キー情報の一例を示す図である。
ここで、一意性の項目には、「UNIQUE」または「DUPLICATE」のいずれかが設定されており、「UNIQUE」であることは、アクセスに用いられるキーが一意であることを示している。一方、「DUPLICATE」であることは、アクセスに用いられるキーが重複しており、一意でないことを示している。
図3の例を挙げて説明すると、キー情報記憶部12bは、PF名「pfa」、LF名「lfm1」、一意性「UNIQUE」、キーを構成する項目名「keya1」、「keya2」が対応付けて記憶されている。これは、物理ファイル「pfa」を参照する論理ファイル「lfm1」について、アクセスに用いられるキーが一意であり、キーを構成する項目名が「keya1」および「keya2」であることを示している。また、図3の例では、キー情報記憶部12bは、PF名「pfa」、LF名「lfm2」、一意性「DUPLICATE」、キーを構成する項目名「keya2」が対応付けて記憶されている。これは、物理ファイル「pfa」を参照する論理ファイル「lfm2」について、アクセスに用いられるキーが一意でなく、キーを構成する項目名が「keya2」であり、新たに追加されたキーの項目名が「keya1」であることを示している。
ソース解析情報記憶部12cは、COBOLソースの解析結果であって、論理アクセスに関する情報であるソース解析情報を記憶する。例えば、ソース解析情報記憶部12cは、図4に例示するように、プログラム名である「プログラム名」、プログラム上で定義されたアクセス対象のファイル名である「ファイル定義名」、アクセス対象の実ファイル名である「実ファイル名」を記憶する。また、ソース解析情報記憶部12cは、ファイルアクセスの態様を示す「アクセスモード」、ファイルオープンの態様を示す「オープンモード」を記憶する。
制御部13は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。また、制御部13は、ファイル解析部13a、ソース解析部13b、マージ情報作成部13c、DDL作成部13d、登録集作成部13eおよびソースプログラム変換部13fを有する。なお、制御部13には、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
ここで、制御部13の各部13a〜13fが実行する処理について説明する前に、図5および図6を用いて、マージ論理ファイルの機能を有するオフコンのCOBOL(Common Business Oriented Language)プログラムをオープン系のCOBOLプログラムに変換するマイグレーション処理について説明する。図5は、オフコンのマージ論理ファイルの機能を説明する図である。図6は、オープン環境でのマージ論理ファイルの機能を説明する図である。
図5の例では、オフコンのCOBOLプログラムは、論理ファイルLF(x)の宣言文が記述されたファイル宣言部と、OPEN、READ、REWRITE、DELETE、CLOSEなどのファイル操作文が記述されたプログラム部とを有する。図6の例では、オープン環境でのCOBOLプログラムは、論理ファイルLF(xa)、論理ファイルLF(xb)の宣言文が記述されたファイル宣言部と、マージ機能を有するOPENなどのファイル操作文が記述されたプログラム部とを有する。
図5に示すように、オフコンでは、OSがマージ機能を有しており、OSがマージ論理ファイルのアクセス制御を行っている。図5の例を挙げて説明すると、つまり、OS側で複数の物理ファイルPF(a)およびPF(b)をマージした一つのマージ論理ファイルLF(x)として扱う。このため、COBOLプログラム側でマージ論理ファイルのアクセス制御が意識されていなかった。
一方、図6に示すように、オープン環境ではOSがマージ機能を有しておらず、OSがマージ論理ファイルのアクセス制御を行うことができない。このため、COBOLプログラム側にマージ機能を持たせ、COBOLプログラム側でマージ論理ファイルに対するアクセス制御を行うようにする。そこで、プログラム変換装置10では、マージ論理ファイルへアクセスするためのマージ機能代替関数をCOBOL登録集形式で自動生成するとともに、プログラムソースのマージ論理ファイルアクセス命令をマージ機能代替関数のコール文に変換する。
また、マージ論理ファイルでは、複数の物理ファイルをマージするため、マージ論理ファイルのアクセスに用いられるキーが一意でない場合がある。オフコンでは、OSのマージ機能により、一意でないキーによるアクセスがあった場合でも所定のルールに従ってアクセス制御を行っているが、上記したように、オープン環境ではOSがマージ機能を有していない。このため、プログラム変換装置10では、アクセスに用いられるキーが一意でない場合には、キーが一意となるようにキーの項目を追加する。以下では、制御部13の各部13a〜13fが実行する処理について説明する。
ファイル解析部13aは、移行前資産記憶部11からマージファイルデータ11aを読み出し、マージファイルデータ11aを解析する。そして、ファイル解析部13aは、複数の物理ファイルがマージされたマージ論理ファイルへのアクセスに用いられるキーに関する情報と、マージ論理ファイルが参照する物理ファイルのリンクに関する情報とを抽出する。
例えば、ファイル解析部13aは、キーに関する情報として、物理ファイル名、論理ファイル名、キーの一意性、キーを構成する項目名を抽出し、データベース12のキー情報記憶部12bに記憶する。また、ファイル解析部13aは、マージ論理ファイルが参照する物理ファイルのリンクに関する情報として、マージ論理ファイルのファイル名、マージする物理ファイル名を抽出し、データベース12のマージ一覧情報記憶部12aに格納する。
ソース解析部13bは、移行前資産記憶部11からCOBOLソースデータ11bを読み出してCOBOLソースデータ11bを順に解析し、論理ファイルのアクセスに関する情報を抽出する。例えば、ソース解析部13bは、マージ論理ファイルのアクセスに関する情報として、プログラム名、ファイル定義名、実ファイル名、アクセスモード、オープンモードなどを抽出し、データベース12のソース解析情報記憶部12cに格納する。
マージ情報作成部13cは、抽出されたキーに関する情報およびリンクに関する情報を用いて、マージ論理ファイルへのアクセスに用いられるキーが一意であるか判定する。この結果、マージ情報作成部13cは、キーが一意で無い場合には、マージ論理ファイルにアクセスするための一意であるユニークキーを生成する。
例えば、マージ情報作成部13cは、マージ情報一覧情報記憶部12aからマージ論理ファイルのLF名を読み出し、読み出したLF名に対応するキー情報の「一意性」の項目に記憶された情報が「UNIQUE」であるか「DUPLICATE」であるか判定する。この結果、マージ情報作成部13cは、「一意性」の項目に記憶された情報が「UNIQUE」である場合には、キー情報が一意であるので、マージ情報一覧情報における対応可能フラグを「1」に更新する。
また、マージ情報作成部13cは、「一意性」の項目に記憶された情報が「DUPLICATE」である場合には、キー情報が一意でないので、マージ情報一覧情報における対応可能フラグを「0」に更新する。そして、マージ情報作成部13cは、キー情報が一意でない場合には、キーが一意となるように、ユニークなキーを追加する処理を行う。
マージ情報作成部13cは、キーを追加する処理として、物理ファイルに関係するキーから一意であるキーを検索し、検索されたキーのうち追加するキーが少ないものを参照して、新たにキーを追加してユニークキーを生成する。
ここで、キーを追加する処理について、図7および図8の例を用いて説明する。図7および図8は、ユニークキーの追加処理を説明する図である。図7の例では、物理ファイルである「PF」を参照する複数の論理ファイル「LF1」、「LF2」、「LF3」と、マージ論理ファイル「マージ」とが存在することを示している。このうち、論理ファイル「LF1」および「LF2」のアクセスに用いられるキーが一意である(図7では、「unique」と記載)。また、論理ファイル「LF3」およびマージ論理ファイル「マージ」のアクセスに用いられるキーが一意でない(図7では、「duplicates」と記載)。
図7に示すように、マージ情報作成部13cは、「unique」なキーを構成する項目とマージ論理ファイルのキーを構成する項目を比較する。図7の例では、「unique」な論理ファイル「LF1」のキーである「項目1」および「項目2」と、マージ論理ファイルのキー「項目1」および「項目3」とを比較する。また、「unique」な論理ファイル「LF2」のキーである「項目1」、「項目4」および「項目5」と、マージ論理ファイルのキー「項目1」および「項目3」とを比較する。
この比較の結果、マージ論理ファイルのキーが「unique」となるために、追加するキーが少ない論理ファイルを選択する。図7の例では、追加するキーが少ない論理ファイル「LF1」を選択する。つまり、論理ファイル「LF1」を選択した場合には、キーを一意にするためには、「項目2」を追加することとなり、また、論理ファイル「LF2」を選択した場合には、キーを一意にするためには、「項目4」、「項目5」を追加することとなる。この場合、論理ファイル「LF1」を選択した方が追加するキーが少ないので、論理ファイル「LF1」を選択する。
そして、マージ情報作成部13cは、図8に示すように、論理ファイル「LF1」を選択すると、ユニークなキーの構成項目に不足する項目である「項目2」をマージ論理ファイルのキーに追加する。これにより、マージ論理ファイルのアクセスに用いられるキーがユニークとなる。また、マージ情報作成部13cは、マージ論理ファイルのキーを追加した場合には、追加するキーの項目名をキー情報記憶部12bに記憶された「追加キーの項目名」に格納する。また、マージ情報作成部13cは、マージ論理ファイルのアクセスに用いられるキーがユニークになった場合には、マージ一覧情報記憶部12aに記憶されたマージ対応可能フラグを「0」から「1」に変更する。
DDL作成部13dは、マージ情報作成部13cによって生成されたユニークキーがマージ論理ファイルのキーであることを定義する、データベースにおけるデータ構造の定義スクリプトであるDDLを作成する。例えば、DDL作成部13dは、後に詳述する図12に示すように、ユニークキーがマージ論理ファイルのキーであることを定義するDDL文データを作成し、移行後資産記憶部14のDDL文データ14aに格納する。
登録集作成部13eは、マージ情報作成部13cによって生成されたユニークキーを用いて、マージ論理ファイルへアクセスするためのサブルーチンを作成する。例えば、登録集作成部13eは、後に詳述する図13に示すように、OPEN代替処理やREAD代替処理のサブルーチンを作成し、移行後資産記憶部14のCOBOL登録集データ14bに格納する。なお、登録集作成部13eは、図13では、省略したが、OPEN代替処理やREAD代替処理だけでなく、START代替処理、DELETE代替処理、REWRITE代替処理、CLOSE代替処理のサブルーチンを作成する。
ソースプログラム変換部13fは、プログラムソースのマージ論理ファイルアクセス命令を、サブルーチンのコール文に変換する。例えば、ソースプログラム変換部13fは、後に詳述する図14に示すように、COBOLプログラムソースのマージ論理ファイルアクセス命令を、登録集作成部13eによって作成されたサブルーチンのコール文に変換し、移行後資産記憶部14の変換ソースデータ14cに格納する。
ここで、図9および図10を用いて、COBOLソースの変換処理について説明する。図9は、移行前のCOBOLソースについて説明する図である。図10は、移行後のCOBOLソースについて説明する図である。図9の例では、移行前のソースプログラムとして、複数の物理ファイルPF1〜PF3をマージするマージ論理ファイル(図9では、LF(マージ)と記載)に対するCOBOLソースが存在する。図9に示すように、COBOLソースには、OPEN処理、START処理、READ処理、REWRITE処理、DELETE処理、CLOSE処理が存在する。
そして、図10に示すように、ソースプログラム変換部13fは、COBOLソースに対して変換処理を行うことで、OPEN処理をOPEN代替処理の呼び出し、START処理をSTART代替処理の呼び出しに変換する。また、ソースプログラム変換部13fは、READ処理をREAD代替処理の呼び出し、REWRITE処理をREWRITE代替処理の呼び出し、DELETE処理をDELETE代替処理の呼び出し、CLOSE処理をCLOSE代替処理の呼び出しに変換する。
そして、各代替処理は、移行後資産記憶部14のCOBOL登録集データ14bに記憶されている。なお、各代替処理では、どのレコードまでをREADしたか、または、位置付けしたかという情報を記憶するために、ユニークなキーを使用している。
ここで、図11を用いて、プログラム変換装置10によるプログラム変換処理の全体の流れを説明する。図11は、プログラム変換処理の全体の流れを説明する図である。図11に示すように、プログラム変換装置10は、マージファイルデータ11aを読み出して解析し、マージファイルに関する情報および全論理ファイルのキーに関する情報を抽出し、マージ一覧情報記憶部12aおよびキー情報記憶部12bに記憶する(ステップS1)。
そして、プログラム変換装置10は、移行前資産記憶部11から変換前のCOBOLソースデータ11bを読み出して順に解析し、論理ファイルのアクセスに関する情報を抽出してデータベース12のソース解析情報記憶部12cに格納する(ステップS2)。続いて、プログラム変換装置10は、マージ一覧情報記憶部12aおよびキー情報記憶部12bからマージファイルに関する情報および全論理ファイルのキーに関する情報を読み出し、マージ論理ファイルへのアクセスに用いられるキーが一意であるか判定する。そして、マージ論理ファイルへのアクセスに用いられるキーが一意で無い場合には、ユニークキーを作成する(ステップS3)。
そして、プログラム変換装置10は、マージ一覧情報記憶部12aおよびキー情報記憶部12bから情報を読み出し、ユニークキーがマージ論理ファイルのキーであることを定義するDDLを作成する(ステップS4)。続いて、プログラム変換装置10は、マージ一覧情報記憶部12a、キー情報記憶部12b、およびソース解析情報記憶部12cから情報を読み出し、ユニークキーを用いて、マージ論理ファイルへアクセスするためのCOBOL登録集を作成する(ステップS5)。その後、プログラム変換装置10は、マージ一覧情報記憶部12a、キー情報記憶部12b、およびソース解析情報記憶部12cから情報を読み出し、プログラムソースのマージ論理ファイルアクセス命令を、サブルーチンのコール文に変換する(ステップS6)。
移行後資産記憶部14は、オフコンのCOBOL(Common Business Oriented Language)プログラムをオープン系のCOBOLプログラムに移行した後の資産に関する情報を記憶している。また、移行後資産記憶部14は、DDL文データ14a、COBOL登録集データ14b、変換ソースデータ14cを記憶する。
DDL文データ14aは、ユニークキーがマージ論理ファイルのキーであることを定義するスクリプトであるDDLを記憶する。例えば、DDL文データ14aには、図12に例示するように、各論理ファイル「pfa」、「pfb」、「pfc」、「pfd」、「pfe」を作成するためのDDLが存在する。
「pfa用DDL」には、マージファイルを作成するためのDDLとして、「CREATE UNIQUE INDEX IX_LFM1・・」および「CREATE UNIQUE INDEX IX_LFM2・・」が記述されている。また、「pfa用DDL」には、論理ファイル「pfa」のアクセスに用いられるユニークなキーである「keya1」および「keya2」が定義されている。図12は、DDL文データの一例を示す図である。なお、図12の例では、キー部分のみを抜粋している。
COBOL登録集データ14bは、ユニークキーを用いてマージ論理ファイルへアクセスするためのサブルーチンである。例えば、COBOL登録集データ14bは、各マージ論理ファイルをまとめて一つのマージファイルと見なせるような動作をするマージ機能代替関数がCOBOL登録集形式で移行後資産記憶部14に記憶されている。
図13に例示するように、COBOL登録集データ14bは、各マージ論理ファイル「LFM1」、「LFM2」のCOBOLソースであって、各マージ論理ファイルの操作に関するOPENやREADなどのアクセス機能ごとに記述されたCOBOLソースとして移行後資産記憶部14に記憶されている。
変換ソースデータ14cは、ソースプログラム変換部13fによって変換されたソースプログラムを記憶する。例えば、変換ソースデータ14cでは、図14に例示するように、プログラムソースのマージ論理ファイルアクセス命令が、サブルーチンのコール文に変換されたソースプログラムである。図14の例を用いて説明すると、プログラム部におけるマージ論理ファイルアクセス命令「OPEN FIL01」がCOBOL登録集データ14bに記述された代替処理を実行させる「PERFORM MLF_LFM1_OPEN」に変換されている。
[プログラム変換装置による処理]
次に、図15を用いて、実施例1に係るプログラム変換装置10による処理を説明する。図15は、実施例1に係るプログラム変換装置10の処理動作を示すフローチャートである。
図15に示すように、プログラム変換装置10は、プログラム変換処理開始指示を受け付けると(ステップS101肯定)、移行前資産記憶部11からマージファイルデータ11aを読み出して解析し、マージファイルに関する情報を抽出する(ステップS102)。そして、プログラム変換装置10は、マージファイルデータ11aから全論理ファイルのキーに関する情報を抽出する(ステップS103)。
そして、プログラム変換装置10は、移行前資産記憶部11から変換前のCOBOLソースデータ11bを読み出して順に解析し、論理ファイルのアクセスに関する情報を抽出する(ステップS104)。続いて、プログラム変換装置10は、マージ対応が可能であるか判定する(ステップS105)。すなわち、プログラム変換装置10は、マージ論理ファイルへのアクセスに用いられるキーが一意であるか判定する。この結果、プログラム変換装置10は、マージ対応が可能であると判定した場合には(ステップS105肯定)、ステップS107に進む。
また、プログラム変換装置10は、マージ対応が可能でないと判定した場合には(ステップS105否定)、ユニークとなるようにキーを追加する(ステップS106)。そして、プログラム変換装置10は、ユニークキーがマージ論理ファイルのキーであることを定義するDDLを作成する(ステップS107)。続いて、プログラム変換装置10は、ユニークキーを用いて、マージ論理ファイルへアクセスするためのCOBOL登録集を作成する(ステップS108)。その後、プログラム変換装置10は、COBOLソースのマージ論理ファイルアクセス命令を、サブルーチンのコール文に変換する(ステップS109)。
[COBOL登録集として生成された代替処理]
次に、図16〜図24を用いて、COBOL登録集として生成された各代替処理の流れを説明する。図16は、COBOL登録集として生成されたOPEN代替処理の処理動作を示すフローチャートである。図17は、COBOL登録集として生成されたCLOSE代替処理の処理動作を示すフローチャートである。図18は、COBOL登録集として生成されたSTART代替処理の処理動作を示すフローチャートである。図19は、COBOL登録集として生成された順READ代替処理の処理動作を示すフローチャートである。図20は、COBOL登録集として生成された乱READ代替処理の処理動作を示すフローチャートである。図21は、COBOL登録集として生成された順DELETE代替処理の処理動作を示すフローチャートである。図22は、COBOL登録集として生成された乱DELETE代替処理の処理動作を示すフローチャートである。図23は、COBOL登録集として生成された順REWRITE代替処理の処理動作を示すフローチャートである。図24は、COBOL登録集として生成された乱REWRITE代替処理の処理動作を示すフローチャートである。
まず、図16を用いて、COBOL登録集として生成されたOPEN代替処理について説明する。図16に示すように、全ファイルにOPEN処理の対処をしたか判定し(ステップS201)、全ファイルに対処した場合には(ステップS201肯定)、処理を終了する。また、全ファイルに対処してない場合には(ステップS201否定)、OPEN処理を実行し(ステップS202)、OPEN処理が成功したか判定する(ステップS203)。この結果、OPENが成功した場合には(ステップS203肯定)、ステップS201に戻り、OPENが成功しなかった場合には(ステップS203否定)、処理を終了する。
次に、図17を用いて、COBOL登録集として生成されたCLOSE代替処理について説明する。図17に示すように、全ファイルにCLOSE処理の対処をしたか判定し(ステップS301)、全ファイルにCLOSE処理の対処をした場合には(ステップS301肯定)、処理を終了する。また、全ファイルにCLOSE処理の対処をしてない場合には(ステップS301否定)、CLOSE処理を実行して(ステップS302)、ステップS301に戻る。
次に、図18を用いて、COBOL登録集として生成されたSTART代替処理について説明する。図18に示すように、START代替処理では、全ファイルにSTART処理の対処をしたか判定する(ステップS401)。この結果、全ファイルにSTART処理の対処をした場合には(ステップS401肯定)、ファイルSTATUSの設定処理を行う(ステップS408)。また、START代替処理では、全ファイルにSTART処理の対処をしていない場合には(ステップS401否定)、キーの設定処理および追加キーの設定処理を行う(ステップS402)。そして、START代替処理では、START処理の開始位置が「=」のスタートであるか判定する(ステップS403)。すなわち、例えば、START処理の開始位置(例えば、300番目)が指定されているか判定する。
この結果、START代替処理では、「=」のスタートでない場合には(ステップS403否定)、START処理を実行する(ステップS404)。また、START代替処理では、「=」のスタートである場合には(ステップS403肯定)、追加キーのあるSTARTであるか判定する(ステップS405)。この結果、追加キーのあるSTARTでない場合には(ステップS405否定)、開始位置が「=」のSTART処理を実行する(ステップS406)。また、追加キーのあるSTARTである場合には(ステップS405肯定)、開始位置が「>=」のSTART処理を実行する(ステップS407)。つまり、例えばSTART処理の開始位置として300番目が設定されている場合には、300番目以上であって最も300番目に近いデータをSTART処理の開始位置とする。
次に、図19を用いて、COBOL登録集として生成された順READ代替処理について説明する。図19に示すように、順READ代替処理では、全ファイルに順READ処理の対処をしたか判定する(ステップS501)。この結果、全ファイルに順READ処理の対処をしていない場合には(ステップS501否定)、READ NEXTを実行し(ステップS503)、ステップS501に戻る。また、全ファイルに順READ処理の対処をした場合には(ステップS501肯定)、通知するレコードを決定する(ステップS502)。
そして、順READ代替処理では、通知したファイル以外対処したか判定し(ステップS504)、通知したファイル以外対処した場合には(ステップS504肯定)、FILE STATUSを設定する(ステップS507)。また、通知したファイル以外対処していない場合には(ステップS504否定)、READした値をキーに設定し(ステップS505)、開始位置が「>=」のSTART処理を実行し(ステップS506)、ステップS504に戻る。
次に、図20を用いて、COBOL登録集として生成された乱READ代替処理について説明する。図20に示すように、全ファイルに乱READ処理の対処をしたかを判定する(ステップS601)。この結果、全ファイルに乱READ処理の対処をした場合には(ステップS601肯定)、FILE STATUSに「23」を設定する(ステップS612)。ここで、FILE STATUSの「23」とは、データなしであったことを示す。
また、全ファイルに乱READ処理の対処をしていない場合には(ステップS601否定)、キーの設定処理を行い、追加キーがあれば追加キーの設定処理を行う(ステップS602)。そして、追加キーのあるファイルであるか判定し(ステップS603)、追加キーのあるファイルである場合には(ステップS603肯定)、開始位置が「>=」のSTART処理を実行し(ステップS604)、データがないか判定する(ステップS605)。この結果、乱READ処理では、データがない場合には(ステップS605肯定)、ステップS601に戻る。また、乱READ処理では、データがある場合には(ステップS605否定)、READ NEXTを実行し(ステップS606)、キーが一致するか判定する(ステップS607)。
この結果、乱READ処理では、キーが一致しないと判定した場合には(ステップS607否定)、ステップS601に戻る。また、乱READ処理では、キーが一致すると判定した場合には(ステップS607肯定)、通知するレコードを作成し(ステップS610)、FILE STATUSを設定して(ステップS611)、処理を終了する。
一方、ステップS603の説明に戻って、追加キーのあるファイルでない場合には(ステップS603否定)、乱READを実行し(ステップS608)、データがないか判定する(ステップS609)。この結果、乱READ処理では、データがある場合には(ステップS609否定)、ステップS601に戻る。また、乱READ処理では、データがない場合には(ステップS609肯定)、通知するレコードを作成し(ステップS610)、FILE STATUSを設定して(ステップS611)、処理を終了する。
次に、図21を用いて、COBOL登録集として生成された順DELETE代替処理について説明する。図21に示すように、直前にREADしたか判定し(ステップS701)、直前にREADしていない場合には(ステップS701否定)、FILE STATUSに「43」を設定する(ステップS702)。ここで、FILE STATUSの「43」とは、DELETEまたはREWRITE文の実行前に、ファイルに対して実行された最後のI/O文が、READ文でなかったことを示す。
また、順DELETE処理では、直前にREADした場合には(ステップS701肯定)、DELETE処理を実行し(ステップS703)、FILE STATUSを設定する(ステップS704)。
次に、図22に示すように、COBOL登録集として生成された乱DELETE代替処理について説明する。図22に示すように、全ファイルに乱DELETE処理の対処をしたかを判定する(ステップS801)。この結果、全ファイルに乱DELETE処理の対処をした場合には(ステップS801肯定)、FILE STATUSに「23」を設定する(ステップS812)。ここで、FILE STATUSの「23」とは、データなしであったことを示す。
また、全ファイルに乱DELETE処理の対処をしていない場合には(ステップS801否定)、キーの設定処理を行い、追加キーがあれば追加キーの設定処理を行う(ステップS802)。そして、乱DELETE処理では、追加キーのあるファイルであるか判定する(ステップS803)。この結果、追加キーのあるファイルである場合には(ステップS803肯定)、開始位置が「>=」のSTART処理の実行でFILE STATUSが「00」であるか判定する(ステップS804)。ここで、FILE STATUSの「00」とは、正常終了であることを示す。
この結果、FILE STATUSが「00」でない場合には(ステップS804否定)、ステップS801に戻る。また、FILE STATUSが「00」である場合には(ステップS804肯定)、READ NEXTを実行し(ステップS805)、READが成功か判定する(ステップS806)。この結果、READが成功でなかった場合には(ステップS806否定)、ステップS801に戻る。また、READが成功した場合には(ステップS806肯定)、キーが乱DELETEのキーと一致するか判定する(ステップS807)。
この結果、乱DELETE処理では、キーが一致しないと判定した場合には(ステップS807否定)、ステップS801に戻る。また、乱DELETE処理では、キーが一致すると判定した場合には(ステップS807肯定)、DELETEを実行し(ステップS810)、FILE STATUSを設定して(ステップS811)、処理を終了する。
一方、ステップS803の説明に戻って、追加キーのあるファイルでない場合には(ステップS803否定)、乱DELETEを実行し(ステップS808)、READ成功か判定する(ステップS809)。この結果、乱READ処理では、READ成功である場合には(ステップS809否定)、ステップS801に戻る。また、乱DELETE処理では、READ成功である場合には(ステップS809肯定)、DELETEを実行し(ステップS810)、FILE STATUSを設定して(ステップS811)、処理を終了する。
次に、図23を用いて、COBOL登録集として生成された順REWRITE代替処理について説明する。図23に示すように、順REWRITE処理では、直前にREADしたか判定し(ステップS901)、直前にREAD処理をしていない場合には(ステップS901否定)、FILE STATUSに「43」を設定する(ステップS908)。また、直前にREAD処理をした場合には(ステップS901肯定)、追加キーがあるか判定する(ステップS902)。この結果、追加キーがない場合には(ステップS902否定)、REWRITEを実行し(ステップS906)、FILE STATUSを設定する(ステップS907)。
また、S902において、追加キーがある場合には(ステップS902肯定)、追加キーが変更されていないか判定する(ステップS903)。この結果、追加キーが変更されていない場合には(ステップS903肯定)、REWRITEを実行し(ステップS906)、FILE STATUSを設定する(ステップS907)。また、追加キーが変更されている場合には(ステップS903否定)、DELETE処理を実行し(ステップS904)、WRITE処理を実行し(ステップS905)、FILE STATUSを設定する(ステップS907)。
次に、図24を用いて、COBOL登録集として生成された乱REWRITE代替処理について説明する。図24に示すように、乱REWRITE処理では、全ファイルの乱REWRITE処理の対処をしたか判定する(ステップS1001)。この結果、全ファイルの乱REWRITE処理の対処をした場合には(ステップS1001肯定)、FILE STATUSを「43」に設定する(ステップS1011)。
また、全ファイルの乱REWRITE処理の対処をしていない場合には(ステップS1001否定)、キーの設定処理を行い、追加キーがあれば追加キーの設定処理を行う(ステップS1002)。そして、乱READ処理の実行でFILESTATUSが「00」であるか判定する(ステップS1003)。この結果、FILE STATUSが「00」である場合には(ステップS1003肯定)、REWRITE処理を実行し(ステップS1010)、FILE STATUSを設定して(ステップS1009)、処理を終了する。
また、乱REWRITE処理では、FILE STATUSが「00」でない場合には(ステップS1003否定)、追加キーがあるか判定する(ステップS1004)。この結果、乱REWRITE処理では、追加キーがない場合には(ステップS1004否定)、ステップS1001に戻る。また、追加キーがある場合には(ステップS1004肯定)、開始位置が「>=」のSTART処理の実行でFILE STATUSが「00」であるか判定する(ステップS1005)。この結果、FILE STATUSが「00」でない場合には(ステップS1005否定)、ステップS1001に戻る。
また、FILE STATUSが「00」である場合には(ステップS1005肯定)、READ NEXTしたレコードとキーが一致するか判定する(ステップS1006)。この結果、READ NEXTしたレコードとキーが一致しない場合には(ステップS1006否定)、ステップS1001に戻る。また、READ NEXTしたレコードとキーが一致した場合には(ステップS1006肯定)、DELETE処理を実行する(ステップS1007)。その後、乱REWRITE処理では、WRITE処理を実行し(ステップS1008)、FILE STATUSを設定して(ステップS1009)、処理を終了する。
[実施例1の効果]
上述してきたように、プログラム変換装置10は、複数の物理ファイルがマージされたマージ論理ファイルへのアクセスに用いられるキーに関する情報およびマージ論理ファイルが参照する物理ファイルのリンクに関する情報を抽出する。そして、抽出されたキーに関する情報およびリンクに関する情報を用いて、マージ論理ファイルへのアクセスに用いられるキーが一意であるか判定し、キーが一意で無い場合には、マージ論理ファイルにアクセスするための一意であるユニークキーを生成する。そして、生成されたユニークキーがマージ論理ファイルのキーであることを定義するスクリプトを作成する。そして、生成されたユニークキーを用いて、マージ論理ファイルへアクセスするためのサブルーチンを作成する。そして、プログラムソースのマージ論理ファイルアクセス命令を、サブルーチンのコール文に変換する。このため、ホスト系COBOLソースをオープン系COBOLソースに自動変換する際に、マージ論理ファイルの機能を有するオープン系COBOLソースへ容易に変換することが可能である。
また、プログラム変換装置10は、マージ論理ファイルにマージされる物理ファイルにアクセスするキーが一意であるか判定し、キーが一意で無い場合には、物理ファイルに関係するキーから一意であるキーを検索する。そして、プログラム変換装置10は、検索されたキーのうち追加するキーが少ないものを参照して、ユニークキーを生成する。このため、追加するキーを少なくしつつ、アクセスに用いられるキーを一意にすることが可能である。
また、プログラム変換装置10は、サブルーチンとして、オープン処理、スタート処理、デリート処理、リード処理、スタート処理およびオープン処理に関するサブルーチンを作成する。このため、プログラム変換装置10は、マージ論理ファイルの機能を有するオープン系COBOLソースへ容易に変換することが可能である。