(57)【要約】【課題】住所や地番のように数字を含む文字列データのソートに関し、数字の桁数を反映してソーティングできるデータソートプログラムおよびデータソート方法を提供することを目的とする。【解決手段】データに含まれる数字を検出し、検出した数字に連なる数字の文字数に対する重み符号を数字の先頭に付与する。総てのデータに対して重み符号を付与し、これらのデータに対してソーティグを行い、ソーティング後のデータから付与した重み符号を削除するように構成する。【選択図】　　図１
2004021879.tif 000002
【特許請求の範囲】
【請求項１】
文字列で構成する複数のデータに対してソーティングを行うデータソートプログラムであって、
個々のデータに含まれる数字を検出する数字検出手順と、
検出した数字に連なる数字の文字数をカウントし、連なる数字の先頭にカウント値に相当する重み符号を付加する重み付加手順と、
重みが付加された総てのデータを互いに比較し、比較した結果に基づいてデータを並べるソート手順と、
ソートされた個々のデータから付加した重み符号を取り除く重み削除手順と
をコンピュータに実行させることを特徴とするデータソートプログラム。
【請求項２】
前記重み符号は、数字であること
を特徴とする請求項１記載のデータソートプログラム。
【請求項３】
文字列で構成する複数のデータに対してソーティングを行うデータソート方法であって、
個々のデータに含まれる数字を検出する数字検出手順と、
検出した数字に連なる数字の文字数をカウントし、連なる数字の先頭にカウント値に相当する重み符号を付加する重み付加手順と、
重みが付加された総てのデータを互いに比較し、比較した結果に基づいてデータを並べるソート手順と、
ソートされた個々のデータから付加した重み符号を取り除く重み削除手順と
を有することを特徴とするデータソート方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は文字列のデータのソーティングに係わり、特に住所や地番を表すデータのように数字を含む文字列データに対して数字の桁数を反映してソーティングするデータソートプログラムおよびデータソート方法に関する。
【０００２】
【従来の技術】
数字を含む文字列データは我々の身の回りに多く存在する。例えば、「神奈川県川崎市中原区上小田中４−１−１」は住居表示のデータで、丁目、番地、号に相当する部分に数字が用いられている。同様のデータは土地や建物の登記に用いられる地番や家屋番号のデータなどにも見られる。また、文字と数字を組み合わせて名付けたコンピュータで扱うファイル名も同様である。
【０００３】
このように、数字の入った文字列データを文字コードの大きさに従ってソーティング（整列）しようとすると、文字列の先頭から順番に文字コードの大きさを比較して並び替えるため数字の桁数が反映されずにソーティングされることになる。例えば、「神奈川１−１」、「神奈川２−１」、「神奈川１０−１」の３つのデータを昇順にソーティングすると、「神奈川１−１」、「神奈川１０−１」、「神奈川２−１」の順序となり、「神奈川１−１」、「神奈川２−１」、「神奈川１０−１」の順序にはならない。これは、コンピュータが数字も他の文字と同様に文字コードで見ているため、「１」の文字コードが「２」の文字コードより小さく、「神奈川１０−１」が「神奈川２−１」より前に来てしまうことになる。住居表示や地番、あるいはファイ名等に数字が含まれる文字列データのソーティング結果は見づらいものとなってしまう。
【０００４】
可変長のデータに対するソーティングとして次のような提案がなされている。「特開昭６０−６５３３３」では、可変長データ群の上位のデータを構成するエレメントについてソーティングを行い、ソートしたデータの大きさを表す識別子とソートデータとを出力し、先に出力した識別子他のエレメントとを連結してソーティングを行い、これを繰り返すことで高速にソーティングできることを提案している。
【０００５】
また、「特開平２−２４７１５」では、データ中に含まれるキーコードの桁数が同一のときはキーコード全体の数値の大小により比較し、桁数が異なるときは同一の桁同士の数値の大きさを比較することにより桁数を反映したソーティングを行うことを提案している。
さらに、「特開平１１−２２４１８２」では、識別子によって要素データが区分された可変長データデータにおいて、要素データを抽出し、抽出した要素データ同士を比較することによりソーティングを行うことで、例えば電子メールアドレスのようなデータのソーティングが可能であることを提案している。
【０００６】
【発明が解決しようとする課題】
上記に示したように、数字が含まれる文字列のデータをソーティングすると数字の桁数が反映されず見づらいものとなる。可変長のデータに対する技術が幾つか提案されているが、住所データのように文字列の中に複数個の数字が含まれるような場合に、数字の桁数を考慮したものとはなっていなかった。上述した「特開平２−２４７１５」では、キーコードを構成する数字の桁数を反映するものであり、キーコードでないデータに対しては数字の桁数が反映されるものではなかった。
【０００７】
本発明は、簡便な方法でありながら数字の桁数を反映した文字列のソーティングができるデータソート方法、データソートプログラムおよびその記録媒体を提供することを目的とする。
【０００８】
【課題を解決するための手段】
本発明の請求項１の原理を図１を用いて説明する。本発明は、数字検出手順１、重み付加手順２、ソート手順３および重み削除手順４から構成する。
数字検出手順１は、文字列データの中から数字を検出するものである。より具体的には、ランダムな順序に並んだデータの中の一つのデータに対し、１文字単位に文字コードを調べ、数字を表す文字コードであるかを判定することにより数字を検出する。
【０００９】
重み付加手順２は、数字検出手順１で数字が検出されたデータに対して、検出した数字の先頭に数字の文字数（即ち、桁数）に相当する重み符号を付けることを行う。重み符号は、数字の桁数が大きくなるに従って文字コードが大きくなるものであれば何であってもよい。また、一つのデータの中に数字部分が複数分散している場合にそれぞれの数字部分の先頭に重み符号を付ける。即ち、数字部分が三カ所存在すれば、三つの重み符号がそれぞれの数字の先頭に付ける。例えば文字列が「××××１××２３××４５６」（但し、×は数字以外の文字や記号）であれば、数字「１」の前に１桁に相当する重み符号が、数字「２３」の前に２桁に相当する重み符号が、数字「４５６」の前には３桁に相当する重み符号を付けることになる。重み付加手順２実施後のデータは、重み符号付きデータとなる。
【００１０】
ソート手順３は、数字検出手順１と重み付加手順２を実施して重み符号が付けられたデータに対してそれぞれのデータ同士を比較し、比較の結果によってデータを並べる。即ち、重み符号を付けたデータに対してソーティングを行うものである。ソート手順３実施後のデータは、ソートされた重み符号付きデータとなる。
【００１１】
重み削除手順４は、ソーティングされたデータから重み付加手順２で付けた重み符号を削除することを行う。
以上の構成により、数字を含む文字列のデータに対して、数字の桁数を反映したソーティングができる。
本発明の請求項２の原理は、請求項１の重み符号を「数字」とするものである。例えば、前述した文字列「××××１××２３××４５６」に対して「数字」の重み符号を付けた場合は、「××××１１××２２３××３４５６」（下線を付けた数字が重み符号である）となる。
【００１２】
【発明の実施の形態】
本発明を用いた実施形態を図２〜図６を用いて説明をする。本実施形態では、ソーティングする文字列データを地番データとし、このデータを昇順にソーティングすることとする。また、ソーティングの過程でデータに付加する重み符号は１〜９までの数字を用いる（地番データで用いられる数字は９桁を超えるものはないと考えられるため）。図２は、地番データのソーティングを本発明に基づいて処理するプログラムをコンピュータ上で実施するときの全体の構成を示すもので、コンピュータ１０、主記憶上で動作するソートプログラム２０、データの入力を行う入力装置３０、入力されたデータを格納するデータ格納部４０、ソーティングされたデータを格納するソートデータ格納部５０より成る。ここで、入力装置３０は、キーボードや磁気テープ装置等であって、データを取り込むための装置であれば他のものでもよい。また、データ格納部４０とソートデータ格納部５０は外部記憶装置でハードディスクやフロッピーディスク、ＭＯ（Ｍａｇｎｅｔｏ　Ｏｐｔｉｃａｌ）ディスクなどである。ソートプログラム２０はデータ入力部２１、前処理部２２、ソート部２３、後処理部２４およびデータ出力部２５より成り、それらの個々の内容について以下に説明する。
【００１３】
データ入力部２１は、入力装置３０から文字列データを取り込み、取り込んだデータをデータ格納部４０に格納する。図３（ａ）にデータ格納部４０に格納された地番データの例を示す。このデータは、ソーティング前の元データである。地番データは図３（ａ）で示されるようにデータ長は可変であり、データ格納部４０にはランダムな順序で格納されている。また、データ中には数字部分を含まないデータ例（図３（ａ）の７番目のデータ）も含ませ、このように数字を含まないデータが混在していても本発明の方法により、数字を含むデータに対して桁数を反映したソーティングができることを説明する。
【００１４】
前処理部２２は、データ格納部４０からデータを読み出し、データ中の数字部分の前にその数字の桁数に相当する数値（数字が２桁であれば「２」）を重み符号として挿入する。データ中に数字部分が複数あれば同様にそれぞれの数字部分の前に桁数の数値を挿入する。また、前処理部２２では、データ格納部４０の総てのデータに対して重み符号の挿入を行う。図３（ｂ）は、前処理部２２で処理された後のデータ例である。図３（ａ）と比較して、各数字部分の前に桁数に相当する重み符号の数字が挿入されている（当然のことながら、数字部分がないデータには重み符号が付かない）。この前処理部２２は、図１の発明の原理図における数字検出手順１と重み付加手順２の実現例である。
【００１５】
ソート部２３は、重み符号が挿入された文字列のデータに対して文字コードの並び順にソーティングを行う。図３（ｃ）は、重み符号の付いたデータを昇順にソーティングした結果のデータ例である。
後処理部２４は、ソーティングされた文字列のデータから重み符号である数字の削除を行う。図３（ｄ）は重み符号削除のデータ例であり、図３（ａ）のデータが数字の桁数を反映したソーティングされていることが分かる。この後処理部２４は、図１の発明の原理図における重み削除手順４を実現するものである。
【００１６】
データ出力部２５は、重み符号を削除したソーティング済のデータをソートデータ格納部５０に格納する。
次に、図２に示したデータソートプログラム２０の処理フローについて、図４〜図６を用いて説明する。
図４は、データソートプログラム２０の全体の処理フローを示すものである。まず、入力装置３０から入力された地番データをデータ格納部４０に格納する。地番データは複数あり、データ格納部４０にはランダムな順序で格納される。（Ｓ１）。
【００１７】
次にデータ格納部４０に格納さたデータの一つを取り出し、前処理ルーチン（詳細は後述する）においてデータ中の数字部分の桁数に相当する数字を重み符号として数字部分の先頭に挿入することを行う。この処理をデータ格納部４０の総てのデータに対して実施する。この結果、データ格納部４０のデータは、総てのデータが重み符号が付けられたものとなっている。（Ｓ２、Ｓ３）。
【００１８】
重み符号が付いたデータをデータ格納部４０から読み出し、個々のデータを相互に先頭の文字から文字コードの大小を比較し小さな数値の文字コードを持つデータから順番に並べるようにソーティングする。ソーティングが終了した後に、後処理ルーチン（詳細は後述する）において前処理で付加した重み符号を取り除く。重み符号が取り除かれたデータをソートデータ格納部５０に格納して終了する。（Ｓ４〜Ｓ７）。
【００１９】
次に前処理ルーチンのフロー例を図５により説明する。まず、データ格納部４０のデータを一つ取り出し、データを構成する文字数を計数し、この値をｋとする。（Ｓ１１、Ｓ１２）。
データの文字位置を示すカウンタｉを０に初期セットして、まずデータの先頭の文字からコードを調べるためにカウントアップ（ｉ＝ｉ＋１）を行う。ｉがデータの文字数ｋを超えていなければ、ｉ番目の文字が数字のコードであるかを判定する。例えば、ＡＳＣＩＩコードの場合の０〜９までの数字のコードは３０ｈ〜３９ｈ（ｈは１６進であることを示す）であるので、ｉ番目の文字の文字コードがこの数値に該当するかどうかで、数字であるかどうかの判定ができる。数字の文字コードでなければ、ｉをカウントアップして同様に文字コードの判定を行う。（Ｓ１３〜Ｓ１６）。
【００２０】
データの文字列の中に数字が現れると、数字の桁数カウンタｎを０に初期セットしてカウントアップ（ｎ＝ｎ＋１）し、さらに判定した数字の次の位置ｉ＋ｎがデータの文字数を超えないことを確認（ｉ＋ｎ＞ｋ）して、ｉ＋ｎ番目の文字が数字かどうかを判定する。判定の方法はＳ１６と同様である。数字であれば数字の桁数カウンタｎをカウントアップして行く。ｉ＋ｎ番目の文字が数字でない場合、およびデータの文字数を超えた場合に、（ｉ−１）とｉの間に桁数カウンカｎの数値である数字を挿入する（即ち、数字の先頭に桁数の数字が挿入されたことになる）。（Ｓ１７〜Ｓ２１）。
【００２１】
文字位置を示すカウンタｉは、数字部分の先頭の位置を示しているので、その値に数字の桁数を加え（ｉ＝ｉ＋ｎ）、Ｓ１４に戻り残りの文字列に数字があるかどうか、を同様に判定する。ｉがデータの文字数ｋを超えたことを判断すると、一つのデータに対する重み符号の挿入が終了し、データ格納部４０にこの重み符号の付いたデータをＳ１１で取り出したデータと置き換えて格納する。これで前処理を終了する。（Ｓ２２、Ｓ１４、Ｓ１５、Ｓ２３）。
【００２２】
以上のフローにより、データ中に数字部分が分散して存在しても、その数字部分の先頭に桁数を表す数字が重み符号として挿入される。また、このフローでも分かるように、前処理ルーチンでは数字を含まないデータの場合に元のデータが出力されることになる。
最後に、後処理ルーチンのフロー例を図６により説明する。まず主記憶上にあるソートされたデータから最初の一つのデータを取り出し、データの文字数を計数してその値をｋとする。（Ｓ３１、Ｓ３２）。
【００２３】
文字位置を示すカウンタｉを０に初期セットし、重み符号の数字か否かを表すフラグｆｌを０に初期セットする。（Ｓ３３、Ｓ３４）。
データ中の文字位置を示すカウンタｉをカウントアップ（ｉ＝ｉ＋１）し、文字位置がデータの文字数を超えていないことを判断してｉ番目の文字が数字かどうかを判定する。数字でなければフラグｆｌを「０」としてカウントアップを繰り返す。ｉ番目の文字が数字であり、フラグｆｌが「０」ならば重み符号の数字であるのでｉ番目の数字を削除する。削除した後に、フラグｆｌを「１」として文字位置のカウンタｉをカウントアップし同様の処理を行う。フラグｆｌが「０」でないとき（即ち、「１」のとき）は重み符号の数字ではないので削除を行わずに文字位置のカウンタｉをカウントアップする。カウンタｉがカウントアップされて、数字から文字に変ったときにフラグｆｌは「０」に戻るので、重み符号のみ削除できる。（Ｓ３５〜Ｓ４１）。
【００２４】
文字位置のカウンタｉがデータの文字数を超えたら重み符号を削除したデータをソートデータ格納部５０に格納し、処理を終了する。（Ｓ３６、Ｓ４２）
以上の後処理ルーチンのフローにより、データ中に現れる数字部分の先頭の数字だけを削除できる。
本実施形態では、重み符号として１〜９までの数字を用いたが、データに１５桁までの数値が在る場合はこの数字にＡ〜Ｆを加えて１６進のようにしてもよい。また、単に重み符号としてＡ〜Ｚまでを１桁から２６桁に対応させてもよい。さらに「あ」〜「ん」までを重み符号として１桁〜５０桁に対応させてもよい。
【００２５】
以上、本発明を一つの実施形態例で具体的に説明したが、本発明はこの例に限定されるものではない。
（付記１）　文字列で構成する複数のデータに対してソーティングを行うデータソートプログラムであって、
個々のデータに含まれる数字を検出する数字検出手順と、
検出した数字に連なる数字の文字数をカウントし、連なる数字の先頭にカウント値に相当する重み符号を付加する重み付加手順と、
重みが付加された総てのデータを互いに比較し、比較した結果に基づいてデータを並べるソート手順と、
ソートされた個々のデータから付加した重み符号を取り除く重み削除手順と
をコンピュータに実行させることを特徴とするデータソートプログラム。
【００２６】
（付記２）　前記重み符号は、数字であること
を特徴とする付記１記載のデータソートプログラム。
（付記３）　文字列で構成する複数のデータに対してソーティングを行うデータソート方法であって、
個々のデータに含まれる数字を検出する数字検出手順と、
検出した数字に連なる数字の文字数をカウントし、連なる数字の先頭にカウント値に相当する重み符号を付加する重み付加手順と、
重みが付加された総てのデータを互いに比較し、比較した結果に基づいてデータを並べるソート手順と、
ソートされた個々のデータから付加した重み符号を取り除く重み削除手順と
を有することを特徴とするデータソート方法。
【００２７】
（付記４）　文字列で構成する複数のデータに対してソーティングを行うデータソートプログラムを記録した記録媒体であって、
個々のデータに含まれる数字を検出する数字検出手順と、
検出した数字に連なる数字の文字数をカウントし、連なる数字の先頭にカウント値に相当する重み符号を付加する重み付加手順と、
重みが付加された総てのデータを互いに比較し、比較した結果に基づいてデータを並べるソート手順と、
ソートされた個々のデータから付加した重み符号を取り除く重み削除手順と
をコンピュータに実行させるためのプログラムを記録した記録媒体。
【００２８】
【発明の効果】
本発明のデータソートプログラムおよびデータソート方法によれば、簡易な方法で数字を含む文字列データのソーティングにおいて数字の桁数を反映したソーティングができる。
【図面の簡単な説明】
【図１】本発明の原理図である。
【図２】データソートプログラムの実施例である。
【図３】実施形態におけるデータ例である。
【図４】地番データの処理フロー例である。
【図５】前処理ルーチンの処理フロー例である。
【図６】後処理ルーチンの処理フロー例である。
【符号の説明】
１：数字検出手順
２：重み付加手順
３：ソート手順
４：重み削除手順
１０：コンピュータ
２０：データソートプログラム
２１：データ入力部
２２：前処理部
２３：ソート部
２４：後処理部
２５：データ出力部
３０：入力装置
４０：データ格納部
５０：ソートデータ格納部
【図１】
2004021879.tif 000003
【図２】
2004021879.tif 000004
【図３】
2004021879.tif 000005
【図４】
2004021879.tif 000006
【図５】
2004021879.tif 000007
【図６】
2004021879.tif 000008