IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

特開2023-156212文字コード判別装置及び文字コード判別方法
<>
  • 特開-文字コード判別装置及び文字コード判別方法 図1
  • 特開-文字コード判別装置及び文字コード判別方法 図2
  • 特開-文字コード判別装置及び文字コード判別方法 図3
  • 特開-文字コード判別装置及び文字コード判別方法 図4
  • 特開-文字コード判別装置及び文字コード判別方法 図5
  • 特開-文字コード判別装置及び文字コード判別方法 図6
  • 特開-文字コード判別装置及び文字コード判別方法 図7
  • 特開-文字コード判別装置及び文字コード判別方法 図8
  • 特開-文字コード判別装置及び文字コード判別方法 図9
  • 特開-文字コード判別装置及び文字コード判別方法 図10
  • 特開-文字コード判別装置及び文字コード判別方法 図11
  • 特開-文字コード判別装置及び文字コード判別方法 図12
  • 特開-文字コード判別装置及び文字コード判別方法 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023156212
(43)【公開日】2023-10-24
(54)【発明の名称】文字コード判別装置及び文字コード判別方法
(51)【国際特許分類】
   G06F 40/126 20200101AFI20231017BHJP
   G06F 40/216 20200101ALI20231017BHJP
   G06F 40/242 20200101ALI20231017BHJP
