(57)【要約】【課題】属性の異なる文字が混在している文字列に対して、並べ替えを行うことができる文字列のソート方法およびソートプログラムを提供する。【解決手段】属性の異なる文字が混在している文字列のソート方法において、ソート対象の文字列の先頭から、文字である場合には１文字を文字コードに変換し、数字の場合には次に文字が出現するまたは文字列の最後に到達するまでの文字列を数値とするステップと、文字コードおよび前記数値に基づいて、文字列を並べ替えるステップとを有することにより達成される。【選択図】  図４
2005346130.tif 000002
【特許請求の範囲】
【請求項１】
属性の異なる文字が混在している文字列のソート方法において、
ソート対象の文字列の先頭から、文字である場合には１文字を文字コードに変換し、数字の場合には次に文字が出現するまたは文字列の最後に到達するまでの文字列を数値とするステップと、
前記文字コードおよび前記数値に基づいて、前記文字列を並べ替えるステップと
を有することを特徴とするソート方法。
【請求項２】
請求項１に記載のソート方法において、
前記並べ替えるステップは、一方が文字で他方が数値の場合に、数値の方が小さいと判断することを特徴とするソート方法。
【請求項３】
請求項１または２に記載のソート方法において、
前記並べ替えるステップは、空白の場合には数値のゼロとして比較し、ハイフンである場合には前記ハイフンを除いた数値を用いて比較することを特徴とするソート方法。
【請求項４】
コンピュータに、
ソート対象の文字列の先頭から、文字である場合には１文字を文字コードに変換し、数字の場合には次に文字が出現するまたは文字列の最後に到達するまでの文字列を数値とするステップと、
前記文字コードおよび前記数値に基づいて、前記文字列を並べ替えるステップと
を実行させるためのソートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列のソートに関わり、特に数値の含まれる文字列のソート方法およびソートプログラムに関する。
【背景技術】
【０００２】
複数の数値や文字列を、コンピュータを用いて昇順や降順に並べ替える場合には、その処理過程において２つの数値または文字列の大小比較が行われる。数値の場合は、メモリ上での数値の格納方法を表す型を合わせ、一方から他方を減算することで大小比較を行う。文字列の場合は左から１文字づつ計算機上で各文字に割り当てた数値コードを表す文字コードにより大小比較を行う。
【０００３】
例えば、図１に示すように、入力データとして「ＡＡ１０００」、「ＡＡＢ−１０」、「ＡＡ１００Ｒ２」、「ＡＡ  ２００」が、例えば文字列並べ替え装置に入力された場合に、単純に文字列として扱いソートを行うと、「ＡＡ  ２００」、「ＡＡ１０００」、「ＡＡ１００Ｒ２」、「ＡＡＢ−１０」の順に出力される。
【０００４】
さらに、文字列中に数値が含まれる場合、これを文字列として大小比較を行うと、数値部分の桁数が揃っていないと昇順または降順に並べ替えることができない。このため、文字列が{文字列}＋{数値}＋{文字列}＋{数値}＋・・・からなることを前提に、文字列を分解し多次元配列に格納することにより並べ替えを実現している。
【０００５】
例えば、図２に示すように、入力データとして、図１を参照して説明したデータと同様のデータが、例えば多次元分解装置に入力されると、「ＡＡ１０００」は（“ＡＡ”、１０００、“”、０）に多次元分解され、「ＡＡＢ−１０」は（“ＡＡＢ−”、１０、“”、０）に多次元分解され、「ＡＡ１００Ｒ２」は（“ＡＡ”、１００、“Ｒ”、２）に多次元分解され、「ＡＡ  ２００」は（”ＡＡ  “、２００、“”、０）に多次元分解される。
【０００６】
多次元分解された多次元数値／文字列は、例えば、多次元数値／文字列並べ替え装置に入力されると（“ＡＡ”、１００、“Ｒ”、２）、（”ＡＡ  “、２００、”“、０）、（“ＡＡ”、１０００、“”、０）、（“ＡＡＢ−”、１０、“”、０）の順に並べ替えられる。これらの多次元数値／文字列は文字列復元装置に入力され文字列に復元される。その結果、「ＡＡ１００Ｒ２」、「ＡＡ  ２００」、「ＡＡ１０００」、「ＡＡＢ−１０」の順に出力される。
【０００７】
例えば、{英文字}＋{数値}形式の文字列のソートに関して、英文字でデータをグループ分けし、そのグループをソートし、グループ内は数値でソートする方法（例えば、特許文献１参照）、数字を含む文字列のソートに関して、各文字列の数字部を検索し、「数字の桁数」を各数字の前に挿入することにより「数字の桁数＋数字」とし、文字列としてソート後、各文字列から挿入した「数字の桁数」を削除することによりソートする方法（例えば、特許文献２参照）、数字を含む文字列のソートに関して、文字列中の文字の属性でデータを分割し、分割されたデータに対して文字属性に応じたコード変換を行い、このコードを多次元配列に格納し、多次元配列のソート結果に基づき元データをソートする方法（例えば、特許文献３参照）がある。
【特許文献１】特開平１０−３１２２６７号公報
【特許文献２】特開２００４−２１８７９号公報
【特許文献３】特開平８−１６５６２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、上述した背景技術には、以下に示すような問題がある。
【０００９】
配列の次元数、すなわち文字列の書式が事前に判っていなければならず、汎用的な並べ替えを提供することができない問題がある。
【００１０】
また、多次元配列にデータを分割格納するため、メモリを大量に使用する問題がある。
【００１１】
また、ソートの処理回数が多く処理時間が長い問題がある。
【００１２】
そこで、本発明は、かかる事情に鑑み、属性の異なる文字が混在している文字列に対して、並べ替えを行うことができる文字列のソート方法およびソートプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するため、本発明にかかるソート方法は、属性の異なる文字が混在している文字列のソート方法において、ソート対象の文字列の先頭から、文字である場合には１文字を文字コードに変換し、数字の場合には次に文字が出現するまたは文字列の最後に到達するまでの文字列を数値とするステップと、文字コードおよび数値に基づいて、前記文字列を並べ替えるステップとを有する方法である。このようにすることにより、属性の異なる文字が混在している文字列に対して、並べ替えを行うことができる。
【００１４】
さらに、並べ替えるステップは、一方が文字で他方が数値の場合に、数値の方が小さいと判断するようにしてもよい。
【００１５】
さらに、並べ替えるステップは、空白の場合には数値のゼロとして比較し、ハイフンである場合にはハイフンを除いた数値を用いて比較するようにしてもよい。
【００１６】
また、本発明にかかるソートプログラムは、コンピュータに、ソート対象の文字列の先頭から、文字である場合には１文字を文字コードに変換し、数字の場合には次に文字が出現するまたは文字列の最後に到達するまでの文字列を数値とするステップと、文字コードおよび数値に基づいて、文字列を並べ替えるステップとを実行させるものである。
【発明の効果】
【００１７】
本発明の実施例によれば、属性の異なる文字が混在している文字列に対して、並べ替えを行うことができる文字列のソート方法およびソートプログラムを実現できる。
【発明を実施するための最良の形態】
【００１８】
次に、本発明の実施例について図面を参照して説明する。
なお、実施例を説明するための全図において、同一機能を有するものは同一符号を用い、繰り返しの説明は省略する。
【００１９】
初めに、本発明の実施例にかかるソート方法について説明する。
【００２０】
本実施例にかかるソート方法は、複数の属性の異なる文字が混在している文字列を昇順や降順に並べ替えるソート方法において、２つの文字列の大小を、それぞれ左から所定の文字づつ文字コードまたは数値の比較により行う。具体的には、文字である場合には１文字づつ文字コードに変換する。また、数字の場合には次に文字が出現するまたは文字列の最後に到達するまで読み込みを行い、読み込んだ値を数値として扱う。
【００２１】
また、文字コードまたは数値の比較を行う場合には、一方が文字で他方が数値の場合には数値の方が小さいと判断する。また、空白の場合には数値のゼロとして比較する。また、ハイフン（「−」）である場合には数値の負を表す記号としては扱わず、ハイフンを除いた数値を用いて比較する。すなわち、数値は正の数とみなして扱う。
【００２２】
例えば、図３に示すように、入力データとして、数値を含む文字列「ＡＡ１０００」、「ＡＡＢ−１０」、「ＡＡ１００Ｒ２」、「ＡＡ  ２００」が、例えば後述する文字列並べ替え装置に入力された場合、本実施例にかかるソート方法によれば、「ＡＡ１００Ｒ２」、「ＡＡ  ２００」、「ＡＡ１０００」、「ＡＡＢ−１０」の順に出力される。
【００２３】
次に、本実施例にかかるソート方法について、図４を参照して説明する。
【００２４】
ここでは、２つの文字列Ｓ１およびＳ２が、Ｓ１＜Ｓ２であるか否かを判断することにより、大小比較を行う場合について説明する。ここで、Ｓ１、Ｓ２は属性の異なる文字が混在している文字列である。
【００２５】
入力された文字列Ｓ１およびＳ２から文字を取り出す位置を表すｉおよびｊ（ｉ，ｊはｉ＞０、ｊ＞０の整数）の初期化を行う（ステップＳ４０２）。すなわち、ｉ＝１、ｊ＝１とする。
【００２６】
次に、入力された文字列Ｓ１およびＳ２について、例えば左から所定の文字づつ文字コード変換を行う。例えば、文字列Ｓ１およびＳ２のｉ番目およびｊ番目の文字コード変換を行う文字をＦ（Ｓ１、ｉ）およびＦ（Ｓ２、ｊ）とし、文字コード変換後の値をＣ１（Ｃ，Ｐ，ｋ）およびＣ２（Ｃ，Ｐ，ｋ）とする（ステップＳ４０４）。ここで、Ｃは文字コードまたは数値、Ｐは属性、例えば数値であるか文字であるかを表し、ｋ（ｋは、ｋ＞０の整数）は次にコード変換する、すなわち次に文字を取り出す位置を表す。文字列Ｓ１またはＳ２のｉ番目またはｊ番目が文字である場合、１文字づつ文字コード変換を行う。また、文字列Ｓ１またはＳ２のｉ番目またはｊ番目が数字の場合、次に文字が出現するまたは文字列の最後に到達するまで読み込みを行い、読み込んだ値を数値化し、数値として扱う。この場合、空白の場合には数値のゼロとし、ハイフンは文字とする。すなわち数値は正の数として扱う。
【００２７】
次に、コード変換後の文字コードまたは数値が等しいか否かを判断する（ステップＳ４０６）。すなわち、文字コード変換後の値Ｃ１およびＣ２について、Ｃの値が等しいか否か、すなわち、（Ｃ１．Ｃ）＜＞（Ｃ２．Ｃ）であるか否かを判断する。ここで、（Ｃ１．Ｃ）はＣ１の文字コードまたは数値を表し、（Ｃ２．Ｃ）はＣ２の文字コードまたは数値を表す。
【００２８】
文字コードが等しい場合（ステップＳ４０６：ＮＯ）。比較対象の文字は等しいと判断し、次の文字を取り出して比較するため、文字列Ｓ１およびＳ２から文字を取り出す位置をｉおよびｊに代入する（ステップＳ４０８）。すなわち、ｉ＝（Ｃ１．ｋ）；ｊ＝（Ｃ２．ｋ）である。ここで、（Ｃ１．ｋ）はＳ１から次にコード変換する、すなわち、次に文字を取り出す位置を表し、（Ｃ２．ｋ）はＳ２から次にコード変換する、すなわち、次に文字を取り出す位置を表す。その後、ステップＳ４０４に戻り、次の文字または数値について同様の処理を行う。一方、コード変換後の文字コードまたは数値が等しくない場合（ステップＳ４０６：ＹＥＳ）、属性が等しいか否か、すなわち（Ｃ１．Ｐ）＝（Ｃ２．Ｐ）であるか否かを判断する（ステップＳ４１０）。この場合、両方がヌルである場合も含む。ここで、（Ｃ１．Ｐ）はＣ１の属性を表し、（Ｃ２．Ｐ）はＣ２の属性を表す。
【００２９】
属性Ｐが等しい場合（ステップＳ４１０：ＹＥＳ）、さらにコード変換後の文字コードまたは数値の大小比較を行う。すなわちＣ１＜Ｃ２であるか否かの判断を行う（ステップＳ４１２）。
【００３０】
Ｃ１＜Ｃ２である場合（ステップＳ４１２：ＹＥＳ）、Ｓ１＜Ｓ２が真（Ｔｒｕｅ）であると判断する（ステップＳ４１４）。例えば、図５に示すように、Ｓ１が「ＡＡ１００Ｒ２」であり、Ｓ２が「ＡＡ  ２００」である場合、空白はゼロに置き換えられるため「１００」と、「０２００」を数値に変換した「２００」とにより大小比較が行われる。その結果、Ｃ１＜Ｃ２であると判断される。この場合、Ｓ１の「Ｒ」および「２」に対する文字コード変換および数値化、大小比較に関する処理は行われない。一方、Ｃ１＜Ｃ２でない場合（ステップＳ４１２：ＮＯ）、Ｓ１＜Ｓ２が偽（Ｆａｌｓｅ）である判断する（ステップＳ４１６）。
【００３１】
一方、属性が等しくない場合には（ステップＳ４１０：ＮＯ）、さらにＣ１の属性が数値であるか否か、すなわち（Ｃ１．Ｐ）＝数値であるか否かを判断する（ステップＳ４１８）。
【００３２】
Ｃ１が数値である場合（ステップＳ４１８：ＹＥＳ）、Ｓ１＜Ｓ２が真（Ｔｒｕｅ）であると判断する（ステップＳ４２０）。例えば、図６に示すように、Ｓ１が「ＡＡ１０００」であり、Ｓ２が「ＡＡＢ−１０」である場合、「１０００」と「Ｂ」により大小比較が行われ、数値と文字では数値の方が小さいと判断される。その結果、Ｃ１＜Ｃ２であると判断される。この場合、Ｓ２の「−１０」 に対する上述した処理、例えば数値化処理、大小比較に関する処理は行われない。一方、Ｃ１が数値でない場合、例えば文字である場合（ステップＳ４１８：ＮＯ）、Ｓ１＜Ｓ２が偽（Ｆａｌｓｅ）であると判断する（ステップＳ４２２）。
【００３３】
このようにすることにより、任意の書式の文字列に対して、ソートを行うことができるため、書式を統一する必要がなく、汎用的な並べ替え方法として用いることができる。また、文字列中に桁数の揃っていない数値が含まれる場合においても昇順や降順に並べ替えることができる。
【００３４】
また、文字列の先頭から大小を判断できるまでの文字を取り出してコード変換するため、全ての文字または数字を文字コード変換または数値化する必要がない。このため、元データの属性を多次元配列に格納する必要はなく、使用するメモリ容量を抑えることができるだけでなく、ソートの処理回数やコード変換処理回数を抑えることができるため、処理速度を改善できる。
【００３５】
次に、上述したソート方法のステップＳ４０４において行われる文字コード変換方法について、図７を参照して説明する。
【００３６】
ここでは、文字列Ｓを構成するｌ番目（ｌはｌ＞０の整数）の文字または数字を表すＦ（Ｓ、ｌ）の文字コード変換を行う場合について説明する。ここで、Ｓは属性の異なる文字が混在している文字列である。
【００３７】
初めに、入力された文字列Ｓのｌ番目の文字のコード変換後の値または数値をＣ、その属性をＰ、数字文字列をＮとする。すなわち、Ｃ＝Ｓ［ｌ］、Ｐ＝（属性）、Ｎ＝“”（空）に設定する（ステップＳ７０２）。
【００３８】
次に、Ｃが空白であるか否かを判断する（ステップＳ７０４）。
【００３９】
Ｃが空白である場合（ステップＳ７０４：ＹＥＳ）、Ｃをゼロとする（ステップＳ７０６）。この場合、空白であれば全角・半角どちらでもよい。一方、Ｃが空白でない場合（ステップＳ７０４：ＮＯ）、何もしない。
【００４０】
次に、Ｃの文字コード変換を行う（ステップＳ７０８）。例えば、全角英数字は半角英数字に変換し、漢数字およびローマ数字は数字に変換し、小文字は大文字に変換し、文字コード変換を行う。
【００４１】
次に、１を例えば内部カウンタによりカウントアップし、Ｃの属性をＰに設定する（ステップＳ７１０）。その際、ハイフンの属性を文字とするため、数字文字列の先頭にハイフン、すなわちマイナスが入ることはなく、数値は正の数として扱う。
【００４２】
次に、Ｐが数値であるか否か、すなわち、Ｐ＜＞数値であるか否かを判断する（ステップＳ７１２）。Ｐが数値である場合（ステップＳ７１２：ＮＯ）、Ｎに数値Ｃを文字化して付け加え（ステップＳ７１４）、次の文字についてステップＳ７０８からステップＳ７１２の処理を行う。すなわち、ステップＳ７０８からステップＳ７１２の処理は、Ｐが数値である間行われる。ここで、空白の属性を文字とするため、ステップＳ７１４で数字文字列をＮに格納する処理において、数字の右側の空白がステップＳ７０４とステップＳ７０６の処理でゼロに置き換えられても別の数字文字列として扱われる。例えば、図９に示すように、Ｓが「ＡＡ−１０００  ２００−ＢＢ  ＣＣ」である場合、数字文字列として扱われるのは「１０００」と「０２００」と「０」（「−ＢＢ  ＣＣ」の間の空白）になる。
【００４３】
一方、Ｐが数値でない場合（ステップＳ７１２：ＹＥＳ）、さらに、Ｎに何も格納されていない、すなわちＮ＝“”であるか否かを判断する。Ｎに何も格納されていない場合（ステップＳ７１６：ＹＥＳ）、終了する。
【００４４】
一方、Ｎに数字文字列が格納されている場合（ステップＳ７１６：ＮＯ）、格納されている数字文字列を数値化して、その数値をＣとし、属性Ｐを数値とする。
【００４５】
このようにすることにより、英文字については大文字／小文字、数字については半角／全角、数字についてはローマ数字／漢数字などが混在している場合においてもコード変換ができる。
【００４６】
次に、上述したソート方法を処理するプログラムをコンピュータ上で実施する場合の全体の構成について、図８を参照して説明する。
【００４７】
上述したソート方法を処理するプログラムをコンピュータ上で実施することにより文字列並べ替え装置を構成できる。
【００４８】
文字列並べ替え装置は、コンピュータ１０と、文字列の入力を行う入力装置３０とから構成され、コンピュータ１０は、主記憶上で動作するソートプログラム２０を備える。ここで、入力装置３０は、例えばキーボードや磁気テープ装置などであって、データを取り込む装置であれば他のものでもよい。ソートプログラムは、入力装置３０から入力された文字列の並べ替え処理をコンピュータに実行させるソート部２１と、ソート部２１から渡された２つの文字列に対する大小比較処理をコンピュータに実行させる比較部２２と、属性の異なる文字が混在している文字列に対する処理をコンピュータに実行させるコード変換部２３とを備える。
【００４９】
入力装置３０から、属性の異なる文字が混在している文字列が入力されると、ソートプログラム２０は、文字列の並べ替え処理をコンピュータ１０に実行させる。すなわち、ソート部２１は、並べ替えに必要な２つの文字列の大小比較処理を、比較部２２へ比較対象の２つの文字列を引き渡し、比較結果のみ受け取り並べ替える処理をコンピュータ１０に実行させる。比較部２２は、引き渡された２つの文字列の先頭から順にコード変換部２３へ文字列とコード変換対象となる文字の開始位置を引き渡し、２つのコード変換結果を受け取り大小比較結果を出力する処理をコンピュータ１０に実行させる。コード変換部２３は、引き渡された文字列のコード変換対象となる文字の開始位置が文字である場合には１文字を文字コードに変換し、数字の場合には次に文字が出現するまたは文字列の最後に到達するまでの文字列を数値とし、文字コードおよび数値を出力する処理をコンピュータ１０に実行させる。具体的には比較部２２において、一方が文字で他方が数値の場合には数値の方が小さいと判断する。また、空白の場合には数値のゼロとして比較する。また、ハイフンである場合には数値の負を表す記号としては扱わない。すなわち、数値は正の数とみなして扱う。
【００５０】
このようにすることにより、任意の書式の文字列に対して、ソートを行うことができるため、書式を統一する必要がなく、汎用的な装置として用いることができる。このため、文字列の書式が変更になった場合においてもソートプログラムを変更する必要がなく、また、文字列中に桁数の揃っていない数値が含まれる場合においても昇順や降順に並べ替えることができる。
【００５１】
以上、本発明を好ましい実施例について説明したが、本発明は上記の特定の実施例に限定されるものではなく、特許請求の範囲に記載した要旨内において様々な変形・変更が可能である。
【産業上の利用可能性】
【００５２】
本発明は、文字列のソートに適用できる。
【図面の簡単な説明】
【００５３】
【図１】文字列のソートを説明するための説明図である。
【図２】文字列のソートを説明するための説明図である。
【図３】本発明の一実施例にかかるソート方法を説明するための説明図である。
【図４】本発明の一実施例にかかるソート方法を説明するためのフローチャートである。
【図５】本発明の一実施例にかかるソート方法を説明するための説明図である。
【図６】本発明の一実施例にかかるソート方法を説明するための説明図である。
【図７】本発明の一実施例にかかるソート方法を説明するためのフローチャートである。
【図８】ソートプログラムの一実施例を説明するためのブロック図である。
【図９】本発明の一実施例にかかるソート方法を説明するための説明図である。
【符号の説明】
【００５４】
１０  コンピュータ
２０  ソートプログラム
３０  入力装置
【図１】
2005346130.tif 000003
【図２】
2005346130.tif 000004
【図３】
2005346130.tif 000005
【図４】
2005346130.tif 000006
【図５】
2005346130.tif 000007
【図６】
2005346130.tif 000008
【図７】
2005346130.tif 000009
【図８】
2005346130.tif 000010
【図９】
2005346130.tif 000011