(58)【調査した分野】(Int.Cl.,DB名)
請求項1から7のいずれか1項記載の圧縮データ処理プログラムを用いて前記レコードファイルを編集する処理を前記コンピュータに実行させる圧縮データ編集プログラムであって、
前記圧縮データ編集プログラムは、前記コンピュータに、
前記圧縮データ処理プログラムを用いて前記レコードファイルを読み出して前記コンピュータが備えるディスプレイ上に画面表示するステップ、
前記圧縮データ処理プログラムを用いて前記レコードファイルに対して前記レコードを書き込むステップ、
を実行させることを特徴とする圧縮データ編集プログラム。
前記圧縮データ編集プログラムは、前記コンピュータに、前記レコードファイルの文字コードを、前記メインフレームが用いる文字コードから前記コンピュータが用いる文字コードに変換させる
ことを特徴とする請求項8記載の圧縮データ編集プログラム。
【発明を実施するための形態】
【0011】
<実施の形態1>
図1は、本発明の実施形態1に係る圧縮データ処理プログラムを実行するコンピュータ100およびその周辺構成を示す図である。コンピュータ100は、メインフレーム200が圧縮した圧縮レコードファイル141をメインフレーム200から受け取り、記憶部140に格納する。
【0012】
コンピュータ100はCPU(Central Processing Unit)110を備え、CPU110はアプリケーション120と圧縮データ処理プログラム130を実行する。これらの詳細については後述する。以下では便宜上、各プログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのはCPU110であることを付言しておく。メモリ150は、CPU110が一時的に使用するデータを格納する記憶装置である。
【0013】
図2は、圧縮レコードファイル141のフォーマットを例示する図である。比較のため
図2(a)に圧縮前のレコードファイルのフォーマットを示す。
図2(b)は
図2(a)に示すレコードファイルを圧縮した後のフォーマットを示す。ここでは3つのフィールドを有する固定長38バイトの7レコードを例示した。
【0014】
図2(b)1行目は圧縮レコードファイルであることを示すヘッダ部分である。
図2(b)各レコードの先頭部分[LLZZ]は、各レコードが圧縮されていることを示す。以下その他の部分について説明する。
【0015】
図2(a)に示す圧縮前のレコードファイルにおいて、各レコード内のNo.フィールドは数字0およびスペース符号「 」が繰り返し用いられている。メインフレーム200は、この繰り返し部分を[繰○]で表される繰返符号に置き換えることにより、当該繰り返し部分を圧縮する。○は繰り返すバイト数を表す数値である。
【0016】
図2(b)3行目に記載している[繰6]は、その直後に記載されている数値「0」を6回繰り返すことを示している。同様に
図2(b)の2行目に記載している[繰16]は、その直後に記載されているスペース「 」を16回繰り返すことを示している。
【0017】
図2(b)に示す符号[直○]は、上記繰返符号および以下に説明する代替符号によって圧縮しないユニークバイト列を表す符号である。例えば
図2(b)8行目に記載している[直4]は、その直後に4バイト分の当該レコード固有のバイト列「3302」が記載されていることを示す。メインフレーム200は、各レコード固有のバイト列については同符号を用いて圧縮せずに記述する。
【0018】
図2(a)に示す圧縮前のレコードファイルにおいて、文字列「江草」「新」「郎」「技野」「19871001」「01」「20020101」「20100401」は、それぞれ直前の先行レコードと同一である。メインフレーム200は、この同一部分を[同○]で表される代替符号に置き換えることにより、当該同一部分を圧縮する。○は先行レコードと同一であるバイト数を表す数値である。
【0019】
図2(b)2行目において、[直3]によって3バイト分の文字列が指定され、その後に[繰7]によって7個のスペースが指定されている。したがって、2つ目のフィールド「Name」の前までに、10バイト分の文字列が存在することになる。
【0020】
図2(b)3行目において、[繰6]によって6個の数値「0」が指定され、さらに[直1]によって1バイト分の文字列「1」が指定されている。Nameフィールドの前までには10バイト分の文字列が存在するので、文字列「1」の後には3個のスペースが配置されることになるが、この部分のバイト列は直前の先行レコードと同じである。したがって、[同3]により、先行レコードの対応位置から開始して3バイト分は同じバイト列であることを示している。
【0021】
同様に
図2(b)4行目において、文字列「花子」の後は先行レコードと同じであるため、[同18]によって当該レコードの残り18バイトが先行レコードと同じであることを示している。
【0022】
次に、コンピュータ100において圧縮レコードファイル141を読み書きする処理について説明する。アプリケーション120の開発者は、アプリケーション120内の処理において圧縮レコードファイル141を圧縮したまま読み書きする場合、アプリケーション120の内部で圧縮データ処理プログラム130を呼び出す処理を記述する。
【0023】
図3は、アプリケーション120をCOBOL言語によって記述した場合におけるサンプルコードの抜粋を示す図である。比較のため
図3(a)において、圧縮データ処理プログラム130を使用しない従来のコード例を示した。
図3(b)は圧縮データ処理プログラム130を使用する場合におけるコード例を示す。
【0024】
図3(b)の先頭部分において、圧縮レコードファイル141の属性を定義する。例えばレコード長、繰返符号[繰○]を使用するか否かの指定(横圧縮指定)、代替符号[同○]を使用するか否かの指定(縦圧縮指定)、レコード編成方式などを指定する。レコード編成方式としては、固定データ長(F)、可変データ長(V)、テキストデータ(T)から選択することができるが、ここでは
図2で説明した固定データ長(F)を指定したものと仮定する。
【0025】
圧縮データ処理プログラム130は、COBOL言語から呼び出すことができるモジュールとして実装されている。圧縮データ処理プログラム130は、COBOL言語におけるファイルOPEN、ファイルREAD、ファイルWRITE、ファイルCLOSEそれぞれのファイル命令に対応するモジュールを提供しており、各命令に対応するモジュールを呼び出すことにより、各命令に相当する処理を圧縮データ処理プログラム130に実行させることができる。圧縮データ処理プログラム130が圧縮レコードファイル141に対してアクセスする手順は、例えばシーケンシャルアクセスでもよいしランダムアクセスでもよい。
【0026】
圧縮データ処理プログラム130は、指定されたレコード長にしたがって、圧縮レコードファイル141をレコード単位で読み込む。
図2に示した例においては、
図2(b)の各行に記載されているレコードを1つずつ読み込む。ただし必ずしも全レコードを一括して読み込む必要はなく、アプリケーション120内において読み込むよう指定されているレコードのみを読み込めばよい。
【0027】
アプリケーション120が、圧縮レコードファイル141内のレコードを読み込む処理を記述している場合(READ命令が記述されている場合)は、圧縮データ処理プログラム130は、圧縮レコードファイル141の各レコードを読み込み、
図2において説明した規則にしたがって各レコードを解釈し、その結果をコンピュータ100が備えているメモリ150に格納する。例えば圧縮レコードファイル141内において代替符号が指定され、先行レコードを未だ読み込んでいない場合などは、必要に応じて先行レコードを読み込むようにしてもよい。アプリケーション120は、メモリ150に格納されているレコードを読み取ることにより、圧縮前のレコードを取得することができる。
【0028】
アプリケーション120が、圧縮レコードファイル141内のレコードを更新する処理を記述している場合(WRITE命令が記述されている場合)は、圧縮データ処理プログラム130は当該レコードを上記手順にしたがって読み取ったうえでメモリ150に格納し、メモリ150上でアプリケーション120からの指示にしたがって当該レコードを更新する。圧縮データ処理プログラム130は、メモリ150上で更新されたレコードを
図2で説明した規則にしたがって圧縮する。圧縮データ処理プログラム130は、遅くともアプリケーション120が圧縮レコードファイル141を閉じる前(CLOSE命令を発行する前)に、メモリ150上で更新および圧縮されたレコードを圧縮レコードファイル141に対して書き込む。
【0029】
なお、アプリケーション120の先頭部分において、縦圧縮指定、横圧縮指定、またはこれら双方が指定されていない場合は、圧縮データ処理プログラム130は各指定にしたがって、代替符号、繰返符号、またはこれら双方を使用せずに圧縮レコードファイル141を読み書きする。したがってアプリケーション120および圧縮データ処理プログラム130は、
図2で説明した規則にしたがって圧縮されていない通常のレコードファイルを取り扱うこともできる。
【0030】
図4は、アプリケーション120をC言語によって記述した場合におけるサンプルコードの抜粋を示す図である。アプリケーション120をC言語によって記述する場合、圧縮データ処理プログラム130はC言語の関数としてその機能を提供する。具体的には、アプリケーション120をコンパイル・リンクするときにアプリケーション120へ組み込むリンクライブラリなどの形態で、圧縮データ処理プログラム130の機能を提供することができる。
【0031】
COBOL言語、C言語いずれの場合においても、概ね同様のAPI(Application Program Interface)によって、圧縮データ処理プログラム130の機能を呼び出すことができるように構成されている。
【0032】
上記例においては圧縮レコードファイル141が固定長レコードによって構成されていることを説明したが、可変長レコードである場合は、例えば各レコードの先頭においてレコード長を示すヘッダを付与しておくとよい。これにより圧縮データ処理プログラム130は、圧縮レコードファイル141を上記と同様にレコード単位で読み書きすることができる。圧縮レコードファイル141がテキストファイルである場合は、例えば1行を1レコードとみなすことにより、可変長レコードファイルと同様に処理することができる。この場合は、改行コードをレコード区切りとして自動的に指定するようにすればよい。
【0033】
上記例においては圧縮レコードファイル141が文字列によって記述されているデータ例を説明したが、バイナリ列によって記述されている場合であっても、
図2と同様の処理規則を適用することができる。ただしバイナリ列内に[同○][繰○]のような文字列が突然登場すると違和感が生じる可能性もあるので、その場合はこれら文字列による符号に代えてバイト列によって表した代替符号と繰返符号を用いることもできる。圧縮レコードファイル141が文字列によって記述されている場合においても同様である。
【0034】
<実施の形態1:まとめ>
以上のように、本実施形態1に係る圧縮データ処理プログラム130は、圧縮レコードファイル141をレコード単位で読み込み、代替符号または繰返符号によって圧縮されている部分についてはその符号にしたがって圧縮部分を解釈した上でメモリ150にその結果を格納する。アプリケーション120は、メモリ150上に格納されている伸長後のデータを読み込みまたは更新し、圧縮データ処理プログラム130は更新後のデータを圧縮レコードファイル141に対して書き込む。これによりアプリケーション120は、圧縮レコードファイル141を圧縮したままで読み書きすることができる。
【0035】
<実施の形態2>
実施形態1〜2においては、メインフレーム200が作成した圧縮レコードファイル141をコンピュータ100上で読み書きすることを説明した。メインフレーム200とコンピュータ100が同一の文字コードを用いている場合は特段の処理は必要ないが、例えばメインフレーム200がEBCDICコードを使用し、コンピュータ100がそれ以外の文字コード(例えばASCII、SJIS、EUCなど)を使用している場合、文字コードを変換する必要がある。そこで本発明の実施形態2では、メインフレーム200とコンピュータ100の間で文字コードを変換する動作例について説明する。
【0036】
本実施形態2において、圧縮データ処理プログラム130は、圧縮レコードファイル141を読み込んだ後、メインフレーム200上で使用されている文字コードをコンピュータ100上で使用されている文字コードに変換した上で、メモリ150に格納する。これにより、コンピュータ100上で更新された圧縮レコードファイル141は、コンピュータ100上で使用される文字コードを用いて記述されることになる。
【0037】
図5は、アプリケーション120内において記述することができる、圧縮レコードファイル141のフィールド定義を例示する図である。1バイト文字と2バイト文字が混在しているレコードに対して文字コード変換を実施するためには、レコード内の各フィールドの区切りを明確に定義することが望ましい。そこでアプリケーション120の開発者は、
図5(a)に例示するようなフィールド定義をアプリケーション120内に記述し、圧縮データ処理プログラム130を呼び出す際にそのフィールド定義を引き渡してその定義にしたがって文字コード変換を実施させることができる。
【0038】
図5(a)の1行目は、フィールド「ID−NO」が各レコードの1バイト目から開始し、フィールド長7バイトのASCII文字列であることを示している。
図5(a)の3行目は、フィールド「NAME−K」が各レコードの11バイト目から開始し、フィールド長20バイトの漢字文字列であることを示している。
【0039】
図5(b)は、同一のレコードファイル内で複数のフィールド定義を用いる場合において、所定のバイト列が見つかった時点でフィールド定義を切り替えるためのコード例を示している。同図に示すコード例を用いると、16進数のバイト列「D5774B40404040」が出現した時点において、フィールド定義を{}内のものに切り替える。すなわち以後のレコードは、各レコードの1バイト目から開始し、フィールド長250バイトのASCII文字列であるフィールド「HDR−REC」として処理される。
【0040】
<実施の形態2:まとめ>
以上のように、本実施形態2に係る圧縮データ処理プログラム130は、アプリケーション120が指定するフィールド定義にしたがって、圧縮レコードファイル141内の各レコードの各フィールドを識別し、各フィールドに対して文字コード変換を実施する。これにより、メインフレーム200とコンピュータ100が異なる文字コードを用いる場合においても、コンピュータ100のユーザが圧縮レコードファイル141内の各レコードを容易に視認することができる。
【0041】
<実施の形態3>
実施形態1〜2においては、代替符号と繰返符号を用いてレコードファイルを圧縮することを説明した。この手法は、データ圧縮においては有効であるが、各レコード固有の部分は圧縮されず元のバイト列がそのまま残っているため、例えばテキストエディタなどを用いて圧縮レコードファイル141を閲覧すると、その主要部分については閲覧できてしまう可能性がある。
【0042】
そこで圧縮データ処理プログラム130は、メモリ150上に格納している各レコードを圧縮レコードファイル141に対して書き込む際に、各レコードを適当な暗号化手法によって暗号化することもできる。これにより圧縮されていない部分も容易に閲覧することはできなくなるので、セキュリティの観点から望ましい。
【0043】
さらに、
図2で説明した例においては先行レコードと同一の部分および繰り返し部分をそれぞれ代替符号と繰返符号によって置き換えることにより圧縮することを説明した。しかし、多バイト文字コードを用いて記述された同じ文字が連続している場合は、1バイト単位で連続性を判定すると、同じ文字として認識されない場合がある。例えばSJISコードにおける2バイトスペース文字は文字コード「0x8140」で表されるが、仮にこの2バイトスペース文字が複数連続していたとしても、1バイト単位で文字の連続性を判定すると、同じ文字の繰り返しとみなされない。
【0044】
そこで圧縮データ処理プログラム130は、多バイト文字コードを用いて記述されている部分については、文字単位で連続性を判定し、連続している部分については実施形態1で説明した繰返符号を用いて圧縮する。これにより、1バイト単位で連続性を判定すると連続しているとみなされない文字列についても、実施形態1と同様の規則にしたがって圧縮することができる。
【0045】
上記多バイト文字列の圧縮手順は、文字コードを変換することによってバイト単位の連続性が消失する場合において特に有効である。例えばメインフレーム200においてよく用いられているEBCDICコードにおいては、2バイトスペース文字は文字コード「0x4040」「0xA1A1」などを用いて表されることが多いため、1バイト単位で連続性を判定しても連続文字列としてみなされる。しかしこれを文字コード変換してSJISコードに置き換えると上述のように「0x8140」となり、1バイト単位で連続性を判定すると連続文字列とはみなされない。このような場合には、上記多バイト文字列の圧縮手順が有用である。
【0046】
<実施の形態4>
実施形態1〜3においては、メインフレーム200が圧縮した圧縮レコードファイル141をコンピュータ100上で読み書きすることを説明した。これは特に、コンピュータ100がメインフレーム以外のコンピュータ(例えばWindows(登録商標)コンピュータなどのオープン環境)である場合において有効である。
【0047】
すなわち、オープン環境においてはメインフレーム上のレコードファイルを効率よく処理するアプリケーションが提供されていない場合があるので、本発明に係る圧縮データ処理プログラム130を用いてこれを処理することにより、オープン環境においてもメインフレーム環境と同様に効率よくこれらレコードファイルを処理することができる。例えば実施形態3で説明したように、メインフレーム200上では特段意識しなくとも圧縮される文字列がオープン環境上では圧縮されない場合があるので、このようなレコードファイルを効率よく処理することができる。
【0048】
<実施の形態5>
図6は、本発明の実施形態5に係るアプリケーション120の画面イメージを示す図である。本実施形態5において、アプリケーション120は、圧縮レコードファイル141を画面表示し、または画面上で編集して更新後の内容を圧縮レコードファイル141へ反映する、編集アプリケーションとして構成されている。アプリケーション120は、コンピュータ100が備えるディスプレイ上に
図6のような編集画面を表示し、ユーザは同画面を用いて圧縮レコードファイル141を編集する。
【0049】
アプリケーション120は、実施形態1〜4で説明したように内部的に圧縮データ処理プログラム130を用いるので、圧縮レコードファイル141を圧縮したままで読み書きすることができる。また、圧縮レコードファイル141を単なるバイナリデータとしてではなくレコード単位に記述されたデータファイルとして編集することができる。
【0050】
圧縮レコードファイル141は、メインフレーム200が作成したデータファイルであるため、メインフレーム200が使用する文字コードを用いて記述されているのが通常である。そこでアプリケーション120は、圧縮レコードファイル141の文字コードを、コンピュータ100のOS(オペレーティングシステム)が使用する文字コードに変換した上で、画面上に表示してもよい。圧縮レコードファイル141を更新する場合は、メインフレーム200が使用する文字コードを用いて全体を上書きしてもよいし、コンピュータ100のOSが使用する文字コードを用いて全体を上書きしてもよい。同様の処理をアプリケーション120に代えて圧縮データ処理プログラム130が実施してもよい。
【0051】
以上の実施形態1〜5において、アプリケーション120と圧縮データ処理プログラム130は、一体的に構成することもできるし、これらを別モジュールとして構成した上でアプリケーション120から圧縮データ処理プログラム130を呼び出すように構成してもよい。前者の場合は、例えば圧縮データ処理プログラム130を静的リンクライブラリとして構成することができる。後者の場合は、例えば圧縮データ処理プログラム130を動的リンクライブラリとして構成することができる。