【FI】
G06F40/126
G06F40/216
G06F40/242
【審査請求】有
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2022065957
(22)【出願日】2022-04-12
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001689
【氏名又は名称】青稜弁理士法人
(72)【発明者】
【氏名】林 洋史
(72)【発明者】
【氏名】前田 新吾
【テーマコード(参考)】
5B091
5B109
【Fターム(参考)】
5B091EA01
5B109TA11
(57)【要約】
【課題】シフトコードが使用されていないテーブルデータに含まれる文字を表すコードの文字コードを簡単に特定できる文字コード判別装置及び文字コード判別方法を提供する。
【解決手段】メインフレームシステムは、第1情報処理装置を含む文字コード判別装置を含む。第1情報処理装置は、マイグレーション対象のメインフレームテーブルに対して、機械的判定、及び、頻出辞書判定の少なくとも一つを行うことにより、メインフレームテーブルに含まれるコード値の文字コードを列単位で特定するように構成される。
【選択図】図1
【特許請求の範囲】
【請求項1】
第1システムから第2システムにマイグレーションする対象の表形式のテーブルデータの処理を行う情報処理装置を備えた文字コード判別装置であって、
前記情報処理装置は、
判定プログラムにより、前記テーブルデータの各フィールドに格納された文字列に対応するコード値が、前記テーブルデータで使われている文字コードに対して有効であるか否かの判定を行い、当該判定の結果に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する機械的判定、
及び、
少なくとも登録コード値と当該登録コード値の文字コードとが対応付けられて登録された頻出辞書に基づいて、前記テーブルデータの各フィールドに格納された文字列に対応する前記コード値が前記登録コード値として前記頻出辞書に登録されているか否かを判定し、当該判定の結果に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する頻出辞書判定、
の少なくとも一つを実行する、
ように構成された、
文字コード判別装置。
【請求項2】
請求項1に記載の文字コード判別装置において、
前記情報処理装置は、
前記機械的判定及び前記頻出辞書判定の両方を実行する、
ように構成された、
文字コード判別装置。
【請求項3】
請求項1に記載の文字コード判別装置において、
前記情報処理装置は、
前記機械的判定及び前記頻出辞書判定の何れか一つを実行する、
ように構成された、
文字コード判別装置。
【請求項4】
請求項1に記載の文字コード判別装置において、
前記情報処理装置は、
前記機械的判定において、前記判定の結果を示す情報をフィールド毎に取得し、列単位の前記判定の結果を示す情報に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する、
ように構成された、
文字コード判別装置。
【請求項5】
請求項1に記載の文字コード判別装置において、
前記情報処理装置は、
前記機械的判定において、前記判定の結果を示すビット情報をフィールド毎に取得し、列単位で前記ビット情報の論理積を計算し、計算した前記論理積に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する、
ように構成された、
文字コード判別装置。
【請求項6】
請求項1に記載の文字コード判別装置において、
前記情報処理装置は、
前記頻出辞書判定において、前記判定の結果を示す情報をフィールド毎に取得し、列単位の前記判定の結果を示す情報に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する、
ように構成された、
文字コード判別装置。
【請求項7】
請求項1に記載の文字コード判別装置において、
前記情報処理装置は、
前記頻出辞書判定において、前記判定の結果を示すビット情報をフィールド毎に取得し、列単位で前記ビット情報の論理積を計算し、計算した前記論理積に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する、
ように構成された、
文字コード判別装置。
【請求項8】
請求項2に記載の文字コード判別装置において、
前記情報処理装置は、
前記機械的判定を実行した後、前記頻出辞書判定を実行し、
前記機械的判定によって前記文字コードを特定できなかった列が存在する場合、当該特定できなかった列について、前記頻出辞書判定を実行する、
ように構成された、
文字コード判別装置。
【請求項9】
請求項1に記載の文字コード判別装置において、
前記頻出辞書が記憶された記憶装置を備え、
前記情報処理装置は、前記機械的判定及び前記頻出辞書判定の少なくとも一つの判定により前記文字コードが特定された前記コード値について、当該コード値と前記文字コードとを対応付けて前記頻出辞書に登録する、
ように構成された、
文字コード判別装置。
【請求項10】
請求項1に記載の文字コード判別装置において、
前記頻出辞書には、前記登録コード値が当該登録コード値に対応付けられた前記文字コードである確定度の程度を示す確定度高及び確定度低の何れかの情報が、前記登録コード値及び前記文字コードに更に対応付けて登録され、
前記情報処理装置は、
前記頻出辞書判定において、
前記テーブルデータの各フィールドに格納された文字列に対応する前記コード値が、前記確定度高の前記登録コード値として前記頻出辞書に登録されているか否かを判定する、
ように構成された、
文字コード判別装置。
【請求項11】
請求項10に記載の文字コード判別装置において、
前記頻出辞書が記憶された記憶装置を備え、
前記情報処理装置は、前記機械的判定及び前記頻出辞書判定の少なくとも一つの判定により前記文字コードが特定されたコード値について、
前記文字コードが特定されたコード値が、前記頻出辞書に既に登録された前記登録コード値であるか否かを判定し、
前記文字コードが特定されたコード値が、前記頻出辞書に既に登録された前記登録コード値ではない場合、当該コード値と前記文字コードと出現回数の初期値と前記確定度低とを対応付けて前記頻出辞書に登録し、
前記文字コードが特定されたコード値が、前記頻出辞書に既に登録された前記登録コード値である場合、当該登録コード値に対応する前記出現回数を所定回数だけ増加させることにより、前記頻出辞書を更新し、
更新した前記出現回数が、所定の閾値回数以上である場合、前記登録コード値に対応付けて登録されている前記確定度低を前記確定度高に更新する、
ように構成された、
文字コード判別装置。
【請求項12】
請求項1に記載の文字コード判別装置において、
画面を表示可能な表示装置を更に備え、
前記情報処理装置は、前記機械的判定及び頻出辞書判定の少なくとも一つによって、前記文字コードを特定できなかった列が存在する場合、当該特定できなかった列について、
前記コード値を候補文字コードで変換した結果を含み、当該特定できなかった列に対する前記文字コードを特定するための入力情報を入力するためのGUI画面を前記表示装置に表示し、
前記GUI画面を介して、前記情報処理装置に入力された前記入力情報に基づいて、前記特定できなかった列に対する文字コードを特定する、
ように構成された、
文字コード判別装置。
【請求項13】
請求項1に記載の文字コード判別装置において、
前記第1システムは、メインフレームシステムであり、前記第2システムは、OPEN系システムである、
文字コード判別装置。
【請求項14】
第1システムから第2システムにマイグレーションする対象の表形式のテーブルデータの処理を行う情報処理装置を用いた文字コード判別方法であって、
前記情報処理装置によって、
判定プログラムにより、前記テーブルデータの各フィールドに格納された文字列に対応するコード値が、前記テーブルデータで使われている文字コードに対して有効であるか否かの判定を行い、前記判定の結果に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する機械的判定、
及び、
少なくとも登録コード値と当該登録コード値の文字コードとが対応付けられて登録された頻出辞書に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する頻出辞書判定、
の少なくとも一つを行う
文字コード判別方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、文字コード判別装置及び文字コード判別方法に関する。
【背景技術】
【0002】
文字を表すコードの文字コードを判別する従来技術として、特許文献1の技術(以下、「従来技術1」と称呼される。)及び特許文献2の技術(以下、「従来技術2」と称呼される。)が存在する。
【0003】
従来技術1は、多種多様な言語で記載されたテキスト文書の言語及び文字コードを識別する。従来技術1は、対象言語/文字コード系毎に出現する可能性のある規定長のバイト列のリストを予め作成する。従来技術1は、リストに既に存在する規定長バイト列が判別対象のテキスト文書に含まれる個数の割合(出現率)を算出し、割合に基づいて、判別対象となるテキスト文書で使用されている一つの言語/文字コード系を特定する。
【0004】
従来技術2は、文字列データの記述に用いたバイナリ値について、機械的解析により各文字コードに機械的評価値を付与し、統計的解析により、各文字コードに統計的評価値を付与し、機械的評価値及び統計的評価値の合計値に基づいて、最終的な文字コードを特定する。従来技術2は、機械的解析では、例えば、各種の文字コードが有する固有のマッピング(使用バイト数及びバイト表現範囲)に着目し、解析対象のバイナリ値のマッピングを解析する。従来技術2は、統計的解析では、複数種類の文字コードを用いて、解析対象のバイナリ値を文字列に変換し、変換された文字列を対象として、統計的な解析を行う。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】国際公開第02/095614号
【特許文献2】特開2010-176237号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
メインフレームで管理されているテーブルデータを、OPEN系で取り扱うために、メインフレームからOPEN系にテーブルデータをマイグレーションすることが行われている。テーブルデータは、文字を表すコード(例えば、16進数のコード)を含む。テーブルデータでは、列毎の文字を表すコードの文字コードが、異なる場合がある(例えば、ある列の英数字を表すコードの文字コードが、EBCDIKであり、ある列とは違う列の漢字を表すコードの文字コードが、KEISである場合がある。)。この場合において、文字を表すコードの文字コードが、何であるかを判別するため、文字コードの適用開始位置及び適用終了位置を表すコードであるシフトコードが、使用される。しかし、メインフレームで管理されているテーブルデータには、シフトコードが使用されていない場合がある。
【0007】
シフトコードが使用されていないテーブルデータを、メインフレームからOPEN系にマイグレーションする場合、文字を表すコードの文字コードが、テーブルデータに列単位で混在する複数の文字コードのうちのどの文字コードであるかを判別できない場合がある。従って、この場合、文字を表すコードの文字コードを特定(判別)するために、一旦、文字を表すコードを各文字コードによって文字に変換し、文字化けするか否かを確認し、文字を表すコードの文字コードを特定することが行われる。
【0008】
このような面倒な文字コード特定工程を軽減するために、シフトコードが使用されていないテーブルデータを、メインフレームからOPEN系にマイグレーションする際、テーブルデータに含まれる文字を表すコードの文字コードを特定することが求められる。
【0009】
しかし、従来技術1では、解析対象をある列の文字列とした場合、解析対象となる文字列の長さが、解析に必要な規定数に達しない場合がある。従って、従来技術1では、テーブルデータの文字を表すコードの文字コードを特定することができない場合がある。
【0010】
従来技術2では、統計的解析において、複数種類の文字コードを用いて、解析対象のバイナリ値を文字列に変換し、変換した文字列を対象として、統計的な解析を行う必要があるため、面倒な工程が常に生じてしまう。
【0011】
本発明は上記課題を解決するためになされた。即ち、本発明の目的の一つは、シフトコードが使用されていないテーブルデータに含まれる文字を表すコードの文字コードを簡単に特定できる文字コード判別装置及び文字コード判別方法を提供することにある。
【課題を解決するための手段】
【0012】
上記課題を解決するために、本発明の文字コード判別装置は、第1システムから第2システムにマイグレーションする対象の表形式のテーブルデータの処理を行う情報処理装置を備えた文字コード判別装置であって、前記情報処理装置は、判定プログラムにより、前記テーブルデータの各フィールドに格納された文字列に対応するコード値が、前記テーブルデータで使われている文字コードに対して有効であるか否かの判定を行い、当該判定の結果に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する機械的判定、及び、少なくとも登録コード値と当該登録コード値の文字コードとが対応付けられて登録された頻出辞書に基づいて、前記テーブルデータの各フィールドに格納された文字列に対応する前記コード値が前記登録コード値として前記頻出辞書に登録されているか否かを判定し、当該判定の結果に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する頻出辞書判定、の少なくとも一つを実行する、ように構成されている。
【0013】
本発明の文字コード判別方法は、第1システムから第2システムにマイグレーションする対象の表形式のテーブルデータの処理を行う情報処理装置を用いた文字コード判別方法であって、前記情報処理装置によって、判定プログラムにより、前記テーブルデータの各フィールドに格納された文字列に対応するコード値が、前記テーブルデータで使われている文字コードに対して有効であるか否かの判定を行い、前記判定の結果に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する機械的判定、及び、少なくとも登録コード値と当該登録コード値の文字コードとが対応付けられて登録された頻出辞書に基づいて、前記テーブルデータに含まれる前記コード値の前記文字コードを列単位で特定する頻出辞書判定、の少なくとも一つを行う。
【発明の効果】
【0014】
本発明によれば、シフトコードが使用されていないテーブルデータに含まれる文字を表すコードの文字コードを簡単に特定できる。
【図面の簡単な説明】
【0015】
図1図1は本発明の第1実施形態に係る文字コード判別装置を含むシステムの構成例を示す構成図である。
図2図2はメインフレームテーブルを説明するための図である。
図3図3はOPEN系テーブルを説明するための図である。
図4図4は頻出辞書を説明するための図である。
図5図5は文字コードの判定方法を説明するための図である。
図6図6は判定フィールドに格納されるビットを説明するための図である。
図7図7は判定フィールド及び論理積フィールドに格納される2桁のビットの状態を説明するための図である。
図8図8はマイグレーションプログラムが実行する処理フローを示すフローチャートである。
図9図9はマイグレーションプログラムが実行する処理フローを示すフローチャートである。
図10図10はマイグレーションプログラムが実行する処理フローを示すフローチャートである。
図11図11はマイグレーションプログラムが実行する処理フローを示すフローチャートである。
図12図12は本発明の第2実施形態に係る文字コード判別装置のマイグレーションプログラムが実行する処理フローを示すフローチャートである。
図13図13は手動判定処理で表示されるGUI画面を示す図である。
【発明を実施するための形態】
【0016】
以下、本発明の各実施形態について図面を参照しながら説明する。なお、以下の説明では、「テーブル」、「レコード」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されてもよい。更に、識別情報について説明する際、「番号」、「名称」等の表現を用いるが、これらについては互いに置換が可能である。更に、以下の説明では、「プログラム」や機能ブロックを主語として処理を説明する場合があるが、プログラムは、CPUによって実行されることで、定められた処理を行うため、処理の主語が、プログラムや機能ブロックに代えて、CPU又は情報処理装置とされてもよい。
【0017】
更に、以下の説明では、文字を表すコードは、「コード値」又は「文字を表すコード値」と称呼される。「文字コード」は、デジタル機器で文字を扱うためのルールを定めた規格を意味する。表形式のテーブルデータの一つの行は、「レコード」と称呼される。一つのレコード(行)の各列は、「フィールド(要素)」とも称呼される。表形式のテーブルデータの一つの列の複数の行は、「列単位のレコードのセット」と称呼される。
【0018】
<<第1実施形態>>
<構成>
図1は、本発明の第1実施形態に係る文字コード判別装置を含むシステムの構成例を示す。システムは、第1情報処理装置100と、補助記憶装置130と、第2情報処理装置200と、補助記憶装置230と、を含む。これらは互いに情報を送受信可能に接続されている。第1情報処理装置100には、入力装置140及びディスプレイ150が接続されている。第1情報処理装置100、補助記憶装置130、入力装置140及びディスプレイ150を含む装置が、本発明の第1実施形態に係る「文字コード判別装置」に対応する。なお、文字コード判別装置は、少なくとも第1情報処理装置100を含んでいればよい。
【0019】
本例において、第1情報処理装置100は、メインフレーム(「大型汎用機」又は「大型コンピュータ」とも称呼される。)であり、第2情報処理装置200は、OPEN系のコンピュータである。第1情報処理装置100及び補助記憶装置130を含むシステムは、「メインフレームシステム」と称呼され、第2情報処理装置200及び補助記憶装置230を含むシステムは、「OPEN系システム」と称呼される。
【0020】
第1情報処理装置100は、CPU110及び主記憶装置120を含む。主記憶装置120は、プログラムとして、マイグレーションプログラム121、及び、業務アプリケーション122を含む。CPU110は、主記憶装置120に格納されたマイグレーションプログラム121を実行することにより、マイグレーション機能を実現することができる。マイグレーション機能は、メインフレームシステムが管理(保持、記憶)しているデータを処理して、OPEN系システムに移行する。マイグレーション機能は、データに対する処理として、機械的判定及び頻出辞書判定を含む文字コード判定、頻出辞書登録、並びに、文字コード変換を実行する。更に、CPU110は、主記憶装置120に格納された業務アプリケーション122を実行することにより、業務を処理する機能を実現することができる。
【0021】
補助記憶装置130には、メインフレームテーブルTB1と、OPEN系テーブルTB11と、頻出辞書131と、メインフレームテーブルTB1のテーブルの列の区切りを示す情報である区切り情報132と、が格納(保持、記憶)されている。入力装置140は、キーボード、マウスなどの操作デバイスである。ディスプレイ150は、画面(画像)を表示可能な表示装置である。
【0022】
第2情報処理装置200は、CPU210及び主記憶装置220を含む。主記憶装置220は、プログラムとして、業務アプリケーション221を含む。CPU210は、主記憶装置220に格納された業務アプリケーション221を実行することにより、業務を処理する機能を実現することができる。
【0023】
図2は、メインフレームテーブルTB1を説明するための図である。メインフレームテーブルTB1は、表形式のテーブルデータである。表は行と列とから構成され、表の横方向は行と称呼され、表の縦方向は列と称呼される。なお、以下、メインフレームテーブルTB1は、「テーブルTB1」と称呼される。
【0024】
図2に示すように、テーブルTB1は、情報(値(数値、文字列など))を格納する列(カラム)として、社員番号301と、部署302と、氏名303と、年齢304と、内部データ305と、住所306と、を含む。
【0025】
テーブルTB1には、各列に対応する情報(値(数値、文字列など))が、互いに対応付けられて行単位のレコード(情報)として格納されている。一つのレコード(行)の各列は、「フィールド(要素)」とも称呼される。即ち、一つのレコード(行)は、一つのレコード(行)の複数の列に対応する複数のフィールド(要素)から構成される。
【0026】
なお、説明の便宜上、テーブルTB1の2行目に、各列で使用されている文字コード、数値を表現する形式などを示し、これは、テーブルTB1に実際には含まれない。更に、各フィールドの値(文字列、数値)の下のかっこ書き内に、フィールドの値に対応するコード値を示している。実際には、テーブルTB1には、各フィールドの値(文字列、数値)に対応するコード値が格納されている。更に、テーブルTB1の1行目の各列のデータ項目の名称の下のかっこ書き内には、各列の区切りを示す情報(即ち、各列に格納されるコード値のデータ長(データ量))を示している。これは、テーブルTB1に関連付けられた区切り情報132である。更に、本実施形態では、数値を記述するためのパック形式及びゾーン形式のコード値は、1まとめにバイナリ扱いとし、文字コード変換の対象外とする。
【0027】
図3は、OPEN系テーブルTB11を説明するための図である。OPEN系テーブルTB11は、図2のテーブルTB1の文字コードの変換対象となるコード値が、OPEN系システムで使用可能な文字コード(例えば、Shift-JISなど)に対応するコード値に変換された表形式のテーブルデータである。なお、以下、OPEN系テーブルTB11は、「テーブルTB11」と称呼される。
【0028】
テーブルTB11は、情報(値(数値、文字列など))を格納する列(カラム)として、社員番号401と、部署402と、氏名403と、年齢404と、内部データ405と、住所406と、を含む。テーブルTB11には、各列に対応する情報(値(数値、文字列など))が、互いに対応付けられて行単位のレコード(情報)として格納されている。
【0029】
なお、説明の便宜上、テーブルTB11の2行目に、各列で使用されている文字コード、数値を表現する形式などを示し、これは、テーブルデータの定義情報として、テーブルTB11に含まれていてもいなくてもよい。更に、各フィールドの値(文字列、数値)の下のかっこ書き内に、フィールドの値に対応するコード値を示している。実際には、テーブルTB11には、各フィールドの値(文字列、数値)に対応するコード値が格納されている。更に、テーブルTB11の1行目の各列のデータ項目の名称の下のかっこ書き内には、各列の区切りを示す情報(即ち、各列に格納されるコード値のデータ長(データ量))を示している。これは、テーブルTB11に関連付けられたデータ(区切り情報132)であり、テーブルTB1とは別のデータであってもよいし、テーブルデータの定義情報として、テーブルTB11に含まれていてもよい。
【0030】
図4は、頻出辞書131を説明するための図である。頻出辞書131は、表形式のテーブルデータであり、情報(値(数値、文字列など))を格納する列(カラム)として、文字列131aと、文字コード131bと、バイト長131cと、出現回数131dと、確定度131eと、を含む。頻出辞書131には、各列に対応する情報(値(数値、文字列など))が、互いに対応付けられて行単位のレコード(情報)として格納されている。
【0031】
具体的に述べると、文字列131aには、文字列に対応するコード値(文字列の下のかっこ書き内に示すコード値)が格納されている。文字コード131bには、文字コードの名称が格納されている。バイト長131cには、文字列を表すコード値のデータ長(バイト長)が格納されている。出現回数131dには、後述の頻出辞書登録で文字コードが特定する毎に「1」(所定回数)だけ増加される出現回数が格納される。確定度131eには、2段階の確定度(高/低)が格納される。即ち、確定度131eには、頻出辞書131の同行の対応するコード値が同行の対応する文字コードである可能性が高いことを示す「高」、及び、同行の対応するコード値が同行の対応する文字コードである可能性はあるが、その可能性が「高」が示す可能性より低いことを示す「低」が格納されている。
【0032】
<概要>
本発明の理解を容易にするため、本発明の概要について説明する。テーブルTB1(メインフレームテーブルTB1)は、シフトコード(文字コードの適用開始位置及び適用終了位置を表すコード値)が含まれていないテーブルデータである。このようなシフトコードが保存されていないテーブルデータがメインフレームシステムには、存在している。
【0033】
長年にわたり、メインフレームシステムで実行される業務アプリケーション122は、テーブルTB1の構造を理解する(どの列にどの文字コードが使用されているかを理解する)ためのプログラムを含んでいる。従って、メインフレームシステムでは、業務アプリケーション122が、テーブルTB1にシフトコードを付加することが可能である。よって、業務アプリケーション122は、テーブルTB1のコード値に対応する適切な文字コードを理解できるので、例えば、文字化けすることなくコード値を文字に変換して、テーブルTB1を画面に出力するなどの業務に関する処理を、支障なく行うことができる。
【0034】
一方、メインフレームシステムの業務アプリケーション122が利用するシフトコードが含まれていないテーブルTB1を何ら処理することなくそのままOPEN系システムにマイグレーションする場合、メインフレーム上、あるいは、OPEN系のコンピュータで動作するマイグレーションを実行するプログラムがテーブルTB1のコード値を正しく解釈することができない場合がある。更に、OPEN系システムの第2情報処理装置200(業務アプリケーション221)は、テーブルTB1のコード値の文字コードに対応していない。このため、OPEN系システムでは、キーボードからテーブルデータ(テーブルTB1)にデータを追加することやテーブルデータを画面に出力することなどのテーブルデータに対する基本的な入出力すら行うこともできず、業務に支障が生じてしまう。
【0035】
そこで、テーブルTB1をOPEN系システムにマイグレーションする場合、テーブルTB1をOPEN系システムの文字コードに対応したテーブルデータに変換することが必要となる。
【0036】
ところが、シフトコードが保存されていないテーブルTB1では、コード値の文字コードが、テーブルTB1に列単位で混在して使用されている複数の文字コードのうちのどの文字コードであるかを判別できない場合がある。
【0037】
この場合、従来では、コード値の文字コードを特定(判別)するために、一旦、文字を表すコード値を各文字コードによって文字に変換し、文字化けするか否かを確認し、コード値の文字コードを特定(判別)することが行われていた。しかし、このような文字コード特定工程は面倒であるという問題が生じている。
【0038】
このような問題に対して、本発明の第1実施形態に係る文字コード判別装置は、メインフレームからOPEN系にマイグレーションする際、機械的判定及び頻出辞書判定により、テーブルTB1に含まれるコード値の文字コードを特定する。これにより、本発明の第1実施形態に係る文字コード判別装置は、上記文字コード特定工程を行うことなく、テーブルTB1の文字を表すコード値の文字コードを簡単に特定できる。
【0039】
<作動の概要>
本発明の第1実施形態に係る文字コード判別装置の作動の概要について説明する。文字コード判別装置に含まれる第1情報処理装置100は、テーブルTB1に含まれるコード値の文字コードを判別する。第1情報処理装置100は、テーブルTB1の文字コードの判別結果11aを用いて、図1の矢印a1に示すように、テーブルTB1のコード値を、OPEN系システムで使用される文字コードに対応するコード値に変換したOPEN系テーブルTB11に変換する。第1情報処理装置100は、図1の矢印a2に示すように、OPEN系テーブルTB11をバイナリ転送によりOPEN系システムにマイグレーションする。
【0040】
第1情報処理装置100の動作は、準備フェーズと、入力フェーズと、判定フェーズと、文字コード変換フェーズとを含む。以下、各フェーズの動作について説明する。
【0041】
(準備フェーズ)
準備フェーズでは、「EBCDIKコードの設定」、「頻出辞書の登録」、及び、「頻出辞書の文字列と閾値の設定」が実行される。
【0042】
「EBCDIKコードの設定」
EBCDIKには、半角カナなど使用頻度が小さいコード値がある。EBCDIKコードの設定では、変換対象テーブル(例えば、テーブルTB1)において、EBCDIKとして使用しないコード値がわかっている場合、そのコード値を、「EBCDIKではないコード値」として、後述の判別プログラムに対して、設定する。判別プログラムによる判定において、「EBCDIKではないコード値」が出現した場合、且つ、KEISとして有効であると判定された場合、その「EBCDIKではないコード値」はKEISであると確定することができる。これにより、EBCDIKとして使用しないコード値が多いほど、判定プログラムによる判定や頻出辞書による判定の正確性を向上できる。
【0043】
「頻出辞書の登録」
メインフレームシステムで多用されるある程度長さのある文字列(コード値)が存在する(わかっている)場合には、その文字列に関する情報(コード値及び文字コードなど)を、図4の頻出辞書131の文字列131a、文字コード131b、バイト長131c、出現回数131d、確定度131eに登録する。なお、このとき出現回数131dには、「1」が登録され、確定度131eには、「高」が登録される。
【0044】
「頻出辞書の文字列長と閾値の設定」
文字列長と閾値の設定では、後述の頻出辞書登録処理で使用する以下の値を設定する。
・確定度「高」で登録するとの判定の基準となる文字列長である第1文字列長L
・確定度「低」で登録するとの判定の基準となる文字列長である第2文字列長S(なお、第2文字列長Sは、第1文字列長Lより小さい値が設定される。)
・確定度「低」から確定度「高」に切り替える判定の基準となる出現回数の閾値(閾値T(閾値回数))
【0045】
(入力フェーズ)
入力フェーズでは、変換対象テーブル(テーブルTB1)及び変換対象テーブル(テーブルTB1)の列の区切り情報132を入力し、補助記憶装置130に格納する。補助記憶装置130に格納された変換対象テーブル(テーブルTB1)の区切り情報132が、補助記憶装置130から第1情報処理装置100に入力され、後述の文字コード判定に使用される。なお、列の区切り情報132は、入力装置140から第1情報処理装置100に直接入力された区切り情報132が、文字コード判定に使用されてもよい。
【0046】
(判定フェーズ)
判定フェーズでは、文字コード判定として、機械的判定及び頻出辞書判定が順に実行される。まず機械的判定について説明すると、機械的判定では、図5に示すように、変換対象のテーブルTB1の各レコードの各列(即ち、各フィールド)に対して、判定フィールドFd1が設定され、太枠点線L1で示した列単位のレコードのセットに対して論理積フィールドFd2が設定される。
【0047】
判定フィールドFd1には、図6の表601に示す2桁のビット(ビット0及びビット1)が格納される。2桁のビットは、便宜上、「ビット情報」とも称呼される。論理積フィールドFd2には、同列に対して設定された複数の判定フィールドFd1の2桁のビットの論理積の計算結果が、格納される。
【0048】
なお、図5において、判定フィールドFd1及び論理積フィールドFd2のそれぞれに格納される2桁のビットの状態を数値「0」、「1」、「2」及び「3」で表している。即ち、図6の表601に示すように、数値「0」は、ビット0及びビット1の何れもが「OFF」の状態(「0」の状態)を表す。数値「1」は、ビット0が「OFF」の状態(「0」の状態)であり、且つ、ビット1が「ON」の状態(「1」の状態)を表す。数値「2」は、ビット0が「ON」の状態であり、且つ、ビット1が「OFF」の状態を表す。数値「3」は、ビット0及びビット1の何れもが「ON」の状態を表す。
【0049】
機械的判定は、まず、テーブルTB1の一つのレコード(行)の各列(即ち、各フィールド)毎に、一つのレコードの各列に格納された文字列(文字列に対応するコード値)に対して、判定プログラムによる判定を行う。そして、機械的判定は、判定プログラムによる判定結果に応じて、ビット0及びビット1のそれぞれを「OFF」から「ON」の状態に設定する。
【0050】
判定プログラムとしては、「コード値がKEISとして有効であるか否かを判定可能なプログラム」及び「コード値がEBCDIKとして有効であるか否かを判定可能なプログラム」を用いる。このような判定プログラムは、周知であるので詳細な説明を省略する。この判定プログムによる判定では、一つのレコードの各列のコード値が、KEISとして有効であるか否かが判定され、一つのレコードの各列のコード値が、EBCDIKとして有効であるか否かが判定される。
【0051】
図7は、判定プログラムによる判定結果に応じた、判定フィールドFd1及び論理積フィールドFd2に格納される2桁のビットの状態を説明するための図である。図7の表701に示すように、ビット0は、コード値がKEISとして有効であるか否かの判定結果に応じて変更(設定)されるビットである。ビット1は、コード値がEBCDIKとして有効であるか否かの判定結果に応じて変更(設定)されるビットである。
【0052】
判定前の初期状態では、ビット0及びビット1の何れもが「OFF」の状態に設定されている。判定プログラムにより、コード値がKEISとして有効であると判定されると、ビット0が「ON」の状態に設定される。判定プログラムにより、コード値がEBCDIKとして有効であると判定されると、ビット1が「ON」の状態に設定される。
【0053】
従って、判定プログラムによる各フィールドのコード値の判定の結果、判定対象のフィールドのコード値がKEISのみ有効であると判定された場合、そのフィールドに対する判定フィールドFd1のビット0のみが「ON」の状態になる。
【0054】
判定プログラムによる判定の結果、判定対象のフィールドのコード値がEBCDIKのみ有効であると判定された場合、そのフィールドに対する判定フィールドFd1のビット1のみが「ON」の状態になる。
【0055】
判定プログラムによる判定の結果、判定対象のフィールドのコード値がKEISとして有効であり、且つ、当該コード値がEBCDIKとして有効であると判定された場合、そのフィールドに対する判定フィールドFd1のビット0及びビット1の何れもが「ON」の状態になる。
【0056】
判定プログラムによる判定の結果、判定対象のフィールドのコード値がKEISとして有効ではなく、且つ、当該コード値がEBCDIKとしても有効ではないと判定された場合、そのフィールドに対する判定フィールドFd1のビット0及びビット1の何れもが「OFF」の状態になる。
【0057】
機械的判定は、各レコードの各列(各フィールド)の全てについて、判定プログラムによる判定を行った後、列単位で、各フィールドに対する判定フィールドFd1のビット0及びビット1の論理積を計算して、論理積フィールドFd2に格納する。
【0058】
計算した結果、矢印(1)が示す列の論理積の結果が示すように、論理積フィールドFd2に格納されたビット0及びビット1の何れもが「OFF」の状態である場合、機械的判定は、当該列の文字コードがバイナリであると判定(特定)する(図7を参照。)。
【0059】
計算した結果、矢印(2)が示す列の論理積の結果が示すように、論理積フィールドFd2に格納されたビット1のみが「ON」の状態である場合、機械的判定は、当該列の文字コードがEBCDIKであると判定(特定)する(図7を参照。)。
【0060】
矢印(3)が示す列のように、テーブルTB1の最終列のみ可変長を許可し、計算した結果、矢印(3)が示す列の論理積の結果が示すように、論理積フィールドFd2に格納されたビット0のみが「ON」の状態である場合、機械的判定は、当該列の文字コードがKEISであると判定(特定)する(図7を参照。)。
【0061】
計算した結果、矢印(4)が示す列の論理積の結果が示すように、論理積フィールドFd2に格納されたビット0及びビット1の何れもが「ON」の状態である場合、機械的判定は、文字コードの判定を保留する(図7を参照。)。
【0062】
次に、頻出辞書判定について説明する。頻出辞書判定では、機械的判定が判定を保留した列について、頻出辞書131に基づいて文字コードを判定する。具体的に述べると、まず、頻出辞書判定は、判定対象の列の各行(即ち、各フィールド)に、確定度「高」且つ「KEIS」で頻出辞書131に登録されたコード値が含まれているか否かを判定する。その結果、判定対象のフィールドに、確定度「高」且つ「KEIS」で登録されたコード値が含まれている場合、頻出辞書判定は、そのフィールドに対する判定フィールドFd1に格納されたビット0及びビット1を、ビット0のみ「ON」の状態(即ち、ビット0が「ON」且つビット1が「OFF」の状態)に変更する。
【0063】
更に、頻出辞書判定は、判定対象の列の各行(即ち、各フィールド)に、確定度「高」且つ「EBCDIK」で登録されたコード値が含まれているか否かを判定する。その結果、判定対象のフィールドに、確定度「高」且つ「EBCDIK」で頻出辞書131に登録されたコード値が含まれている場合、頻出辞書判定は、そのフィールドに対する判定フィールドFd1に格納されたビット0及びビット1を、ビット1のみ「ON」の状態(即ち、ビット0が「OFF」且つビット1が「ON」の状態)に変更する。
【0064】
頻出辞書判定は、機械的判定が判定を保留した列について、機械的判定同様、列単位で、各フィールドに対する判定フィールドFd1のビット0及びビット1の論理積を計算して、論理積フィールドFd2に格納する。論理積フィールドFd2に格納されたビット0及びビット1の状態に基づいて、各列の文字コードを判定(特定)する。
【0065】
そして、機械的判定及び頻出辞書判定が終了すると、文字コード判定は、機械的判定及び頻出辞書判定による各列の文字コードの判定結果に基づいて、テーブルTB1の各列単位の文字コードを示す情報及びバイナリ扱いとすることを示す情報を含む判別結果11aを出力する。
なお、機械的判定及び頻出辞書判定による文字コードの特定結果に基づいて、頻出辞書131の更新(頻出辞書登録)も行う。この処理については、後述する。
【0066】
(文字コード変換フェーズ)
文字コード変換は、判別結果11aに基づいて、変換対象テーブル(テーブルTB1)の先頭のレコードから順に、KEIS及びEBCDIKの何れかに判定した列を文字コードの変換対象列として、変換対象列のコード値を、移行後のOPEN系で使用可能な文字コードに対応したコード値に変換する。この文字コードの変換は、変換対象として、第1情報処理装置100に入力された変換対象テーブル(テーブルTB1)について行う。
【0067】
なお、変換対象として、第1情報処理装置100に入力された対象テーブル(テーブルTB1)が複数存在する場合、複数の対象テーブルの全てについて、上述した準備フェーズと、入力フェーズと、判定フェーズと、文字コード変換フェーズを行う。以上が本発明の第1実施形態に係る文字コード判別装置の作動の概要である。
【0068】
<具体的作動>
以下、上述した機械的判定、頻出辞書判定、及び、頻出辞書登録(頻出辞書登録処理)について説明する。
【0069】
図8はマイグレーションプログラム121(以下、「MPGM121」と称呼される。)が実行する機械的判定の処理フローを示すフローチャートである。MPGM121は、図8のステップ800から処理を開始してループ1の始点のステップ801に進み、ステップ801乃至ステップ814のループ1の実行を開始する。このループ1は、ループ1の終了条件(変換対象テーブルの全てについてループ1の処理が実行される)が成立するまで繰り返し実行される。
【0070】
MPGM121は、ステップ802に進み、判定フィールドFd1を初期化(ビット0及びビット1の何れも「OFF」の状態に設定)した後、ループ2の始点のステップ803に進み、ステップ803乃至ステップ811のループ2の実行を開始する。このループ2は、ループ2の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立するまで、繰り返し実行される。
【0071】
MPGM121は、ループ3の始点のステップ804に進み、ステップ804乃至ステップ810のループ3の実行を開始する。このループ3は、ループ3の終了条件(最終列のレコードの区切りまでコード値を読み込む)が成立するまで、繰り返し実行される。
【0072】
MPGM121は、ステップ805に進み、コード値をレコードの区切りまで読み込み、ステップ806に進む。
MPGM121は、ステップ806に進むと、判定プログラムによる判定を行うことにより、読み込んだコード値が、KEISとして有効なコード値であるか否かを判定する。
【0073】
読み込んだコード値が、KEISとして有効なコード値である場合、MPGM121は、ステップ806にて「YES」と判定してステップ807に進み、読み込んだコード値に対応する判定フィールドFd1のビット0を「ON」に設定した後、ステップ808に進む。
【0074】
読み込んだコード値が、KEISとして有効なコード値ではないと判定した場合、MPGM121は、ステップ806にて「NO」と判定してステップ808に直接進む。
【0075】
MPGM121は、ステップ808に進むと、判定プログラムによる判定を行うことにより、読み込んだコード値が、EBCDIKとして有効なコード値であるか否かを判定する。
【0076】
読み込んだコード値が、EBCDIKとして有効なコード値である場合、MPGM121は、ステップ808にて「YES」と判定してステップ809に進み、読み込んだコード値に対応する判定フィールドFd1のビット1を「ON」に設定して、ループ3の終点のステップ810に進む。
【0077】
読み込んだコード値が、EBCDIKとして有効なコード値ではない場合、MPGM121は、ステップ808にて「NO」と判定して、ループ3の終点のステップ810に直接進む。
【0078】
MPGM121は、ループ3の終点のステップ810にてループ3の終了条件(最終列のレコードの区切りまでコード値を読む)が成立していない場合、ループ3の始点804に戻る。一方、MPGM121は、ループ3の終点のステップ810にてループ3の終了条件(最終列のレコードの区切りまでコード値を読む)が成立している場合、ループ3を終了し、ループ2の終点のステップ811に進む。
【0079】
MPGM121は、ループ2の終点のステップ811にてループ2の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立していない場合、ループ2の始点のステップ803に戻る。一方、MPGM121は、ループ2の終点のステップ811にてループ2の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立している場合、ループ2を終了し、ステップ812に進む。
【0080】
MPGM121は、ステップ812に進むと、上述したように、各列単位で、全行の判定フィールドFd1のビット0及びビット1の論理積を計算し、計算した論理積に基づいて、各列の文字コードを決定(特定)する。
【0081】
その後、MPGM121は、ステップ813に進み、頻出辞書登録処理を実行して、ループ1の終点のステップ814に進む。なお、この頻出辞書登録処理の詳細は、後述する。
【0082】
MPGM121は、ループ1の終点のステップ814にてループ1の終了条件(変換対象テーブルの全てについてループ1の処理が実行される)が成立していない場合、ループ1の始点801に戻る。一方、MPGM121は、ループ1の終点のステップ814にてループ1の終了条件(変換対象テーブルの全てについてループ1の処理が実行される)が成立している場合、ループ1を終了し、ステップ895に進んで本処理フローを一旦終了する。
【0083】
図9は、MPGM121が実行する頻出辞書判定の処理フローを示すフローチャートである。MPGM121は、機械的判定が終了すると、図9のステップ900から処理を開始して、ループ1の始点のステップ901に進み、ステップ901乃至ステップ913のループ1の実行を開始する。このループ1は、ループ1の終了条件(変換対象テーブルの全てについてループ1の処理が実行される)が成立するまで繰り返し実行される。
【0084】
MPGM121は、ループ2の始点のステップ902に進み、ステップ902乃至ステップ910のループ2の実行を開始する。このループ2は、ループ2の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立するまで、繰り返し実行される。
【0085】
MPGM121は、ループ3の始点のステップ903に進み、ステップ903乃至ステップ909のループ3の実行を開始する。このループ3は、ループ3の終了条件(不明な列を全て読む)が成立するまで、繰り返し実行される。
【0086】
MPGM121は、ステップ904に進み、機械的判定が終了した後の変換対象テーブルにおいて、文字コードが不明な列まで読み込み開始位置をずらし、コード値をレコードの区切りまで読み込み、ステップ905に進む。
【0087】
MPGM121は、ステップ905に進むと、読み込んだコード値に、確定度「高」、且つ、文字コードがKEISで頻出辞書131に登録されたコード値が、含まれているか否かを判定する。
【0088】
読み込んだコード値に、確定度「高」、且つ、文字コードがKEISで頻出辞書131に登録されたコード値が、含まれている場合、MPGM121は、ステップ905にて「YES」と判定してステップ906に進む。MPGM121は、ステップ906に進むと、読み込んだコード値に対応する判定フィールドFd1のビット0及びビット1のうち、ビット0のみが「ON」の状態に変更して、ループ3の終点のステップ909に進む。
【0089】
読み込んだコード値に、確定度「高」、且つ、文字コードがKEISで頻出辞書131に登録されたコード値が、含まれていない場合、MPGM121は、ステップ905にて「NO」と判定してステップ907に進む。
【0090】
MPGM121は、ステップ907に進むと、読み込んだコード値に、確定度「高」、且つ、文字コードがEBCDIKで頻出辞書131に登録されたコード値が、含まれているか否かを判定する。
【0091】
読み込んだコード値に、確定度「高」、且つ、文字コードがEBCDIKで頻出辞書131に登録されたコード値が、含まれている場合、MPGM121は、ステップ907にて「YES」と判定してステップ908に進む。MPGM121は、ステップ908に進むと、読み込んだコード値に対応する判定フィールドFd1のビット0及びビット1のうち、ビット1のみが「ON」の状態に変更して、ループ3の終点のステップ909に進む。
【0092】
読み込んだコード値に、確定度「高」、且つ、文字コードがEBCDIKで頻出辞書131に登録されたコード値が、含まれていない場合、MPGM121は、ステップ907にて「NO」と判定してループ3の終点のステップ909に進む。
【0093】
MPGM121は、ループ3の終点のステップ909にてループ3の終了条件(不明な列を全て読む)が成立していない場合、ループ3の始点のステップ903に戻る。
【0094】
MPGM121は、ループ3の終点のステップ909にてループ3の終了条件(不明な列を全て読む)が成立している場合、ステップ910に進む。
【0095】
MPGM121は、ループ2の終点のステップ910にてループ2の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立していない場合、ループ2の始点のステップ902に戻る。
【0096】
MPGM121は、ループ2の終点のステップ910にてループ2の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立している場合、ステップ911に進む。
【0097】
MPGM121は、ステップ911に進むと、上述したように、文字コードが不明な列について、各列単位で、全行の判定フィールドFd1のビット0及びビット1の論理積を計算し、計算した論理積に基づいて、各列の文字コードを決定(特定)する。
【0098】
その後、MPGM121は、ステップ912に進み、頻出辞書登録処理を実行して、ループ1の終点のステップ913に進む。なお、この頻出辞書登録処理の詳細は、後述する。
【0099】
MPGM121は、ループ1の終点のステップ913にてループ1の終了条件(変換対象テーブルの全てについてループ1の処理が実行される)が成立していない場合、ループ1の始点901に戻る。一方、MPGM121は、ループ1の終点のステップ913にてループ1の終了条件(変換対象テーブルの全てについてループ1の処理が実行される)が成立している場合、ループ1を終了し、ステップ995に進んで本処理フローを一旦終了する。
【0100】
上述したステップ813及びステップ912のそれぞれで実行される頻出辞書登録処理の詳細について説明する。図10及び図11は、MPGM121が実行する頻出辞書登録処理の処理フローを示すフローチャートである。
【0101】
MPGM121は、図10のステップ1000から処理を開始してループ1の始点のステップ1001に進み、ステップ1001乃至ステップ1032(図11)のループ1の実行を開始する。このループ1は、ループ1の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立するまで繰り返し実行される。
【0102】
MPGM121は、ループ2の始点のステップ1002に進み、ステップ1002乃至ステップ1031(図11)のループ2の実行を開始する。このループ2は、ループ2の終了条件(最終列のレコードの区切りまでコード値を読む)が成立するまで繰り返し実行される。
【0103】
MPGM121は、ステップ1003に進むと、KEISかEBCDIKで確定している列(フィールド)まで読み込み開始位置をずらして、列に格納された文字列に対応するコード値を読み込み、ステップ1004に進む。
【0104】
MPGM121は、ステップ1004に進み、読み込んだコード値の文字列長(データ長)が第1文字列長L以上であるか否かを判定する。
【0105】
読み込んだコード値の文字列長(データ長)が第1文字列長L以上である場合、MPGM121は、ステップ1004にて「YES」と判定してステップ1005に進み、コード値が頻出辞書131に登録済みであるか否かを判定する。
【0106】
コード値が頻出辞書131に登録済みではない場合、MPGM121は、ステップ1005にて「NO」と判定して以下に述べるステップ1006及びステップ1007の処理を順に実行した後、ステップ1008に進む。
【0107】
ステップ1006:MPGM121は、確定度「高」でコード値及び文字コードを頻出辞書131に登録する。
【0108】
ステップ1007:MPGM121は、出現回数を「1」で初期化する(出現回数を「1」で頻出辞書131に登録する。)。
【0109】
コード値が頻出辞書131に登録済みである場合、MPGM121は、ステップ1005にて「YES」と判定してステップ1009に進み、出現回数を「1」だけ増加させた後、ステップ1008に進む。
【0110】
一方、ステップ1004の処理にて、読み込んだコード値の文字列長(データ長)が第1文字列長Lより小さい場合、MPGM121は、ステップ1004にて「NO」と判定してステップ1010に進み、文字列長が第2文字列長S以上であるか否かを判定する。なお、上述したように、第2文字列長Sは、第1文字列長Lより小さい値に設定されている。
【0111】
読み込んだコード値の文字列長が第2文字列長S以上である場合、MPGM121は、ステップ1010にて「YES」と判定してステップ1011に進み、読み込んだコード値が頻出辞書131に登録済みであるか否かを判定する。
【0112】
読み込んだコード値が頻出辞書131に登録済みではない場合、MPGM121は、ステップ1011にて「NO」と判定して以下に述べるステップ1012及びステップ1013の処理を順に実行した後、ステップ1008に進む。
【0113】
ステップ1012:MPGM121は、確定度「低」で読み込んだコード値及び文字コードを頻出辞書131に登録する。
【0114】
ステップ1013:MPGM121は、出現回数を「1」で初期化する(出現回数を「1」で頻出辞書131に登録する。)。
【0115】
これに対し、読み込んだコード値が頻出辞書131に登録済みである場合、MPGM121は、ステップ1011にて「YES」と判定してステップ1014に進み、頻出辞書131に登録済みのコード値に対応する出現回数を「1」だけ増加させた後、ステップ1015に進む。
【0116】
MPGM121は、ステップ1015に進むと、頻出辞書131に登録済みのコード値に対応する出現回数が閾値T以上であるか否かを判定する。
【0117】
出現回数が閾値T以上である場合、MPGM121は、ステップ1015にて「YES」と判定してステップ1016に進み、頻出辞書131に登録済みのコード値に対応する確定度を「低」から「高」に変更した後、ステップ1008に進む。
【0118】
頻出辞書131に登録済みのコード値に対応する出現回数が閾値Tより小さい場合、MPGM121は、ステップ1015にて「NO」と判定してステップ1008に進む。
【0119】
ステップ1010の処理にて、読み込んだコード値の文字列長が第2文字列長Sより小さい場合、MPGM121は、ステップ1010にて「NO」と判定してステップ1008に直接進む。
【0120】
MPGM121は、ステップ1008に進むと、読み込んだコード値に対応する文字列を形態素解析で単語に分解する。その後、MPGM121は、図11のループ3の始点1017に進み、ステップ1017乃至ステップ1022のループ3の実行を開始する。このループ3は、ループ3の終了条件(分解した単語の全てについてループ3の処理を実行するまで)が成立するまで繰り返し実行される。
【0121】
MPGM121は、ステップ1018に進み、単語に対応するコード値の文字列長が第1文字列長L以上であるか否かを判定する。
【0122】
単語に対応するコード値の文字列長が第1文字列長L以上である場合、MPGM121は、ステップ1018にて「YES」と判定してステップ1019に進み、単語に対応するコード値が頻出辞書131に登録済みであるか否かを判定する。
【0123】
単語に対応するコード値が頻出辞書131に登録済みではない場合、MPGM121は、ステップ1019にて「NO」と判定して、以下に述べるステップ1020及びステップ1021の処理を順に実行した後、ループ3の終点の1022に進む。
【0124】
ステップ1020:MPGM121は、確定度「高」で単語に対応するコード値及び文字コードを頻出辞書131に登録する。
【0125】
ステップ1021:MPGM121は、出現回数を「1」で初期化する(出現回数を「1」で頻出辞書131に登録する。)。
【0126】
単語に対応するコード値が頻出辞書131に登録済みである場合、MPGM121は、ステップ1019にて「YES」と判定してステップ1023に進み、頻出辞書131に登録済みのコード値に対応する出現回数を「1」だけ増加させた後、ループ3の終点のステップ1022に進む。
【0127】
ステップ1018の処理にて、単語に対応するコード値の文字列長が第1文字列長Lより小さい場合、MPGM121は、ステップ1018にて「NO」と判定してステップ1024に進み、単語に対応するコード値の文字列長が第2文字列長S以上であるか否かを判定する。
【0128】
単語に対応するコード値の文字列長が第2文字列長S以上である場合、MPGM121は、ステップ1024にて「YES」と判定してステップ1025に進み、単語に対応するコード値が頻出辞書131に登録済みであるか否かを判定する。
【0129】
単語に対応するコード値が頻出辞書131に登録済みではない場合、MPGM121は、ステップ1025にて「NO」と判定して以下に述べるステップ1026及びステップ1027の処理を順に実行した後、ループ3の終点のステップ1022に進む。
【0130】
ステップ1026:MPGM121は、確定度「低」で単語に対応するコード値及び文字コードを頻出辞書131に登録する。
【0131】
ステップ1027:MPGM121は、出現回数を「1」で初期化する(出現回数を「1」で頻出辞書131に登録する。)。
【0132】
単語に対応するコード値が頻出辞書131に登録済みである場合、MPGM121は、ステップ1025にて「YES」と判定してステップ1028に進み、頻出辞書131に登録済みのコード値に対応する出現回数を「1」だけ増加させた後、ステップ1029に進み、出現回数が閾値T以上であるか否かを判定する。
【0133】
出現回数が閾値T以上である場合、MPGM121は、ステップ1029にて「YES」と判定してステップ1030に進み、頻出辞書131に登録済みのコード値に対応する確定度を「低」から「高」に変更した後、ループ3の終点のステップ1022に進む。
出現回数が閾値Tより小さい場合、MPGM121は、ステップ1029にて「NO」と判定してループ3の終点のステップ1022に進む。
【0134】
ステップ1024の処理にて、読み込んだコード値の文字列長が第2文字列長Sより小さい場合、MPGM121は、ステップ1024にて「NO」と判定してループ3の終点のステップ1022に直接進む。
【0135】
MPGM121は、ループ3の終点のステップ1022にてループ3の終了条件(分解した単語の全てについてループ3の処理を実行するまで)が成立していない場合、ループ3の始点1017に戻る。
【0136】
MPGM121は、ループ3の終点のステップ1022にてループ3の終了条件(分解した単語の全てについてループ3の処理を実行するまで)が成立している場合、ループ3を終了して、ループ2の終点のステップ1031に進む。
【0137】
MPGM121は、ループ2の終点のステップ1031にてループ2の終了条件(最終列のレコードの区切りまでコード値を読む)が成立していない場合、ループ2の始点のステップ1002に戻る。
【0138】
MPGM121は、ループ2の終点のステップ1031にてループ2の終了条件(最終列のレコードの区切りまでコード値を読む)が成立している場合、ループ2を終了して、ループ1の終点のステップ1032に進む。
【0139】
MPGM121は、ループ1の終点のステップ1032にてループ1の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立していない場合、ループ1の始点のステップ1001に戻る。
【0140】
MPGM121は、ループ1の終点のステップ1032にてループ1の終了条件(変換対象テーブルの最終レコードまでコード値を読み込む)が成立している場合、ループ1を終了してステップ1095に進み、本処理フローを一旦終了する。
【0141】
<効果>
以上説明したように、本発明の第1実施形態に係る文字コード判別装置は、一旦、文字を表すコードを各文字コードによって文字に変換し、文字化けするか否かを確認し、文字を表すコードの文字コードを特定することを行う必要がない。従って、この文字コード判別装置は、シフトコードが使用されていないテーブルデータに含まれる文字を表すコード値の文字コードを簡単に特定できる。更に、この文字コード判別装置は、頻出辞書登録処理を実行することにより、頻出辞書131に「高」として登録されるコード値が増加していくことで、頻出辞書判定による文字コードの特定精度を向上できるので、文字コード判定による文字コードの特定精度をより向上できる。
【0142】
<<第2実施形態>>
本発明の第2実施形態に係る文字コード判別装置について説明する。この文字コード判別装置は、以下の点のみにおいて、第1実施形態に係る文字コード判別装置と相違点を有する。
・この文字コード判別装置は、機械的判定及び頻出辞書判定に加えて、手動判定処理を実行可能に構成される。
【0143】
以下、相違点を中心に説明する。
【0144】
図12は、第2実施形態に係る文字コード判別装置のMPGM121が実行する処理フローを示すフローチャートである。MPGM121は、図9のステップ901乃至ステップ913のループ1が終了すると、ステップ1201に進んで、ループ4の始点のステップ1201に進み、ステップ1201乃至ステップ1204のループ4の実行を開始する。このループ4は、ループ4の終了条件(変換対象テーブルの全てについてループ4の処理が実行される)が成立するまで繰り返し実行される。
【0145】
MPGM121は、ステップ1202に進むと、機械的判定及び頻出辞書判定が終了した変換対象テーブルにおいて、判定保留の列があるか否かを判定する。判定保留の列がない場合、MPGM121は、ステップ1202にて「NO」と判定してループ4の終点のステップ1204に進む。
【0146】
一方、判定保留の列がある場合、MPGM121は、ステップ1202にて「YES」と判定してステップ1203に進み、手動判定処理を行う。MPGM121は、全ての判定保留の列に対して、手動判定処理を行う。これにより、判定保留の列について、文字コードを判定(特定)していく。なお、手動判定処理の詳細は、後述する。その後、MPGM121は、ループ4の終点のステップ1204に進む。
【0147】
MPGM121は、ループ4の終点のステップ1204にて、ループ4の終了条件(変換対象テーブルの全てについてループ4の処理が実行される)が成立していない場合、ループ4の始点1201に戻る。
【0148】
MPGM121は、ループ4の終点のステップ1204にてループ4の終了条件(変換対象テーブルの全てについてループ4の処理が実行される)が成立している場合、ループ4を終了して、ステップ1295に進んで、本処理フローを一旦終了する。
【0149】
上述した手動判定処理の詳細について説明する。MPGM121は、図13のGUI画面GM1をディスプレイ150に表示する。図13に示すように、GUI画面GM1には、判定対象の列の任意の一つのフィールドに格納されたコード値をKEISとして文字列に変換した場合の変換結果が表示される。更に、GUI画面GM1には、当該コード値をEBCDIKとして文字列に変換した場合の変換結果が表示される。更に、GUI画面GM1には、当該コード値がバイナリとして表示される。ユーザは、GUI画面GM1を目視で確認して、GUI画面GM1を介して、文字コードを選択入力することにより、判定対象の列の文字コードを判定(特定)する。
【0150】
図13の例では、判定対象の列の任意の一つのフィールドに格納されたコード値がKEISであることがわかるので、ユーザによって、判定対象の列がKEISであることが、GUI画面GM1を介して、第1情報処理装置100に選択入力される。即ち、ユーザは、入力装置140を操作することによって、GUI画面GM1の「1:KEIS」を選択入力する。これにより、第1情報処理装置100に文字コード(KEIS)が入力されると、MPGM121は、入力された文字コード(本例において、「KEIS」)を判定対象の列の文字コードとして判定(特定)する。MPGM121は、このような手動判定処理を、機械的判定及び頻出辞書判定が終了した変換対象テーブルにおいて文字コードの判定が保留となっていた全ての列について行う。
【0151】
<効果>
以上説明したように、本発明の第2実施形態に係る文字コード判別装置は、文字コードの判定が保留になった列に格納されたコード値についてのみ、コード値を各文字コードによって文字に変換し、文字化けするか否かを確認し、コード値の文字コードを特定する手動判定処理を実行する。従って、本発明の第2実施形態に係る文字コード判別装置は、常に全てのコード値について手動判定処理を行う場合に比べて、シフトコードが使用されていないテーブルデータに含まれるコード値の文字コードを簡単に特定できる。更に、手動判定処理は、文字コードの判定が保留となっていた列の一つのフィールドについてのみ行えばよい。従って、文字コードの判定が保留となっていた列の全てのフィールドについて、手動判定処理を行う場合に比べて、シフトコードが使用されていないテーブルデータに含まれるコード値の文字コードを簡単に特定できる。更に、本発明の第2実施形態に係る文字コード判別装置は、機械的判定及び頻出辞書判定により文字コード特定できなかった列についても、コード値の文字コードを特定できる。
【0152】
<<第3実施形態>>
本発明の第3実施形態に係る文字コード判別装置について説明する。この文字コード判別装置は、以下の点のみにおいて、第1実施形態に係る文字コード判別装置と相違点を有する。
・この文字コード判別装置は、上述した機械的判定及び頻出辞書判定のうちの機械的判定のみを行うように構成される。従って、この文字コード判別装置は、図8図10及び図11に示したフローチャートを実行するように構成される。
【0153】
<効果>
本発明の第3実施形態に係る文字コード判別装置は、シフトコードが使用されていないテーブルデータに含まれる文字を表すコード値の文字コードを簡単に特定できる。
【0154】
<<第4実施形態>>
本発明の第4実施形態に係る文字コード判別装置について説明する。この文字コード判別装置は、以下の点のみにおいて、第1実施形態に係る文字コード判別装置と相違点を有する。
・この文字コード判別装置は、上述した機械的判定及び頻出辞書判定のうちの頻出辞書判定のみを行うように構成される。
・第1実施形態では、機械的判定が判定を保留した列について、頻出辞書131に基づいて文字コード判定を行ったが、第4実施形態では、全ての列について、頻出辞書131に基づいて文字コード判定を行う。
・文字コード判別装置は、「図9のループ3の終了条件を「テーブルの全ての列を読むまで」に変更したフローチャート」、図10及び図11に示したフローチャートを実行するように構成される。
【0155】
<効果>
本発明の第4実施形態に係る文字コード判別装置は、シフトコードが使用されていないテーブルデータに含まれる文字を表すコード値の文字コードを簡単に特定できる。
【0156】
<<変形例>>
本発明は上記各実施形態に限定されることなく、本発明の範囲内において種々の変形例を採用することができる。更に、上記各実施形態は、本発明の範囲を逸脱しない限り、互いに組み合わせることが可能である。
【0157】
例えば、上記各実施形態において、文字コードとして、KEIS、EBCDIK及びShift-JISを例に挙げて説明したが、各実施形態における文字コードは、これらに限定されず、KEIS、EBCDIK及びShift-JIS以外の文字コードであってもよい。
【0158】
上記各実施形態において、第2情報処理装置200が、テーブルTB1を取得し、テーブルTB1の文字コードを特定してOPEN系テーブルTB11に変換するようにしてもよい。更に、メインフレームシステム及びマイグレーション先のOPEN系システム以外に存在する他の情報処理装置が、テーブルTB1を取得し、テーブルTB1の文字コードを特定してOPEN系テーブルTB11に変換するようにしてもよい。
【0159】
上記各実施形態において、頻出辞書131は、出現回数131d及び確定度131eを含まなくてもよい。上記各実施形態において、図9のステップ905において、確定度を考慮しないで、単に、コード値に、文字コードがKEISで頻出辞書131に登録されたコード値が含まれているか否かを判定するようにしてもよい。上記各実施形態において、図9のステップ907において、確定度を考慮しないで、単に、コード値に、文字コードがEBCDIKで頻出辞書131に登録されたコード値が含まれているか否かを判定するようにしてもよい。
【符号の説明】
【0160】
100…第1情報処理装置、110,210…CPU、120,220…主記憶装置、121…マイグレーションプログラム、122,221…業務アプリケーション、130,230…補助記憶装置、131…頻出辞書、140…入力装置、150…ディスプレイ、200…第2情報処理装置、TB1…メインフレームテーブル、TB11…OPEN系テーブル
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13