(57)【特許請求の範囲】
【請求項１】
可変長レコードのソートを行うソート処理装置において、
入力された可変長のレコードの長さを確認することにより、前記レコードにソートの基準となるべきキーが含まれているかどうかを判断し、前記キーが含まれていれば、ソートの判断基準とすべき前記キーが含まれているレコードの集まりであるソート対象レコード群に、前記キーが含まれていなければ、前記キーが含まれてないレコードの集まりであるソート非対象レコード群に分配する分配手段と、
前記キーを判断基準にして前記ソート対象レコード群内のレコードをソートし、ソート順に出力するソート手段と、
を有することを特徴とするソート処理装置。
【請求項２】
前記ソート手段が出力した前記ソート対象レコード群のレコードに、前記ソート非対象レコード群のレコードを加えて出力するマージ手段をさらに有することを特徴とする請求項１記載のソート処理装置。
【請求項３】
前記マージ手段は、昇順のソートの場合には、前記ソート非対象レコード群のレコードを出力した後に前記ソート対象レコード群のレコードを出力し、降順のソートの場合には、前記ソート対象レコード群のレコードを出力した後に前記ソート非対象レコード群のレコードを出力することを特徴とする請求項２記載のソート処理装置。
【請求項４】
可変長レコードのソートを行うソート処理方法において、
入力された可変長のレコードの長さを確認することにより、前記レコードにソートの基準となるべきキーが含まれているかどうかを判断し、前記キーが含まれていれば、ソートの判断基準とすべき前記キーが含まれているレコードの集まりと、前記キーが含まれてないレコードの集まりとに分配し、
前記キーが含まれているレコードを対象に、前記キーを判断基準にしてソートし、ソート順に出力する、
ことを特徴とするソート処理方法。
【請求項５】
前記キーが含まれているレコードをソートし、ソート順に出力する際には、前記キーを含まないレコードを加えて出力することを特徴とする請求項４記載のソート処理方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はレコードの並べ替えを行うためのソート処理装置及びソート処理方法に関し、特にそれぞれの長さの違う可変長レコードの並べ替えを行うためのソート処理装置及びソート処理方法に関する。
【０００２】
【従来の技術】
各種レコードのデータ処理を行うコンピュータでは、一定の形式で書かれた大量のレコードを扱うので、何らかの順にならんでいると処理しやすいことが多い。普通、レコードはキーとなる項目を持っており、そのキーに従って昇順や降順に並べ替える。このように、レコードをある一定の基準に従って並べ替えを行うことをソートと呼ぶ。ここでキーとは、レコードの見出しとして使用されるキャラクタの集まりで、通常ひとつのフィールドを構成している。そして、レコードには複数のキーが含まれており、ソートを行う際にはどのキーを基準にするかを選択し、そのキーに従って昇順か、あるいは降順に並べ替える。なお、昇順とは、キーの値の小さい順に並べ替えることであり、降順とは、キーの値の大きい順に並べ替えることである。
【０００３】
固定長レコード（データの長さが一定のレコード）には、各レコードに必ず並べ替えの基準として指定した同じキーが含まれている。ところが、可変長レコード（レコードによってデータの長さが異なるレコード）には、全てのレコードに並べ替えの基準として指定したキーが含まれているとは限らない。つまり、長いレコードには、短いレコードに無いキーが含まれている場合があり得る。
【０００４】
図７は可変長レコードの例を示す図である。これは複数のパソコンについてのレコードである。データの種類は、「商品名」、「価格」、「出荷時期」、「５月分出荷数」、「４月分出荷数」、「３月分出荷数」、「２月分出荷数」、「１月分出荷数」の８種類である。このデータの各月の出荷数は、最新のデータから新しい順に記録されている。
【０００５】
このデータを、月別の出荷数をキーとしてソートする場合、製品によって出荷時期が違うため、出荷数のデータが存在する場合と存在しない場合とがある。例えば、１月分の出荷数をキーとしてソートを行う場合、キーとなるデータを含んでいるのはパソコンＡとパソコンＢだけであり、その他のパソコンのレコードはキーを含んでいない。
【０００６】
従来は、このような可変長レコードを扱う場合、基準とするべきキーが含まれないレコードには仮のキーデータを与え、ソートを実行する。そして、実行結果を出力する際に、仮のキーデータを削除する。なお、仮のキーデータは、最小値を与えることが一般的である。例えば、０から９の数字を小さい順に並べる場合、仮のキーデータは０となる。その結果、キーを含まない短いレコードは、レコード列の先頭に出力される。
【０００７】
【発明が解決しようとする課題】
しかし、キーを含まないレコードに仮のキーデータを付加するため、ソート処理を行う際に、付加された仮のキーデータのための記憶領域が必要になる。つまり、ソート処理の行っている間、各レコードはメモリ等の記憶装置に一時的に格納されるが、レコードが長くなれば、より大きな記憶領域が必要となる。さらに、その記憶領域の作成処理も必要になる。
【０００８】
また、キーを含まないレコードに与えられる仮のキーデータは最小値であることが明確であるにも係わらず、そのレコードもソート処理の際の比較対象になるため、ソートの際の比較回数が多くなりソート処理全体の処理時間が長くなってしまう。
【０００９】
このように、従来の可変長レコードのソート処理では不必要な処理が多く、ソート処理に時間がかかるとともに、ソート処理の際に大きな記憶領域が必要になるという問題点があった。
【００１０】
本発明はこのような点に鑑みてなされたものであり、可変長レコードのソート処理を効率的に行うことができるソート処理装置を提供することを目的とする。また、本発明の別の目的は、可変長レコードのソート処理を効率的に行うことができるソート処理方法を提供することである。
【００１１】
【課題を解決するための手段】
図１は上記目的を達成する本発明のソート処理装置の原理図である。本発明では、入力された可変長のレコード１０ａ、１０ｂ、１０ｃ、１０ｄの長さを確認することにより、レコードにソートの基準となるべきキーが含まれているかどうかを判断し、キーが含まれていれば、ソートの判断基準とすべきキーが含まれているレコードの集まりであるソート対象レコード群２０に、キーが含まれていなければ、前記キーが含まれてないレコードの集まりであるソート非対象レコード群３０に分配する分配手段１と、キーを判断基準にしてソート対象レコード群２０のレコードをソートし、そのレコードをソート順に出力するソート手段２と、が設けられる。
【００１２】
また、ソート手段２から出力されたレコードに、ソート非対象レコード群３０のレコードを加えて出力するマージ手段３がさらに設けられる。
【００１３】
【作用】
分配手段１は、入力された可変長のレコード１０ａ、１０ｂ、１０ｃ、１０ｄを、ソートの判断基準とすべきキーが含まれているレコードの集まりであるソート対象レコード群２０と、前記キーが含まれてないレコードの集まりであるソート非対象レコード群３０とに分配する。ソート手段２は、キーを基準にしてソート対象レコード群２０内のレコードをソートし、レコードをソート順に出力する。
【００１４】
また、マージ手段３は、ソート手段２から出力されたレコードに、ソート非対象レコード群３０のレコードを加えて出力する。
これにより、ソートの基準となるキーを含んだレコードのみをソートの対象とすることができる。
【００１５】
【実施例】
以下、本発明の一実施例を図面に基づいて説明する。
図１は本発明のソート処理装置の原理図である。入力ファイル１０は複数のレコード１０ａ、１０ｂ、１０ｃ、１０ｄを有している。分配手段１は、入力ファイル１０内のレコードを１つずつ解読し、ソートの基準とするキーが含まれているソート対象のレコードは、ソート対象レコード群２０の列に加え、ソートの基準とするキーが含まれていないレコードはソート非対象レコード群３０の列に加えるように、各レコードを分配する。
【００１６】
ソート手段２は、ソート対象レコード群２０に並んでいるレコード１０ａ、１０ｃを、キーを判断基準としてソートし、そのレコードをソート順に出力する。マージ手段３は、ソート手段２から出力されたレコードにソート非対象レコード群３０に並んでいるレコード１０ｂ、１０ｄを加え、出力ファイル４０にレコードを出力する。この際、ソート手段２で実行されたソートが昇順のソートの場合には、ソート非対象レコード群３０に並んでいるレコードを先に出力し、その後ソート手段２から出力されたレコードを出力する。逆に、実行されたソートが降順のソートの場合には、ソート手段２から出力されたレコードを先に出力し、その後ソート非対象レコード群３０に並んでいるレコードを出力する。
【００１７】
このようにして、ソートの基準となるキーを含んだレコードのみをソートの対象とすることができる。なお、キーを含まないレコードのみを出力として必要な場合は、マージ手段３を設けずにソート手段２がソートしたレコードを、直接出力することもできる。
【００１８】
図２は本発明のソート処理装置の処理手順を示すフローチャートである。なお、このフローチャートにおいてステップ１からステップ５は分配手段１の実行する機能であり、ステップ６はソート手段２の実行する機能であり、ステップ７からステップ１１はマージ手段３の実行する機能である。
〔Ｓ１〕入力ファイルのレコードを１つ読み込む。
〔Ｓ２〕読み込んだレコードに、ソートの基準となるべきキーが含まれているかどうかを判断し、キーが含まれていればステップ３に進み、キーが含まれていなければステップ４に進む。この判断は、レコード長とキーの開始位置を比較することによって判断する。キーの開始位置よりも短いレコード長のレコードは、キーを含んでいないと判断し、キーの開始位置よりも長いレコード長のレコードは、キーを含んでいると判断する。
〔Ｓ３〕レコードをソート対象レコード群の列に並ばせる。
〔Ｓ４〕レコードをソート非対象レコード群の列に並ばせる。
〔Ｓ５〕入力ファイル内の全てのレコードを読み込んだかどうかを判断し、全てのレコードの読み込みが完了していればステップ６に進み、完了していなければステップ１に進む。
〔Ｓ６〕ソート対象レコード群に並んでいるレコードを、キーを判断基準にし、指定された順（昇順、あるいは降順）でソートする。
〔Ｓ７〕ソート対象レコード群のソートが昇順であるかどうかを判断し、昇順であればステップ８に進み、昇順でなければ降順であると判断しステップ１０に進む。
〔Ｓ８〕出力ファイルに対し、ソート非対象レコード群のレコードを出力する。
〔Ｓ９〕出力ファイルに対し、ソート順に従ってソート対象レコード群のレコードを出力する。
〔Ｓ１０〕出力ファイルに対し、ソート順に従ってソート対象レコード群のレコードを出力する。
〔Ｓ１１〕出力ファイルに対し、ソート非対象レコード群のレコードを出力する。
【００１９】
次に、上記の構成を有するソート処理装置において、入力ファイル内のレコードがどのように処理されるかを具体的な例を用いて説明する。
図３は入力ファイルのレコードの例を示す図である。この入力ファイル１０には、１０個の可変長のレコード１０ａ〜１０ｊがある。ここで、レコードの先頭から１２、１３番目のデータをキーとし昇順でソートする場合を想定すると、レコード１０ａとレコード１０ｃとがキーを含んでいることになる。
【００２０】
まず、この入力ファイル１０内のレコードは、分配手段１によってソート対象レコード群と、ソート非対象レコード群に分配される。このとき、レコードがキーを含むかどうかは、レコードの長さで判断する。つまり、レコードのデータの数が１１以内の場合、そのレコードはキーを含んでいないと判断し、レコードのデータの数が１２以上の場合、そのレコードはキーを含んでいると判断する。
【００２１】
図４はソート対象レコード群に並んでいるレコードを示す図である。このソート対象レコード群２０には、レコード１０ａとレコード１０ｃが並んでいる。レコード１０ａのキー１１ａの値は「２３」、レコード１０ｃのキー１１ｃの値は「３４」である。
【００２２】
図５はソート非対象レコード群に並んでいるレコードを示す図である。このソート非対象レコード群には、レコード１０ｂ、レコード１０ｄ〜レコード１０ｊが並んでいる。
【００２３】
そして、ソート手段２によって、図４に示すソート対象レコード群のレコードが昇順にソートされる。この例では、レコード１０ａのキーは「２３」、レコード１０ｃのキーは「３４」であるため、レコード１０ａの方が先の順番にソートされる。
【００２４】
さらに、マージ手段３によって、ソートされたレコード１０ａ、１０ｃに、ソート非対象レコード群に並んでいるレコード１０ｂ、１０ｄ〜１０ｊが加えられ、出力ファイルに出力される。この際、ソートが昇順で行われているので、ソート非対象のレコードが先に出力される。
【００２５】
図６は出力ファイル内のレコードを示す図である。この出力ファイル内のレコードは、先頭からレコード１０ｂ、レコード１０ｄ、レコード１０ｅ、レコード１０ｆ、レコード１０ｇ、レコード１０ｈ、レコード１０ｉ、レコード１０ｊ、レコード１０ａ、レコード１０ｃの順になっている。なお、この結果はキーを含まないレコードに仮のキー「０」を付加して、全てのレコードを対象にソートした場合と同じ結果である。
【００２６】
このようにして、キーを含むレコードのみを対象としてソートすることができる。そのため、キーを含まないレコードに対して、仮のキーを付加する等の処理を行う必要がなくなり、実行するべき処理を減らすことができるとともに、仮のキーを付加するために余分に必要だった記憶領域が不要となる。
【００２７】
また、ソートの際のキーの比較は、キーを含むレコードどうしでの比較を行えば良いため、ソートの際の比較の回数が少なくなり、ソート処理にかかる時間を短縮できる。例えば、１０件のレコードがあり、そのうちの２件のレコードのみがキーを含んでいる場合を考える。従来の方法では、キーを含まないレコードに仮のキーを付加し、全てのレコードを比較対象とするため、１０件のレコードからキーの値が最小のレコードを１つ抽出するためには９回の比較が必要となる。ところが、キーを含むレコードのみで比較を行えば１回の比較ですむ。この例では比較の回数が９分の１になり、大幅な処理時間の短縮が図れる。
【００２８】
【発明の効果】
以上説明したように本発明では、可変長のレコードを、ソートの基準となるキーを含むソート対象レコード群と、キーを含まないソート非対象レコード群とに分配し、ソートの判断基準となるキーを含んだレコードのみをソートの対象とすることができるようになるため、可変長のレコードのソートを効率良く実行することができ、ソート処理にかかる時間が短縮できるとともに、ソート処理の際に必要な記憶領域も小さくすることができる。
【図面の簡単な説明】
【図１】本発明のソート処理装置の原理図である。
【図２】本発明のソート処理装置の処理手順を示すフローチャートである。
【図３】入力ファイル内のレコードの例を示す図である。
【図４】ソート対象レコード群に並んでいるレコードを示す図である。
【図５】ソート非対象レコード群に並んでいるレコードを示す図である。
【図６】出力ファイル内のレコードを示す図である。
【図７】可変長レコードの例を示す図である。
【符号の説明】
１  分配手段
２  ソート手段
３  マージ手段
１０  入力ファイル
１０ａ、１０ｂ、１０ｃ、１０ｄ  レコード
２０  ソート対象レコード群
３０  ソート非対象レコード群
４０  出力ファイル
【図１】
0003549251.tif 000002
【図２】
0003549251.tif 000003
【図３】
0003549251.tif 000004
【図４】
0003549251.tif 000005
【図５】
0003549251.tif 000006
【図６】
0003549251.tif 000007
【図７】
0003549251.tif 000008