(57)【要約】【課題】可逆圧縮技術に於いて、圧縮率を向上させる事を目的とする。非可逆圧縮を適用している圧縮ファイルの場合は、非可逆圧縮の利用量を減らす事と、従来方式の非可逆圧縮よりも、圧縮率を向上させる事を目的とする。【解決手段】圧縮対象ファイルを読み込んだ配列のデーターの位置を示す番号が奇数の場合と偶数の場合とで二つに分けた配列を作成し、偶数の位置のデーターだけの配列にランレングス圧縮してファイルを圧縮する事で高圧縮率を得る方法を提供する。【選択図】    図１
2013135344.tif 000002
【特許請求の範囲】
【請求項１】
以下に、配列や変数などを作成すると記述しているが配列や変数などが作成される場所は、コンピューター本体の内部にある本体メモリーに作成される事とし、1byteの型で全ての変数や配列を作成する事とし、以下に、配列の最初の位置から代入する度に1byte分づつ代入する位置をずらして、データーを配列に代入していく場合は、配列の最初の位置に代入する場合であっても、配列の末尾に代入すると記述している場合があるとし、以下の分岐処理に於いて分岐条件に該当しない場合どうするかを記述していない場合があるが、分岐条件に該当しない場合どうするかを記述していない場合は、何も処理を行わないという事とし、コンピューターで普通に使われているテキスト文字（日本国では、ASCIIコード２文字で１文字を表す全角文字とASCIIコード１文字で表す半角文字のこと）をテキスト文字と呼んだり、テキスト文字の事を文字コードと呼んだりする事があるとし、1byteづつデーターを配列に代入していく場合に於いて、配列に代入するデーターの順番について断り書きが無い場合は、取得した元のデーター（作成したデーターや取得したデーターや読み込んだデーターや元の配列に代入されていたデーターなど）の順番通りに1byteづつ配列に代入する事とし、以下に、配列の型とは、配列に代入する事ができる１個のデーターが使用するコンピューターに在る本体メモリーで使用するbit数または、byte数を意味するものであり、変数にも同じく型があるが、変数の型も配列の型と全く同じであるとし、配列のサイズとは、配列に代入する事が出来るデーターの数の事を言う事とし、以下に、配列のインデックスとは、配列に代入されるデーターの位置を示す番号の事を言うという事とし、配列のデーターを代入できる領域の最初の位置に付けられるインデックスは、0番となり、順次１づつ番号が増えた数値が配列のデーターを代入できる各々の配列の位置に付されるものとし、以下に、「アイウエオ」と横一行に書かれたテキストファイルの事を圧縮対象テストファイルと呼ぶ事とし、以下のプログラムによる処理で圧縮対象テストファイルを使用して圧縮ファイルを作成するが、作成した圧縮ファイルを圧縮する前の元の状態に戻す為の処理を行う時に必要となる規則であり、この作成する圧縮ファイルに記録するデーターの内容と記録する順番を予め決めておく規則の事を圧縮記録規則と仮称し、圧縮ファイルの最初のデーターは、基準数を数値として1byte分で記録する事とし、圧縮ファイルの二番目のデーターは、基準として残した文字列を代入する事をとし、圧縮ファイルの三番目のデーターは、何と言う文字コードを圧縮したかを1byte分で記録する事とし、最後のデーターは、圧縮した文字コードが何文字連なっていたかという記録の文字数を1byte分の数値として記録するという事を規則とする事を圧縮記録規則とし、圧縮対象テストファイルをバイナリー形式で読み込んだデーターを全て代入できるサイズで配列を作成し、作成した配列を仮称A配列と仮称し、A配列に圧縮対象テストファイルから読み込んだデーターをA配列の最初の位置から代入する度に1byteづつ代入する位置をずらして、圧縮対象テストファイルから読み込んだデーターを1byteづつ代入し、A配列の配列サイズを2で割ったサイズで配列を２個作成し、���一配列と第二配列と仮称し、A配列の最初から最後まで繰り返し処理を行うが、この繰り返し処理をセパレート繰り返し処理と仮称し、セパレート繰り返し処理では、A配列のデーターが代入されている位置を示すインデックスを2で割った余りがある場合とA配列のデーターが代入されている位置を示すインデックスを2で割った余りがない場合とに分岐し、この分岐を分岐１と仮称し、この分岐１のA配列のデーターが代入されている位置を示すインデックスを2で割った余りがない場合は、A配列に代入されたデーターが代入されている位置を示すインデックスを使用してA配列に代入されたデーターを取得して、取得したデーターを第一配列の末尾に代入し、この分岐１のA配列のデーターが代入されている位置を示すインデックスを2で割った余りがある場合は、A配列に代入されたデーターが代入されている位置を示すインデックスを使用してA配列に代入されたデーターを取得して、取得したデーターを第二配列の末尾に代入し、これで分岐１を終了し、A配列に代入されたデーターを全て処理し終わったら、セパレート繰り返し処理を終了し、1byteの型で配列のサイズを2とした配列を作成し、この配列をランレングス圧縮配列と仮称し、ここからランレングス圧縮配列にデーターを代入する処理工程を行う事とし、ランレングス圧縮配列のデーターを代入する事ができる領域の最初の位置に代入するデーターは、何と言う文字コードを圧縮したかという文字コードを代入する事とし、ランレングス圧縮配列のデーターを代入する事ができる領域の最後の位置に代入するデーターは、ランレングス圧縮配列のデーターを代入する事ができる領域の最初の位置に代入された文字コードが何文字連なっていたかという記録をする為の文字数を代入する事とし、第一配列の最初の位置に代入されたデーターを取得してランレングス圧縮配列の最初の位置に代入し、1byteの型で変数を作成して、この変数をカウント変数と仮称し、カウント変数に初期値として0を代入し、第一配列に代入された全てのデーターに対して以下の繰り返し処理を行うが、この繰り返し処理を文字コードランレングス処理と仮称し、文字コードランレングス処理は、ランレングス圧縮配列の最初の位置に代入されたデーターと第一配列の最初の位置から最終までの位置に代入された全てのデーターを比較検査する事とし、比較検査している第一配列に代入されたデーターの位置を注目位置と仮称し、文字コードランレングス処理では、ランレングス圧縮配列の最初の位置に代入されたデーターと第一配列の注目位置にあるデーターが同じデーターであったら、カウント変数に代入された数値に1を加えた数値を算出してカウント変数に上書き処理をして、第一配列の注目位置を一つ進める事で第一配列に代入された次の位置のデーターと比較検査を行う事とし、ランレングス圧縮配列の最初の位置に代入されたデーターと第一配列の注目位置にあるデーターが違うデーターであったら、何も行わないで、第一配列の注目位置を一つ進める事で第一配列に代入された次の位置のデーターと比較検査を行う事とし、注目位置を第一配列の最初の位置から最終までの位置にずらす事で第一配列に代入された全てのデーターに対してランレングス圧縮配列の最初の位置に代入された���ーターと比較検査する処理を行う事とし、第一配列に代入された全てのデーターとランレングス圧縮配列の最初の位置に代入されたデーターを比較検査し終わったら、文字コードランレングス処理を終了し、ランレングス圧縮配列の末尾にカウント変数に代入された数値を代入し、ここまででランレングス圧縮配列にデーターを代入する処理工程を終了し、第二配列の配列のサイズとランレングス圧縮配列の配列のサイズとを加算した数値に1を加えた数値を配列のサイズとして配列を作成し、この配列を圧縮配列と仮称し、作成した圧縮配列にデーターを代入する処理を行う事とし、1byteの型で変数を作成し、この変数をヘッダー変数と仮称し、このヘッダー変数に第二配列の配列のサイズを代入し、圧縮配列の最初の位置にヘッダー変数のデーターを代入し、圧縮配列の末尾に、第二配列に代入された最初の位置から最後の位置までの全てのデーターを代入する度に1byte分づつ代入する位置をずらして1byteづつ代入し、圧縮配列の末尾に、ランレングス圧縮配列の最初から最後までの全てのデーターを代入する度に1byte分づつ代入する位置をずらして1byteづつ代入し、ここまでで、圧縮配列にデーターを代入する処理を終了し、圧縮配列の最初から最後までの全てのデーターをバイナリー形式で1byteづつファイルの末尾に付け加えて記録保存する事で圧縮ファイルを作成するという処理をコンピューターに実行させるプログラムを記録したコンピューターが読み取る事が可能な記録媒体
【請求項２】
以下に、配列や変数などを作成すると記述しているが配列や変数などが作成される場所は、コンピューター本体の内部にある本体メモリーに作成される事とし、1byteの型で全ての変数や配列を作成する事とし、以下に、配列の最初の位置から代入する度に1byte分づつ代入する位置をずらして、データーを配列に代入していく場合は、配列の最初の位置に代入する場合であっても、配列の末尾に代入すると記述している場合があるとし、以下の分岐処理に於いて分岐条件に該当しない場合どうするかを記述していない場合があるが、分岐条件に該当しない場合どうするかを記述していない場合は、何も処理を行わないという事とし、コンピューターで普通に使われているテキスト文字（日本国では、ASCIIコード２文字で１文字を表す全角文字とASCIIコード１文字で表す半角文字のこと）をテキスト文字と呼んだり、テキスト文字の事を文字コードと呼んだりする事があるとし、1byteづつデーターを配列に代入していく場合に於いて、配列に代入するデーターの順番について断り書きが無い場合は、取得した元のデーター（作成したデーターや取得したデーターや読み込んだデーターや元の配列に代入されていたデーターなど）の順番通りに1byteづつ配列に代入する事とし、以下に、配列の型とは、配列に代入する事ができる１個のデーターが使用するコンピューターに在る本体メモリーで使用するbit数または、byte数を意味するものであり、変数にも同じく型があるが、変数の型も配列の型と全く同じであるとし、配列のサイズとは、配列に代入する事が出来るデーターの数の事を言う事とし、以下に、配列のインデックスとは、配列に代入されるデーターの位置を示す番号の事を言うという事とし、配列のデーターを代入できる領域の最初の位置に付けられるインデックスは、0番となり、順次１づつ番号が増えた数値が配列のデーターを代入できる各々の配列の位置に付されるものとし、以下に、「アイウエオ」と横一行に書かれたテキストファイルの事を圧縮対象テストファイルと呼ぶ事とし、〔請求項１〕で作成した圧縮ファイルを圧縮する前の元の状態に戻す処理を行う事でファイルを作成するが、作成するファイルを復元ファイルと仮称し、〔請求項１〕の圧縮記録規則を使用して復元ファイルを作成する事とし、〔請求項１〕で作成した圧縮ファイルのサイズを取得し、取得した圧縮ファイルのサイズで配列を作成し、作成した配列をAd配列と仮称し、〔請求項１〕で作成した圧縮ファイルをバイナリー形式で1byteづつ全て読み込んで、Ad配列の最初の位置から代入する度に1byte分づつ代入する位置をずらして、圧縮ファイルからバイナリー形式で1byteづつ読み込んだデーターを1byteづつAd配列に代入し、Ad配列の最初の位置に代入されているデーターを取得して、取得したデーターを基準データー数と仮称し、基準データー数を配列のサイズとして配列を作成し、この配列を第二配列と仮称し、ここから第二配列にデーターを代入する処理を行う事とし、第二配列の最初の位置から最後の位置まで代入する度に1byteづつ代入する位置をずらして、Ad配列の二番目以降に代入されているデーターを1byteづつ第二配列に代入し、第二配列の最後の位置まで代入し終わったら第二配列にデーターを代入する処理を終了し、Ad配列の最後の位置���代入されている数値を取得して、その取得した数値を配列のサイズとした配列を作成し、この作成した配列を第一配列と仮称し、ここから第一配列にデーターを代入する処理を行う事とし、Ad配列の最後の位置よりも1byte手前の位置に代入されている数値を取得して、その取得した数値を第一配列の最初の位置から最後の位置までの全ての位置に数値を代入し、ここまでで第一配列にデーターを代入する処理を終了し、第一配列の配列のサイズと第二配列の配列のサイズを取得して、取得した両方の数値を加算した数値を配列のサイズとした配列を作成し、作成した配列を復号結果配列と仮称し、1byteの型で変数を二個作成して、この作成した二個の変数を各々回数変数１、回数変数２と仮称し、回数変数１に初期値として0という数値を代入し、回数変数２に初期値として0という数値を代入し、1byteの型で変数を作成し、作成した変数を奇遇数と仮称し、復号結果配列に全てのデーターを代入する為に以下の繰り返し処理を行うが、この繰り返し処理を復号結果繰り返し処理と仮称し、復号結果繰り返し処理では、復号結果配列の最初の位置を示すインデックスから最後の位置を示すインデックスまでの全てのインデックスを一つづつ取得して、取得したインデックスを遇奇数に上書き処理(最初だけは遇奇数に代入するだけで上書きしない)で代入し、遇奇数に数値が代入される事によって遇奇数に代入された数値が変わる度に(最初に遇奇数に代入された数値も含めて)以下の処理を行う事とし、遇奇数に代入された数値を2で割った数値が0の場合(偶数の場合)と0ではない場合(奇数の場合)とに分岐処理し、この分岐を分岐２と仮称し、この分岐２で、遇奇数に代入された数値を2で割った数値が0の場合(偶数の場合)は、回数変数１に代入された数値を取得して、取得した数値を第一配列のインデックスとして使用して第一配列に代入されているデーターを取得して、遇奇数に代入された数値を復号結果配列のインデックスとして使用して復号結果配列のインデックスの位置に代入し、次いで、回数変数１に代入された数値に1を加算し、次のインデックスの数値を取得して遇奇数に上書き処理で代入し、この分岐２で、遇奇数に代入された数値を2で割った数値が0ではない場合(奇数の場合)は、回数変数２に代入された数値を取得して、取得した数値を第二配列のインデックスとして使用して第二配列に代入されているデーターを取得して、遇奇数に代入された数値を復号結果配列のインデックスとして使用して復号結果配列のインデックスの位置に代入し、次いで、回数変数２に代入された数値に1を加算し、次のインデックスの数値を取得して遇奇数に上書き処理で代入し、ここまでで分岐２を終了し、この処理を復号結果配列に付けられた全てのインデックスに対して処理を行い終えたら、復号結果繰り返し処理を終了する。この処理を全ての復号結果配列のインデックスに対して処理を行い終えたら、復号結果繰り返し処理を終了し、復号結果配列に代入されたの最初から最後までの全てのデーターをバイナリー形式で1byteづつファイルの末尾に付け加えて記録保存する事で復元ファイルを作成するという処理をコンピューターに実行させるプログラムを記録したコンピューターが読み取る事が可能な記録媒体
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピューターで使われているファイルの圧縮技術に関する
【背景技術】
【０００２】
圧縮技術に関する文献としては、〔非特許文献１〕がある。
【非特許文献１】奥村晴彦・山崎敏  著  LHAとZIP  圧縮アルゴリズム×プログラミング入門  ソフトバンク  パブリッシング株式会社  2003/12/6 初版
【非特許文献２】亀山渉・金子格・渡辺裕  著  そこが知りたい最新技術  オーディオ・ビデオ圧縮入門  株式会社  インプレスR&D  2007/4/1 初版第1刷発行
【０００３】
この〔非特許文献１〕は、LZHとZIP形式の圧縮技術について詳しく記述しているが、本発明の２分割処理圧縮プログラムを記録した記録媒体の様に、圧縮を行うファイルを２分割する処理工程は記載されていない。また、〔非特許文献２〕は、非加逆圧縮技術を網羅した書籍ですが、基本的な圧縮技術も記載されている文献である。しかしながら、記述された基本的な圧縮技術の中にも、非加逆圧縮技術の記載部分にも本発明の２分割処理圧縮プログラムを記録した記録媒体の様に、圧縮を行うファイルを２分割する処理工程は記載されていない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
可逆圧縮技術及び非可逆圧縮技術ともに、圧縮率を向上させる事を目的とする。非可逆圧縮技術の場合は、非可逆圧縮技術の利用量を軽減させる事で、高鮮明な画像と高音性の音を提供する事を目的とする。
【課題を解決するための手段】
【０００５】
本発明は、２分割処理圧縮プログラムを記録した記録媒体という題名であるが、２分割処理圧縮プログラムを記録したコンピューターが読み取る事ができる記録媒体の事である。また、コンピューターで普通に使われているテキスト文字（日本国では、ASCIIコード２文字で１文字を表す全角文字とASCIIコード１文字で表す半角文字のこと）を、テキスト文字と略して記述する事とする。また、テキスト文字の事を文字コードという事がある。また、コンピューターで普通に使われている機械語を機械語と略して記述する事とする。コンピューターで普通に使われている機械語とは、コンピューターに搭載されているCPUと呼ばれる中央演算処理装置が処理を予定している命令文の事を言う。また、機械語と呼ばれる数値には、BCD数値と呼ばれる4bitの数値があるが、この4bitのBCD数値を元に拡張されて作られたEBCDICと一般的に呼ばれる文字コードがある。このEBCDICと一般的に呼ばれる文字コードの事をこの文献でもEBCDICと呼ぶ。
【０００６】
また、配列とは、データーを１個から複数のデーターを代入する事が出来るものを言い、配列のサイズとは、配列に代入する事が出来るデーターの数の事を言う。配列のサイズの事を配列サイズと言ったりする事がある。配列に代入したデーターの事を配列要素または、配列の要素と呼び、配列要素または、配列の要素の合計数を配列要素数または、配列の要素数と呼ぶ事とする。また、配列のサイズの事を配列サイズと呼ぶ事がある。配列の型とは、配列に代入する事ができる１個のデーターが使用するコンピューターに在る本体メモリーで使用するbit数または、byte数を意味するものである。この型は、配列を作成する場合に指定するものであり、作成する配列のデーターを代入する事ができる領域の全てに適用されるものである。前述の「領域の全てに適用されるものである」という意味は、型の違うデーターを配列のデーターを代入する事ができる領域に混在させることが出来ないという事である。変数にも配列と同じく型が存在し、変数の型の意味は、配列の型の場合と全く同じである。また、配列のインデックスとは、配列の添字または、配列番号などとも呼ばれる事があるものである。以降、配列のインデックスを配列の添字または、配列番号と呼ぶ事がある。配列を作成する時点で配列のインデックスを何番から作成するという具合に配列のインデックスを指定せずに配列を作成すると通常、配列のデーターを代入できる領域の最初の位置に付けられるインデックスは０番となり順次１づつ番号が増えた数値が配列のデーターを代入できる各々の配列の位置にコンパイラによって自動的に付けられるものである。つまり、言い換えると配列のインデックスとは、配列に代入されるデーターの位置を示す番号の事を言うという事になる。これによって、プログラマーは、配列のインデックスを指定する事で簡便に配列に代入されたデーターの位置を指定する事ができる様にしているものである。インデックスを取得する場合、数値として取得される。本発明では、1byteの型で全ての変数や配列を作成する事とする。そして、1byteの型で作成された変数や配列にインデックスを代入する事とした。また、配列のデーターを代入する事ができる領域の最初の位置という表現を配列の最初の位置という様に略した表現を行う場合がある。また、配列のデーターを代入する事ができる領域の最後の位置とい表現を配列の最後の位置という様に略した表現を行う場合がある。
【０００７】
バイナリー形式でファイルを読み込むという場合は、1byteづつASCIIコードとして配列に読み込む事を言い、テキスト形式でファイルを読み込むという場合は、テキスト文字一文字分づつ読み込む場合を言う。テキスト形式でファイルを読み込むという場合、半角文字は、1byteとなるが、通常、処理速度の関係上から半角文字の場合であっても、2byteづつ読み込むものである。従って、テキスト形式でファイルを読み込む場合は、2byteづつ読み込む事になる。以下に、配列の最初の位置から代入する度に代入する位置を一つづつずらして、一つづつデーターを配列に代入するという具合に一つづつという表現で説明している場合があるが、正確には、上記の様に、バイナリー形式でファイルを読み込んでいる場合は、1byteづつとし、テキスト形式でファイルを読み込んでいる場合は、2byteづつとする。また、ファイルを作成する時も形式指定がある。すなわち、バイナリー形式でファイルに記録して保存する場合とテキスト形式でファイルに記録して保存する場合である。バイナリー形式でファイルに記録して保存する場合に使う表現のデーター一つづつは、1byteづつとなる。テキスト形式でファイルに記録して保存する場合に使う表現のデーター一つづつは、2byteづつとなる。但し、配列や変数に4bitづつデーターを代入している場合もある。この配列や変数に4bitづつデーターを代入している場合は、データーの一つづつ分とは、4bitづつとなる。
【０００８】
日本語のかたかなで「アイウエオ」という文字列が書かれたファイルを想定してみた場合、このファイルの場合は、普通の圧縮工程では、一切圧縮ができないファイルであるとなってしまう。ランレングス圧縮とは、「アアアアア」と同じ文字が続いている場合「ア」が５文字と表現する事で短く表現する。この短く表現するというのが圧縮方法なのである。また、辞書圧縮というものがある。既に出現した文字列が二回目に出現した場合に何文字前の何文字と同じとする事で短く表現する方法である。つまり、「公園で遊ぼうよ」という言葉が二回出現するファイルの場合、二回目に出現した時に、例えば１０文字前の７文字と同じとするのである。記録内容としては、10と7という数値２byteで表現できるというものである。従って、「アイウエオ」という文字列が記録されたファイルに対しては辞書圧縮も出来ない事になる。全く同じ文字列が無いからである。スライド辞書圧縮とは、辞書圧縮の新型であり、基本的には、辞書圧縮と同じである。この様に従来からの圧縮技術では全く圧縮出来ない文字列があるのである。しかし、以下の様に文字を文字コードの特性を利用して２分割すると圧縮する事が可能になる。日本語をコンピューター上で、テキストにすると、文字コードでファイルに記述されるようになっている。日本語のかたかなで「アイウエオ」という文字列を文字コードにすると、以下の様になる。
131
65
131
67
131
69
131
71
131
73
必ず、131という文字コードが互い違いに記述されるのである。従って、131をまとめてしまえば、単純計算で50%の圧縮率が得られるという事になるのである。和文の文章の場合は、殆どの場合がこの様な文字コードの組み合わせになりので、その為、かなりの高圧縮率を期待できるのである。そこで、圧縮前の処理として１文字目だけのデーターを代入した配列と２文字目だけのデーターを代入した配列を作成して、その配列に代入されたデーターが１文字目だけにまとめられた方の配列に対してランレングス圧縮を行う事でファイルを圧縮するプログラムを提供する事で圧縮率の向上を図ったプログラムを提供する事とした。本発明のASCIIコードを使用した圧縮を行う圧縮工程をテキストレベルの圧縮と呼ぶ事がある。また、本発明の技術で圧縮したファイルを復号する復号工程をテスキトレベルの復号と呼ぶ事がある。
【０００９】
ファイルをバイナリー形式で読み込んだデーター全てを代入できるサイズで配列を作成して、この配列をA配列と呼ぶ事とする。ファイルをバイナリー形式で1byteづつ読み込んで作成したA配列の最初の位置から代入する度に1byte分づつ代入する位置をずらして、1byteづつデーターをA配列に代入する。二つの配列を作成して、各々の配列を第一配列と第二配列と呼ぶ事とする。第一配列に１文字目（A配列の偶数のインデックスに代入されたデーター）だけのデーターを第一配列の最初の位置から代入する度に1byteづつ代入する位置をずらして、第一配列に代入し、第二配列に２文字目（A配列の奇数のインデックスに代入されたデーター）だけのデーターを第二配列の最初の位置から代入する度に1byteづつ代入する位置をずらして、第二配列に代入する事で同じ数値を並べた配列が第一配列と第二配列のどちらかに作成する事ができる事になる。
【００１０】
ASCIIコードを使用していない他のコンピューターでも本発明の２分割処理圧縮プログラムを記録した記録媒体と同じ事が出来ると考えられる。第一の方法として、一定のbit数で１文字の数値を表し、２文字の数値で１文字の文字を表す方式のコードを使用している場合、どちらか一方の１文字の数値を基準に分類する事ができる様な文字コードの場合(ASCIIコード２文字で１文字を表す文字と酷似している場合という意味である)は、全く同じように１文字目（配列の偶数のインデックスに代入されたデーター）と２文字目（配列の奇数のインデックスに代入されたデーター）とで二つに分割する事ができると考えられる。第二の方法として、ASCIIコードを使用していない他のコンピューターでも、分割する為の分割用特殊文字コードを作成する事で本発明のソフトウェアと同じ事を行う事ができると考えている。この場合は、分割する為の分割用特殊文字コードをASCIIコードと同じ様なものにし、ASCIIコードを使用していない他のコンピューターの文字コードを分割する為の分割用特殊文字コードに変換する事で実現する事が可能になるはずである。ASCIIコードを使用していない他のコンピューターで本発明のテキストレベルの圧縮を行う、第一の方法と第二の方法の両方とも本発明の２分割処理圧縮プログラムを記録した記録媒体である事を明言する。また、第二の方法と同じ様な方法であるが、特殊な文字コードを作成する事などで暗号化を行うという方法を使う事によって、ASCIIコードを使用しているコンピューターとASCIIコードを使用していないコンピューターの両方で高効率な圧縮が可能になる方法が考えられると思われるが、この場合も本発明の２分割処理圧縮プログラムを記録した記録媒体であると明言する。特殊な文字コードを作成する事などで暗号化を行うという方法で高効率な圧縮を行うとは、どういうものかを説明する。これを説明するに当たって、２進数という数値を9bitで表現できる数値の全て(２進数で000000000から111111111までの数値、１０進数で0から511までの数値)を使用した文字コードを作成した場合で説明する事とする。作成した文字コードを二つ組み合わせる事で、左側部分の9bit(偶数部分)と右側部分の9bit(奇数部分)のそれぞれで、同じコードが連続して出現する確率を上昇させるという方法が考えられるのである。ASCIIコードでは、8bitで表現できる２進数の全てを使用している。(２進数で00000000から11111111までの数値、１０進数で0から255までの数値)従って、8bitの２進数の組み合わせで暗号化する為の文字コードを表現できないので、説明では、9bitの２進数を全て使った暗号化を使用した。しかし、圧縮ファイルを作るという意味では、多少、問題が残るかもしれない。なぜなら、ASCIIコードは、二文字分で16bitであるが、9bitを一文字として二文字分だと、18bitになる為、元の文字コードのbit数よりも増えてしまうからである。研究の余地が残っている課題であるが、それでも、偶数部分と奇数部分に同じ文字コードが連続する確率は、二倍に増えるのである。研究の余地が残っている課題を記述すると以下の様な内容である。16bitで表現できる２進数は、１０進数で0から65535である。16bitで表現できる数値を一文字として二文字を使用して組み合わせで一文字を表現するという事は、日本語で書かれたテキストファイルを圧縮するという場合に限って言うならば、意味が無い。何故なら、65535文字も日本語では使用していないから、偶数部分か奇数部分の片一方にだけランレングス圧縮をする事が出するだけのものになってしまい圧縮率が最大でも50%止まりになるからである。圧縮率が50%だと、元々ASCIIコードは、一文字8bitで二文字使用して一文字を表した場合、16bitであるから、16bitで一文字として二文字を使用して一文字を表す文字コードだと、元々のASCIIコードで使用しているbit数にしかならないから、圧縮失敗となってしまうのである。だから、意味が無いのである。しかし、ランレングス圧縮を行わなかったもう片一方には、辞書圧縮などの方法で圧縮する事は可能である。但し、中国語などの様な文字数の多い言語の場合は、意味があるかもしれない。16bitで意味が無いのであるならば、15bitで表現できる２進数の場合は、どうであろうかと考えてしまう。15bitで表現できる２進数は、１０進数で0から32767までの数値である。14bitで表現できる２進数は、１０進数で0から16383までの数値である。13bitで表現できる２進数は、１０進数で0から8191までの数値である。12bitで表現できる２進数は、１０進数で0から4095までの数値である。11bitで表現できる２進数は、１０進数で0から2047までの数値である。10bitで表現できる２進数は、１０進数で0から1023までの数値である。これらの一文字を表すbit数を変化させた文字コードの内で、どの文字コードが最高の圧縮率を生み出すのかという問題と、頻繁に使われる文字の数に応じて文字コードを調整して使用するとか、圧縮対象のファイルに出現する文字種全ての数に対して最高の圧縮率が得られる様に文字コードを調整する方法等いろいろ考えられる。これらのいろいろな方法で最高の圧縮率を得られる暗号化を行う文字コード何bitの２進数の組み合わせなのかという問題である。これらの全ての方法で研究余地のある暗号化の為の文字コード表の作成であるが、これらの暗号化する為の文字コード表を使用した圧縮方法とその圧縮方法で作成した圧縮ファイルを復元する復号方法の両方の方法とも本発明の２分割処理圧縮プログラムを記録した記録媒体であると明言する。また、EBCDICに似た特殊な4bitの２進数を２個組み合わせる事でASCIIコードの8bitで出来た一文字分を表す数値がある。この特殊な4bitの２進数を使用しても同じ様な処理を行う事が可能であると考えられる。この特殊な4bitの２進数を使用して同じ様な処理を行っても本発明の２分割処理圧縮プログラムを記録した記録媒体である事を明言する。段落〔００１１〕に前述のEBCDICに似た特殊な4bitの２進数を二つ組み合わせてASCIIコードを表す数値を表記する。この数値は、MicroSoft株式会社のVisual Stadio2005 C#というコンパイラを使用した場合、このVisual
Stadio2005 C#というコンパイラには、BitArrayと呼ばれるプログラムが用意されていて、このBitArrayプログラムを使用すると1bitづつデーターを処理する事ができる様になっている。つまり、言い換えると、データーを1bitづつ処理する場合に使用するプログラムがBitArrayと呼ばれているプログラムなのである。このBitArrayというプログラムをASCIIコードで使う場合、まず、ASCIIコードを1byteづつ配列に代入しする。必ず1byteづつ配列に代入しておかなければBitArrayプログラムを使用する事ができない。配列に代入したASCIIコードの数値をBitArrayプログラムで処理して1bitづつ取得すると、trueとfalseという特殊な形式で取得される。Visual
Stadio2005 C#の使用説明書によると、得られたtrueは、ONで、falseは、0FFとされている。取得されたtrueとfalseで表現されたデーターを4bit分づつ0と1という数値で表現した２進数の形式の変換させると、段落〔００１１〕の特殊な4bitの数値が取得されるものである。取得された特殊な4bitの数値は、完全に逆順の２進数であるが、正順の２進数の組み合わせでも本発明の２分割処理圧縮プログラムを記録した記録媒体である事を明言する。また、段落〔００１１〕の二つの特殊な4bitの数値は、スペースで区切っているが、スペースで区切った左側の４bitと右側の４bitを入れ替えたものを使用したものでも本発明の２分割処理圧縮プログラムを記録した記録媒体である事を明言する。
【００１１】
0000 0000  は、ASCIIコードの0である。
1000 0000  は、ASCIIコードの1である。
0100 0000  は、ASCIIコードの2である。
1100 0000  は、ASCIIコードの3である。
0010 0000  は、ASCIIコードの4である。
1010 0000  は、ASCIIコードの5である。
0110 0000  は、ASCIIコードの6である。
1110 0000  は、ASCIIコードの7である。
0001 0000  は、ASCIIコードの8である。
1001 0000  は、ASCIIコードの9である。
0101 0000  は、ASCIIコードの10である。
1101 0000  は、ASCIIコードの11である。
0011 0000  は、ASCIIコードの12である。
1011 0000  は、ASCIIコードの13である。
0111 0000  は、ASCIIコードの14である。
1111 0000  は、ASCIIコードの15である。
0000 1000  は、ASCIIコードの16である。
1000 1000  は、ASCIIコードの17である。
0100 1000  は、ASCIIコードの18である。
1100 1000  は、ASCIIコードの19である。
0010 1000  は、ASCIIコードの20である。
1010 1000  は、ASCIIコードの21である。
0110 1000  は、ASCIIコードの22である。
1110 1000  は、ASCIIコードの23である。
0001 1000  は、ASCIIコードの24である。
1001 1000  は、ASCIIコードの25である。
0101 1000  は、ASCIIコードの26である。
1101 1000  は、ASCIIコードの27である。
0011 1000  は、ASCIIコードの28である。
1011 1000  は、ASCIIコードの29である。
0111 1000  は、ASCIIコードの30である。
1111 1000  は、ASCIIコードの31である。
0000 0100  は、ASCIIコードの32である。
1000 0100  は、ASCIIコードの33である。
0100 0100  は、ASCIIコードの34である。
1100 0100  は、ASCIIコードの35である。
0010 0100  は、ASCIIコードの36である。
1010 0100  は、ASCIIコードの37である。
0110 0100  は、ASCIIコードの38である。
1110 0100  は、ASCIIコードの39である。
0001 0100  は、ASCIIコードの40である。
1001 0100  は、ASCIIコードの41である。
0101 0100  は、ASCIIコードの42である。
1101 0100  は、ASCIIコードの43である。
0011 0100  は、ASCIIコードの44である。
1011 0100  は、ASCIIコードの45である。
0111 0100  は、ASCIIコードの46である。
1111 0100  は、ASCIIコードの47である。
0000 1100  は、ASCIIコードの48である。
1000 1100  は、ASCIIコードの49である。
0100 1100  は、ASCIIコードの50である。
1100 1100  は、ASCIIコードの51である。
0010 1100  は、ASCIIコードの52である。
1010 1100  は、ASCIIコードの53である。
0110 1100  は、ASCIIコードの54である。
1110 1100  は、ASCIIコードの55である。
0001 1100  は、ASCIIコードの56である。
1001 1100  は、ASCIIコードの57である。
0101 1100  は、ASCIIコードの58である。
1101 1100  は、ASCIIコードの59である。
0011 1100  は、ASCIIコードの60である。
1011 1100  は、ASCIIコードの61である。
0111 1100  は、ASCIIコードの62である。
1111 1100  は、ASCIIコードの63である。
0000 0010  は、ASCIIコードの64である。
1000 0010  は、ASCIIコードの65である。
0100 0010  は、ASCIIコードの66である。
1100 0010  は、ASCIIコードの67である。
0010 0010  は、ASCIIコードの68である。
1010 0010  は、ASCIIコードの69である。
0110 0010  は、ASCIIコードの70である。
1110 0010  は、ASCIIコードの71である。
0001 0010  は、ASCIIコードの72である。
1001 0010  は、ASCIIコードの73である。
0101 0010  は、ASCIIコードの74である。
1101 0010  は、ASCIIコードの75である。
0011 0010  は、ASCIIコードの76である。
1011 0010  は、ASCIIコードの77である。
0111 0010  は、ASCIIコードの78である。
1111 0010  は、ASCIIコードの79である。
0000 1010  は、ASCIIコードの80である。
1000 1010  は、ASCIIコードの81である。
0100 1010  は、ASCIIコードの82である。
1100 1010  は、ASCIIコードの83である。
0010 1010  は、ASCIIコードの84である。
1010 1010  は、ASCIIコードの85である。
0110 1010  は、ASCIIコードの86である。
1110 1010  は、ASCIIコードの87である。
0001 1010  は、ASCIIコードの88である。
1001 1010  は、ASCIIコードの89である。
0101 1010  は、ASCIIコードの90である。
1101 1010  は、ASCIIコードの91である。
0011 1010  は、ASCIIコードの92である。
1011 1010  は、ASCIIコードの93である。
0111 1010  は、ASCIIコードの94である。
1111 1010  は、ASCIIコードの95である。
0000 0110  は、ASCIIコードの96である。
1000 0110  は、ASCIIコードの97である。
0100 0110  は、ASCIIコードの98である。
1100 0110  は、ASCIIコードの99である。
0010 0110  は、ASCIIコードの100である。
1010 0110  は、ASCIIコードの101である。
0110 0110  は、ASCIIコードの102である。
1110 0110  は、ASCIIコードの103である。
0001 0110  は、ASCIIコードの104である。
1001 0110  は、ASCIIコードの105である。
0101 0110  は、ASCIIコードの106である。
1101 0110  は、ASCIIコードの107である。
0011 0110  は、ASCIIコードの108である。
1011 0110  は、ASCIIコードの109である。
0111 0110  は、ASCIIコードの110である。
1111 0110  は、ASCIIコードの111である。
0000 1110  は、ASCIIコードの112である。
1000 1110  は、ASCIIコードの113である。
0100 1110  は、ASCIIコードの114である。
1100 1110  は、ASCIIコードの115である。
0010 1110  は、ASCIIコードの116である。
1010 1110  は、ASCIIコードの117である。
0110 1110  は、ASCIIコードの118である。
1110 1110  は、ASCIIコードの119である。
0001 1110  は、ASCIIコードの120である。
1001 1110  は、ASCIIコードの121である。
0101 1110  は、ASCIIコードの122である。
1101 1110  は、ASCIIコードの123である。
0011 1110  は、ASCIIコードの124である。
1011 1110  は、ASCIIコードの125である。
0111 1110  は、ASCIIコードの126である。
1111 1110  は、ASCIIコードの127である。
0000 0001  は、ASCIIコードの128である。
1000 0001  は、ASCIIコードの129である。
0100 0001  は、ASCIIコードの130である。
1100 0001  は、ASCIIコードの131である。
0010 0001  は、ASCIIコードの132である。
1010 0001  は、ASCIIコードの133である。
0110 0001  は、ASCIIコードの134である。
1110 0001  は、ASCIIコードの135である。
0001 0001  は、ASCIIコードの136である。
1001 0001  は、ASCIIコードの137である。
0101 0001  は、ASCIIコードの138である。
1101 0001  は、ASCIIコードの139である。
0011 0001  は、ASCIIコードの140である。
1011 0001  は、ASCIIコードの141である。
0111 0001  は、ASCIIコードの142である。
1111 0001  は、ASCIIコードの143である。
0000 1001  は、ASCIIコードの144である。
1000 1001  は、ASCIIコードの145である。
0100 1001  は、ASCIIコードの146である。
1100 1001  は、ASCIIコードの147である。
0010 1001  は、ASCIIコードの148である。
1010 1001  は、ASCIIコードの149である。
0110 1001  は、ASCIIコードの150である。
1110 1001  は、ASCIIコードの151である。
0001 1001  は、ASCIIコードの152である。
1001 1001  は、ASCIIコードの153である。
0101 1001  は、ASCIIコードの154である。
1101 1001  は、ASCIIコードの155である。
0011 1001  は、ASCIIコードの156である。
1011 1001  は、ASCIIコードの157である。
0111 1001  は、ASCIIコードの158である。
1111 1001  は、ASCIIコードの159である。
0000 0101  は、ASCIIコードの160である。
1000 0101  は、ASCIIコードの161である。
0100 0101  は、ASCIIコードの162である。
1100 0101  は、ASCIIコードの163である。
0010 0101  は、ASCIIコードの164である。
1010 0101  は、ASCIIコードの165である。
0110 0101  は、ASCIIコードの166である。
1110 0101  は、ASCIIコードの167である。
0001 0101  は、ASCIIコードの168である。
1001 0101  は、ASCIIコードの169である。
0101 0101  は、ASCIIコードの170である。
1101 0101  は、ASCIIコードの171である。
0011 0101  は、ASCIIコードの172である。
1011 0101  は、ASCIIコードの173である。
0111 0101  は、ASCIIコードの174である。
1111 0101  は、ASCIIコードの175である。
0000 1101  は、ASCIIコードの176である。
1000 1101  は、ASCIIコードの177である。
0100 1101  は、ASCIIコードの178である。
1100 1101  は、ASCIIコードの179である。
0010 1101  は、ASCIIコードの180である。
1010 1101  は、ASCIIコードの181である。
0110 1101  は、ASCIIコードの182である。
1110 1101  は、ASCIIコードの183である。
0001 1101  は、ASCIIコードの184である。
1001 1101  は、ASCIIコードの185である。
0101 1101  は、ASCIIコードの186である。
1101 1101  は、ASCIIコードの187である。
0011 1101  は、ASCIIコードの188である。
1011 1101  は、ASCIIコードの189である。
0111 1101  は、ASCIIコードの190である。
1111 1101  は、ASCIIコードの191である。
0000 0011  は、ASCIIコードの192である。
1000 0011  は、ASCIIコードの193である。
0100 0011  は、ASCIIコードの194である。
1100 0011  は、ASCIIコードの195である。
0010 0011  は、ASCIIコードの196である。
1010 0011  は、ASCIIコードの197である。
0110 0011  は、ASCIIコードの198である。
1110 0011  は、ASCIIコードの199である。
0001 0011  は、ASCIIコードの200である。
1001 0011  は、ASCIIコードの201である。
0101 0011  は、ASCIIコードの202である。
1101 0011  は、ASCIIコードの203である。
0011 0011  は、ASCIIコードの204である。
1011 0011  は、ASCIIコードの205である。
0111 0011  は、ASCIIコードの206である。
1111 0011  は、ASCIIコードの207である。
0000 1011  は、ASCIIコードの208である。
1000 1011  は、ASCIIコードの209である。
0100 1011  は、ASCIIコードの210である。
1100 1011  は、ASCIIコードの211である。
0010 1011  は、ASCIIコードの212である。
1010 1011  は、ASCIIコードの213である。
0110 1011  は、ASCIIコードの214である。
1110 1011  は、ASCIIコードの215である。
0001 1011  は、ASCIIコードの216である。
1001 1011  は、ASCIIコードの217である。
0101 1011  は、ASCIIコードの218である。
1101 1011  は、ASCIIコードの219である。
0011 1011  は、ASCIIコードの220である。
1011 1011  は、ASCIIコードの221である。
0111 1011  は、ASCIIコードの222である。
1111 1011  は、ASCIIコードの223である。
0000 0111  は、ASCIIコードの224である。
1000 0111  は、ASCIIコードの225である。
0100 0111  は、ASCIIコードの226である。
1100 0111  は、ASCIIコードの227である。
0010 0111  は、ASCIIコードの228である。
1010 0111  は、ASCIIコードの229である。
0110 0111  は、ASCIIコードの230である。
1110 0111  は、ASCIIコードの231である。
0001 0111  は、ASCIIコードの232である。
1001 0111  は、ASCIIコードの233である。
0101 0111  は、ASCIIコードの234である。
1101 0111  は、ASCIIコードの235である。
0011 0111  は、ASCIIコードの236である。
1011 0111  は、ASCIIコードの237である。
0111 0111  は、ASCIIコードの238である。
1111 0111  は、ASCIIコードの239である。
0000 1111  は、ASCIIコードの240である。
1000 1111  は、ASCIIコードの241である。
0100 1111  は、ASCIIコードの242である。
1100 1111  は、ASCIIコードの243である。
0010 1111  は、ASCIIコードの244である。
1010 1111  は、ASCIIコードの245である。
0110 1111  は、ASCIIコードの246である。
1110 1111  は、ASCIIコードの247である。
0001 1111  は、ASCIIコードの248である。
1001 1111  は、ASCIIコードの249である。
0101 1111  は、ASCIIコードの250である。
1101 1111  は、ASCIIコードの251である。
0011 1111  は、ASCIIコードの252である。
1011 1111  は、ASCIIコードの253である。
0111 1111  は、ASCIIコードの254である。
1111 1111  は、ASCIIコードの255である。
【００１２】
本発明の２分割処理圧縮プログラムを記録した記録媒体は、二つの発明をひとつにまとめて出願したものである。第一の発明は、テキスト文字で書かれたファイルを圧縮する際、圧縮を行うファイルをバイナリー形式で1byteづつ読み込んで、読み込んだデーターを配列の最初の位置から代入する度に1byteづつ代入する位置をずらして、1byteづつ配列に代入する。圧縮を行うファイルのデーターを読み込ませた配列の位置を示すインデックスを奇数と偶数とで分割する。二つの配列を作成し、圧縮を行うファイルを読み込ませた配列の位置を示すインデックスが偶数の場合のデーターだけを集めた配列を作成し、これを第一配列と仮称する。圧縮を行うファイルを読み込ませた配列の位置を示すインデックスが奇数の場合のデーターだけを集めた配列を作成し、これを第二配列と仮称する。第一配列か第二配列のどちらか一方を基準として残して、残さなかった片方の配列にランレングス圧縮処理をして、ファイルを圧縮するプログラムである。実施例では、第一配列に代入されたデーターをランレングス圧縮した。第二の発明は、第一の発明の方法で圧縮したファイルを元に戻す復号工程処理を行うプログラムである。
【００１３】
実施例は、テキストレベルの圧縮の圧縮工程は、「アイウエオ」とテキスト文字で記録されたファイルをテストファイルとして使用している。このテストファイルの事を圧縮対象テストファイルと仮称する。図４の＜圧縮対象テストファイルの内容を示した図＞を参照。突然であるが、本発明は、この圧縮対象テストファイルというファイルだけを圧縮処理できる処理工程である。従って、圧縮工程でヘッダー部分にランレングス圧縮を行った部分を示す配列の位置を示すインデックスを取得して記録すべきだが記録していない、または、圧縮工程でヘッダー部分にランレングス圧縮を行っていない部分を示す配列の位置を示すインデックスを取得して記録すべきだが記録していない等の欠落した処理工程になっている。
【００１４】
実施例の圧縮工程のプログラムによる処理で圧縮対象テストファイルを使用して圧縮ファイルを作成するが、作成する圧縮ファイルに記録するデーターの内容と記録する順番を予め規則として決めておく事が必要である。この予め決めておく規則は、圧縮対象テストファイルを基に本発明の２分割処理圧縮プログラムを記録した記録媒体で作成した圧縮ファイルを圧縮する前の元の状態に戻す為の処理を行う時に必要となる規則である。以下に、本発明の圧縮工程で作成する圧縮ファイルに記録するデーターの内容と記録する順番を記述し、実施例で代入される数値を記述して説明する。作成された圧縮ファイルに記録される内容と記録する順番を定めた圧縮記録規則は、以下の通りである。圧縮ファイルの最初のデーターは、基準数を数値として1byte分で記録する事とするが、実施例で代入される数値は、「5」である。圧縮ファイルの二番目のデーターは、基準として残した文字列を代入する事とするが、実施例で、代入される文字コードは、「65,67,69,71,73」の５文字であるから、5byteとなる。圧縮ファイルの三番目のデーターは、何と言う文字コードを圧縮したかを1byte分で記録する事とするが、実施例では、文字コード「131」を代入する事になる。最後のデーターは、圧縮した文字コードが何文字連なっていたかという記録の文字数を1byte分で数値として記録するという事を規則とするが、実施例では、「131」が５個連なっていたので「5」という数値を代入する事になる。この作成する圧縮ファイルに記録するデーターの内容と記録する順番を予め決めておく規則の事を圧縮記録規則と仮称する。このような圧縮記録規則で圧縮ファイルを作成するので、圧縮対象テストファイルを使用して圧縮ファイルを作成した場合の作成した圧縮ファイルのサイズは、8byteとなる。圧縮対象テストファイルを使用して圧縮ファイルを作成した場合の作成した圧縮ファイルのサイズをもう少し説明する。基準データーとして残したデーター数の5に1を加算した数値に、ランレングス圧縮したデーターを記録した部分のデーターの数を加えた数が圧縮ファイルのサイズになる。ランレングス圧縮したデーターを記録した部分のデーターの数は、2となるので、この2を加えた数が圧縮ファイルのサイズとなる。ランレングス圧縮したデーターを記録した部分のデーターの数は2となるが、その配列に代入されたデーターの内訳は、何と言う文字コードを圧縮したかを記録する為の文字コードと同じ文字が何文字連なっていたかを記録する為の数値の二つである。本来のランレングス圧縮の場合は、元のファイルの何文字目から何と言う文字が何文字連なっていたという事を示す文字コードと数値を二つ圧縮ファイルに記録するが、圧縮対象テストファイルに限定して動作する発明なので元のファイルの何と言う文字が何文字連なっていたという記録だけを行うという規則にした。この記録は、圧縮ファイルの末尾に二つのデーターを順次記録するという規則にした。前述の圧縮記録規則を基に本発明の復号工程を行う事とする。
【００１５】
本発明の２分割処理圧縮プログラムを記録した記録媒体の技術で圧縮対象テストファイルを使用して圧縮ファイルを作成し、作成した圧縮ファイルを圧縮前の圧縮対象テストファイルの状態に戻す工程を復号工程と呼ぶ。復号工程でも、圧縮工程でヘッダー部分にランレングス圧縮を行った部分を示す配列の位置を示すインデックスを取得して記録すべきだが記録していない、または、圧縮工程でヘッダー部分にランレングス圧縮を行っていない部分を示す配列の位置を示すインデックスを取得して記録すべきだが記録していない等の欠落した処理工程になっている為、ヘッダー部分に本来記録されているはずのランレングス圧縮を行った部分を明確にする配列の位置を示すインデックスを読み込む処理工程がなく、読み込んだ配列の位置を示すインデックスによって処理を変更する工程も無い、または、ヘッダー部分に本来記録されているはずのランレングス圧縮を行っていない部分を明確にする配列の位置を示すインデックスを読み込む処理工程がなく、読み込んだ配列の位置を示すインデックスによって処理を変更する工程も無い等の欠落した処理工程になっている。
【００１６】
実施例で使用している圧縮対象テストファイルは全て全角文字で記録されたファイルである。半角文字が混じったファイルなど、その他の全てのファイルに対応した改良品も含めて、コンピューターで使用されている機械語でASCIIコードを表した場合の規則性を利用して圧縮対象配列を二つに分けた後、二つに分けた配列のどちらかの一方または、両方にランレングス圧縮や辞書圧縮するものや、この方法で圧縮したファイルを元に戻す復号工程の処理は、本発明の２分割処理圧縮プログラムを記録した記録媒体である事を明言する。
【００１７】
ランレングス圧縮や辞書圧縮は、圧縮工程も復号工程もどちらも、既にある技術であるから段落〔００１２〕には、本発明は、圧縮するプログラムであり、圧縮したファイルを元に戻す復号工程処理を行うプログラムとしているが、基本的には本発明の２分割処理圧縮プログラムを記録した記録媒体の特許に含まれるものではないというのは当然の事である。もしも、この圧縮工程にランレングス圧縮の工程を含まないものであるとした場合は、ランレングス圧縮が出来ない文字列や辞書圧縮が出来ないファイルやランレングス圧縮と辞書圧縮の両方ができないファイルや辞書圧縮やランレングス圧縮が可能なファイルを圧縮する前に圧縮を行うファイルを第一配列と第二配列の二つに分割処理する事で高圧縮率の圧縮を可能にするソフトウェアであると言える。また、本発明の技術を使用して作成した圧縮ファイルを圧縮する前の圧縮を行うファイルに戻す工程、または、圧縮する前の圧縮を行うファイルをバイナリー形式で全て読み込んだデーターを配列の最初の位置から代入する度に1byte分づつ代入する位置をずらして、1byteづつ配列に代入した状態の配列に戻す復号工程は、第一配列と第二配列の二つに分割処理された配列を圧縮する前の圧縮を行うファイルをバイナリー形式で全て読み込んだデーターを配列の最初の位置から代入する度に1byte分づつ代入する位置をずらして、1byteづつ配列に代入した配列の状態に戻す工程、または、圧縮前の圧縮を行うファイルに戻す工程を行うプログラムであるという事ができるものである。
【発明の効果】
【００１８】
可逆圧縮に於いて、従来よりも、より高圧縮が可能になる。非可逆圧縮は、ビデオ画像やテレビ画像または、音声ファイルなどで広く使われている圧縮技術であるが、これらのビデオ画像やテレビ画像または、音声ファイルなどにおいても、可逆圧縮技術は、復号する場合に於いて重要な技術となっている。ビデオ画像やテレビ画像または、音声ファイルなどの圧縮技術に利用した場合は、従来よりも、より正確な復号ができるようになり、同じ圧縮率でも画像の鮮明さなどに大きな差を生む技術である。勿論、ビデオ画像やテレビ画像または、音声ファイルなどでの圧縮を行う際、圧縮率だけを高めようとした場合は、本発明のソフトウェアを利用する事で、従来よりも大きく圧縮率を高める事が出来る。
【００１９】
本発明の２分割処理圧縮プログラムを記録した記録媒体は、全く圧縮出来なかった圧縮を行うファイルまたは、圧縮を行うファイルの中の一部分が圧縮出来なかった場合であっても圧縮する事ができるようになるので圧縮率を向上させるが可能になる。特に画像処理の場合は、従来、画素単位で圧縮を行うのが普通であるが、本発明の２分割処理圧縮プログラムを記録した記録媒体では、画素単位で処理を行う必要性が無くなり為、どのようなフォーマット形式で作られた画像ファイルあっても、画素という状態にする必要が無く、ファイルを先頭から最後までファイルとして処理する事が出来るようになる。その為、画素単位での圧縮工程や復号工程とよりも高速な処理を行えるようになる。画像処理で使用した場合に於いても、全く圧縮出来なかった圧縮を行うファイルまたは、圧縮を行うファイルの中の一部分が圧縮出来なかった場合であっても圧縮する事が出来るものとなるので圧縮率を向上させる事が可能になる。また、従来の技術で既に圧縮されたファイルに対して本発明の圧縮を行う事が可能であるという事から高圧縮率を得る事ができる。
【００２０】
また、本発明の実施例で基準として残した、もう片一方の配列（代入された数値が違うものが多い方の配列、第二配列の方）に対しても、ランレングス圧縮や辞書圧縮やスライド辞書圧縮をする事が出来る。また、基準として残さずにランレングス圧縮した配列(第一配列の方)に対しても更に、辞書圧縮やスライド辞書圧縮を行う事ができる。更に、両方の配列に対して圧縮処理後に全体をランレングス圧縮やスライド辞書圧縮や辞書圧縮する事もできる。この様に圧縮技術を組み合わせて圧縮する事ができるので全体として大きく圧縮率を高める事が出来る技術である。これらの組み合わせで作成された圧縮ソフトウェアも本発明のレパートリーであると明言する。
【実施例】
【００２１】
以下の図２、図３、図４、図５、図６は、実際とは、多少異なる。また、実施例の分岐処理に於いて分岐条件に該当しない場合どうするかを記述していない場合があるが、分岐条件に該当しない場合どうするかを記述していない場合は、何も処理を行わないという事である。実施に於いては、MicroSoft株式会社のVisual Stadio2005 C#というコンパイラを使用してプログラムを作成した。
【００２２】
本発明の２分割処理圧縮プログラムを記録した記録媒体は、図３の＜本発明に使用した機材の説明図＞に示した様なハードウェア資源で動作するプログラムである。図３の＜本発明に使用した機材の説明図＞に示した様なハードウェア資源は、図符号Ｉのコンピューター本体と図符号Ｈのモニターと図符号Ｊのキーボードと図符号Ｋのマウスの合計４個のパーツで構成された機材であるが、これらの合計４個のパーツで構成された機材を一般的にコンピューターと呼んでいる。図符号Ｉのコンピューター本体は、DOS/V機コンピューターと呼ばれるコンピューターである。図符号Ｉのコンピューター本体には、ハードディスクドライブなどの記録媒体やCPUや本体メモリーなどと呼ばれる装置が内蔵されており、本発明の２分割処理圧縮プログラムを記録した記録媒体は、図符号Ｉのコンピューター本体内部に在るハードディスクドライブなどの記録媒体にインストールされているものとする。図符号Ｉのコンピューター本体に接続された外部に在るハードディスクドライブなどの記録媒体に本発明のソフトウェアがインストールされていて、図符号Ｉのコンピューター本体から本発明のソフトウェアを起動する事が出来る場合は、図符号Ｉのコンピューター本体に接続された外部に在るハードディスクドライブなどの記録媒体に本発明のソフトウェアがインストールされているものとする。本発明のソフトウェアがインストールされている図符号Ｉのコンピューター本体内部に在るハードディスクドライブなどの記録媒体または、図符号Ｉのコンピューター本体に接続された外部に在るハードディスクドライブなどの記録媒体にインストールされている本発明のソフトウェアを起動すると本発明のソフトウェアは、図符号Ｉのコンピューター本体に内蔵された本体メモリーに適時に必要量読み込まれる。図符号Ｉのコンピューター本体に内蔵された本体メモリーに適時に必要量読み込まれた本発明のソフトウェアに書かれたCPUが処理を予定している命令文が必要な時に必要量CPUに読み込まれ、そのCPUに読み込まれた命令文がCPUによって実行される事によってコンピューターによって本発明の２分割処理圧縮プログラムを記録した記録媒体が動作する。従って、本発明の２分割処理圧縮プログラムを記録した記録媒体がハードウェア資源を利用してどのような工程で処理されるのかを簡単な表現で説明すると、本発明の２分割処理圧縮プログラムを記録した記録媒体に書かれた命令文は、コンピューター本体のCPUによって処理されると表現しなおす事ができるものである。
【００２３】
図３の＜本発明に使用した機材の説明図＞に示した様なハードウェア資源で動作するソフトウェアであると段落〔００２２〕にて説明したが、コンピューターの形状は、図３の＜本発明に使用した機材の説明図＞に示した様なハードウェア資源に限定できるものではなく、図符号Ｈのモニター、図符号Ｉのコンピューター本体、図符号Ｊのキーボード、図符号Ｋのマウスが一体化したものや、図符号Ｋのマウスが存在しない構成のものや、図符号Ｈのモニター、図符号Ｉのコンピューター本体の二つを一体化した構成のもの等いろいろある。今後ももっと、いろいろな形状のコンピューターが開発されていくであろうと考えられる。図３の＜本発明に使用した機材の説明図＞に示した様なハードウェア資源でなくても、類似と言い得る、いわゆるコンピューターを本発明の２分割処理圧縮プログラムを記録した記録媒体で動作させている場合も本発明の２分割処理圧縮プログラムを記録した記録媒体であると明言する。
【００２４】
以下の段落に於いて、配列や変数などを作成すると記述しているが配列や変数などが作成される場所は、図符号Ｉのコンピューター本体の内部にある本体メモリーに作成される。但し、ＯＳと呼ばれるソフトウェアによって仮想メモリー領域に作成される場合もある。仮想メモリー領域とは、図符号Ｉのコンピューター本体の内部に在るハードディスクドライブなどの記録媒体の一部分を仮想的に本体メモリーとして使用する場合に使用する図符号Ｉのコンピューター本体の内部に在るハードディスクドライブなどの記録媒体の一部分の事を言う。この図符号Ｉのコンピューター本体の内部にある本体メモリーまたは、図符号Ｉのコンピューター本体の内部にあるハードディスクドライブなどの記録媒体の一部分を仮想的に本体メモリーとして使用する場合に使用する図符号Ｉのコンピューター本体の内部に在るハードディスクドライブなどの記録媒体の一部分の事をコンピューター内部のメモリー装置と呼ぶ事とする。従って、配列や変数などを作成すると記述している場合の配列や変数などが作成される場所を端的な表現をして説明するならば、コンピューター内部のメモリー装置内に作成されるという表現になる。
【００２５】
以下の段落に於いて、配列の末尾にデーターを代入すると記述している場合がある。未だに配列に代入されたデーターが無い場合は、普通、配列の最初の位置にデーターを代入するものである。しかし、配列の最初の位置から代入する度に1byteづつ代入する位置をずらして、データーを1byteづつ代入していく場合、配列の最初の位置にデーターを代入した後は、配列に代入されたデーターの最後の位置にあるデーターの次の位置に代入するという事になる。この場合、配列の最初の位置に既にデーターを代入した後の位置の指定を末尾と表現する事が出来る。未だに配列に代入されたデーターが無い場合で、配列の最初の位置から代入する度に1byteづつ代入する位置をずらして1byteづつデーターを配列に代入していく場合で、配列の最初の位置にデーターを代入する場合でも、配列の末尾にデーターを代入すると表現する事が出来ると考えられる。そこで、配列の最初の位置から代入する度に1byteづつ代入する位置をずらして、1byteづつデーターを配列に代入していく場合は、配列の最初の位置に代入する場合であっても、配列の末尾に代入すると記述している場合がある。また、以下の段落で、配列の最初の位置から代入する度に1byteづつ代入する位置をずらして、1byteづつデーターを配列に代入していく場合に於いて、配列に代入するデーターの順番について断り書きが無い場合は、取得した元のデーター（作成したデーターや取得したデーターや読み込んだデーターや元の配列に代入されていたデーターなど）の順番通りに1byteづつ配列に代入するものとする。
【００２６】
以下の段落に於いて、全て一次元配列を利用してプログラムを作成しているが、多次元配列を利用する事や、ファイルを利用する事でも同じ処理が出来ると考えられる。また、一次元配列と多次元配列とファイルの組み合わせによっても、同じ処理が出来ると考えられる。これらはプログラムの書き方の違いであって、全て本発明の単純なレパートリーでしかないという事を明言する。
【００２７】
また、以下の段落で、本発明の２分割処理圧縮プログラムを記録した記録媒体とコンピューターによる自動処理の場合は、いちいち、本発明の２分割処理圧縮プログラムを記録した記録媒体とコンピューターによる自動処理である事を記述しない。記述していない場合は、本発明の２分割処理圧縮プログラムを記録した記録媒体とコンピューターによる自動処理である。しかし、図１の＜本発明の２分割処理圧縮プログラムを記録した記録媒体のフローチャート図＞には、図符号Ｌの人為的な手動による操作または、入力と、図符号Ｍの本発明の２分割処理圧縮プログラムを記録した記録媒体とコンピューターによる自動処理の二つに分けて示す事とした。以下の２分割処理圧縮プログラムを記録した記録媒体とコンピューターによる自動処理の部分の処理工程を記述したCPUに対する命令文の事をプログラムと呼ぶ事とする。また、配列のサイズの調整なども当該事業者にとって常識的な技術であると考えられる事であるから何も書いていない場合がある。また、配列の型の変換処理なども当該事業者にとって常識的な技術であると考えられる事であるから何も書いていない場合がある。また、変数の型についても当該事業者にとって常識的な技術であると考えられる事であるから何も書いていない場合がある。
【００２８】
図１の＜本発明の２分割処理圧縮プログラムを記録した記録媒体のフローチャート図＞を参照の事。図符号Ｌの人為的な手動による操作または、入力と図符号Ｍの本発明の２分割処理圧縮プログラムを記録した記録媒体とコンピューターによる自動処理には、ステップ番号を付したので、このステップ番号順に説明する。まず、本発明の２分割処理圧縮プログラムを記録した記録媒体を起動すると、図２の＜本発明の２分割処理圧縮プログラムを記録した記録媒体の操作画面図＞の様な操作画面が図符号Ｈのモニターに表示される。
【００２９】
圧縮を行うファイルを本発明の２分割処理圧縮プログラムを記録した記録媒体を使用して圧縮する場合を説明する。これを圧縮工程と仮称する。この圧縮工程で必要とする技術は、一般的に知られたランレングス圧縮を行う方法（圧縮方法）で圧縮されたファイルを作成する技術または、配列を圧縮する技術を使用する事でも可能である。この一般的に知られたランレングス圧縮する技術で作成されたファイルまたは、圧縮された配列を作成する技術は、当該事業者に於いては、常識的技術である。
【００３０】
テキスト文字で書かれたファイルを圧縮する処理工程を説明する。「アイウエオ」と横一行に書かれたテキストファイルを用意した。この用意したテキストファイルを圧縮対象テストファイルと呼ぶ。図４の＜圧縮対象テストファイルの内容を示した図＞を参照の事。
【００３１】
ステップ１０１に進む。ステップ１０１は、人為的処理である。図符号Ｇの参照ボタンを図符号Ｋのマウスなどの入力デバイスを使用してクリックする。これによって、記録媒体の中を閲覧できるので、記録媒体から圧縮を行うファイルを選択する。選択すると圧縮を行うファイルのフルパスが図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに入力される。また、図符号Ｊのキーボードなどの入力デバイスを使って図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに、直接入力出来るようになっている。ここで圧縮対象テストファイルを選択して図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに指定する。
【００３２】
図符号Ｋのマウスなどの入力デバイスを使用して、図符号Ｆの実行ボタンをクリックする。そうすると、本発明の２分割処理圧縮プログラムを記録した記録媒体の圧縮工程がスタートする。図１の＜本発明の２分割処理圧縮プログラムを記録した記録媒体のフローチャート図＞のステップ１０３には、分割処理と書いているが、本発明の２分割処理圧縮プログラムを記録した記録媒体に於ける２分割処理工程の事である。尚、図１の＜本発明の２分割処理圧縮プログラムを記録した記録媒体のフローチャート図＞のステップ１０７には、分割して処理するという記述があるが、これは、本発明の２分割処理圧縮プログラムを記録した記録媒体に於ける２分割処理工程の事ではない。
【００３３】
ステップ１０２に進む。図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに入力されたフルパスのファイル名を基に、圧縮を行うファイルとして、圧縮対象テストファイルをハードディスクドライブなどの記録媒体から探し出してバイナリー形式でファイルを1byteづつ読み込む。圧縮対象テストファイルをバイナリー形式で読み込んだデーターを全て代入できるサイズで配列を作成する。この配列を仮称A配列と仮称する。A配列に圧縮対象テストファイルから読み込んだデーターをA配列の最初の位置から代入する度に1byteづつ代入する位置をずらして、圧縮対象テストファイルから読み込んだデーターを1byteづつ代入する。
【００３４】
ステップ１０３に進む。A配列の配列サイズは、圧縮対象テストファイルに書かれている「アイウエオ」という文字列で全角の５文字であるから、ASCIIコードで10byteとなる。A配列の配列サイズを2で割ったサイズで配列を２個作成し、第一配列と第二配列と仮称する。A配列の最初から最後まで繰り返し処理を行う。この繰り返し処理を仮称、セパレート繰り返し処理とする。セパレート繰り返し処理では、A配列のデーターが代入されている位置を示すインデックスを2で割った余りがある場合とA配列のデーターが代入されている位置を示すインデックスを2で割った余りがない場合とに分岐する。
【００３５】
この分岐を分岐１と仮称する。この分岐１のA配列のデーターが代入されている位置を示すインデックスを2で割った余りがない場合は、偶数であるという事になる。この分岐１のA配列のデーターが代入されている位置を示すインデックスを2で割った余りがない場合は、A配列に代入されたデーターが代入されている位置を示すインデックスを使用してA配列に代入されたデーターを取得して、取得したデーターを第一配列の末尾に代入する。この分岐１のA配列のデーターが代入されている位置を示すインデックスを2で割った余りがある場合は、奇数であるという事になる。この分岐１のA配列のデーターが代入されている位置を示すインデックスを2で割った余りがある場合は、A配列に代入されたデーターが代入されている位置を示すインデックスを使用してA配列に代入されたデーターを取得して、取得したデーターを第二配列の末尾に代入する。これで分岐１を終了する。A配列に代入された全てのデーターに対して処理し終わったら、セパレート繰り返し処理を終了する。
【００３６】
ステップ１０４に進む。第一配列に代入された最初の位置のデーターから順次1byteづつ、図符号Ａの第一配列の内容を表示するリストボックスに全て表示する。第二配列に代入された最初の位置のデーターから順次1byteづつ、図符号Ｂの第二配列の内容を表示するリストボックスに全て表示する。次に、第一配列に代入された全てのデーターにランレングス圧縮を行う。ランレングス圧縮を行う方法（圧縮方法）とランレングス圧縮を行う方法で圧縮されたファイルまたは、配列を圧縮していない元のファイルまたは、配列の状態に戻す方法（復元方法）は、当該事業者に於いては、常識的技術である。
【００３７】
１個のデーターを1byteとして、2個のデーターを代入できるサイズで配列を作成する。つまり、言い換えると1byteの型で配列のサイズを2とした配列を作成するという事である。この配列をランレングス圧縮配列と仮称する。ここからランレングス圧縮配列にデーターを代入する処理工程を行う。ランレングス圧縮配列のデーターを代入する事ができる領域の最初の位置に代入するデーターは、何と言う文字コードを圧縮したかという文字コードを代入する。ランレングス圧縮配列のデーターを代入する事ができる領域の最後の位置に代入するデーターは、ランレングス圧縮配列のデーターを代入する事ができる領域の最初の位置に代入された文字コードが何文字連なっていたかという記録をする為の文字数を代入する。第一配列の最初の位置に代入されたデーターを取得してランレングス圧縮配列の最初の位置に代入する。1byteの型で変数を作成して、この変数をカウント変数と仮称する。カウント変数に初期値として0を代入する。
【００３８】
第一配列に代入された全てのデーターに対して以下の繰り返し処理を行う。この繰り返し処理を文字コードランレングス処理と仮称する。文字コードランレングス処理は、ランレングス圧縮配列の最初の位置に代入されたデーターと第一配列の最初の位置から最終までの位置に代入された全てのデーターを比較検査する。比較検査している第一配列に代入されたデーターの位置を注目位置と仮称する。文字コードランレングス処理では、ランレングス圧縮配列の最初の位置に代入されたデーターと第一配列の注目位置にあるデーターが同じデーターであったら、カウント変数に代入された数値に1を加えた数値を算出してカウント変数に上書き処理をして、第一配列の注目位置を一つ進める事で第一配列に代入された次の位置のデーターと比較検査を行う事とする。ランレングス圧縮配列の最初の位置に代入されたデーターと第一配列の注目位置にあるデーターが違うデーターであったら、何も行わないで、第一配列の注目位置を一つ進める事で第一配列に代入された次の位置のデーターと比較検査を行う事とする。注目位置を第一配列の最初の位置から最終までの位置にずらす事で第一配列に代入された全てのデーターに対してランレングス圧縮配列の最初の位置に代入されたデーターと比較検査する処理を行う。第一配列に代入された全てのデーターとランレングス圧縮配列の最初の位置に代入されたデーターを比較検査し終わったら、文字コードランレングス処理を終了する。文字コードランレングス処理の工程では、ランレングス圧縮配列の最初の位置に代入されたデーターだけを第一配列に代入された全てのデーターと比較検査しているが、これは、本発明の２分割処理圧縮プログラムを記録した記録媒体が、段落〔００３０〕に記述している圧縮対象テストファイルに限定して動作させている為に、検査データー配列の最初の位置に代入されたデーターを第一配列に代入された全てのデーターと比較検査するという簡略的な処理で済ませているものである。この様な理由でランレングス圧縮配列の最初の位置にだけデーターを代入した時点で、文字コードランレングス処理を行うという簡略的な処理工程にしたものである。この時点では、ランレングス圧縮配列には、最初の位置に代入された１個のデーター以外にはデーターが代入されていないから、他のデーターの検査を行おうとしても行えない状態であるから、この説明書きそのものが意味不明なものである可能性があるが、一応、記述しておく。
【００３９】
ランレングス圧縮配列の末尾(数値を代入できる領域の最後の位置)にカウント変数に代入された数値を代入する。ここまででランレングス圧縮配列にデーターを代入する処理工程を終了する。
【００４０】
第二配列の配列のサイズとランレングス圧縮配列の配列のサイズとを加算した数値に1を加えた数値を配列のサイズとして配列を作成する。この配列を圧縮配列と仮称する。作成した圧縮配列にデーターを代入する処理を行う。復号工程で必要とするデーターを代入する為のデーターをヘッダーデーターと呼び、1byteの型で変数を作成し、この変数をヘッダー変数と仮称する。このヘッダー変数に、第二配列の配列のサイズを代入する。つまり、第二配列の配列のサイズがヘッダーデーターとなる。第二配列の配列サイズは、「アイウエオ」と横一列に書かれたテキスト形式で書かれた圧縮対象テストファイルの圧縮処理を行わないで基準として残した文字列の部分のサイズであるから、圧縮対象テストファイルのサイズの半分となるので、5という数値を代入する事になる。圧縮配列の最初の位置にヘッダー変数のデーターを代入する。
【００４１】
圧縮配列の末尾に、第二配列に代入された最初の位置から最後の位置までの全てのデーターを代入する度に1byte分づつ代入する位置をずらして1byteづつ代入する。圧縮配列の末尾に、ランレングス圧縮配列の最初から最後までの全てのデーターを、代入する度に1byte分づつ代入する位置をずらして1byteづつ代入する。ここまでで、圧縮配列にデーターを代入する処理を終了する。圧縮配列の最初から最後までの全てのデーターをバイナリー形式で1byteづつファイルの末尾に付け加えて記録保存する事で圧縮ファイルを作成する。圧縮工程を終了する。ここまでの圧縮工程の処理をコンピューターに実行させるプログラムを記録したコンピューターが読み取る事が可能な記録媒体が第一の発明である。
【００４２】
第一配列に代入された全てのデーターを対象に既に一般的に知られている技術のランレングス圧縮を行った場合は、段落〔００３１〕から段落〔００３６〕までと同じ処理を行う。その後、ランレングス圧縮配列を作成する。既に一般的に知られている技術のランレングス圧縮を行った場合に作成されるデーターをランレングス圧縮配列の配列のデーターを代入できる領域の最初から最後までの位置に代入する度に1byte分づつ代入する位置をずらして1byteづつ代入する。ランレングス圧縮配列の配列のサイズと第二配列の配列のサイズを加算した数値に1を加えた数値を配列のサイズとして配列を作成する。この配列を圧縮配列と仮称する。作成した圧縮配列にデーターを代入する処理を行う。復号工程で必要とするデーターを代入する為のデーターをヘッダーデーターと呼び、1byteの型で変数を作成し、この変数をヘッダー変数と仮称する。このヘッダー変数に、第二配列の配列のサイズを代入する。つまり、第二配列の配列のサイズがヘッダーデーターとなる。第二配列の配列サイズは、「アイウエオ」と横一列に書かれたテキスト形式で書かれた圧縮対象テストファイルの圧縮処理を行わないで基準として残した文字列の部分のサイズであるから、圧縮対象テストファイルのサイズの半分となるので、5という数値を代入する事になる。圧縮配列の最初の位置にヘッダー変数のデーターを代入する。圧縮配列の末尾に、第二配列に代入された最初の位置から最後の位置までの全てのデーターを代入する度に1byte分づつ代入する位置をずらして1byteづつ代入する。圧縮配列の末尾に、ランレングス圧縮配列の最初から最後までの全てのデーターを、代入する度に1byte分づつ位置をずらして1byteづつ代入する。ここまでで、圧縮配列にデーターを代入する処理を終了する。圧縮配列の最初から最後までの全てのデーターをバイナリー形式で1byteづつファイルの末尾に付け加えて記録保存する事で圧縮ファイルを作成する。この様な処理工程が圧縮工程となる。
【００４３】
図５の＜圧縮対象テストファイルを圧縮工程の処理により圧縮ファイルを作成した状態を示した操作画面図＞は、この圧縮工程の処理を終了した状態の図である。
【００４４】
次に、本発明の２分割処理圧縮プログラムを記録した記録媒体を使用して作成した圧縮ファイルを圧縮する前の状態のファイルに戻す場合の説明をする。また、本発明の２分割処理圧縮プログラムを記録した記録媒体を使用して作成した圧縮ファイルを圧縮する前の状態のファイルに戻すという処理で作成するファイルの事を復元ファイルと仮称する。圧縮工程で作成した圧縮ファイルを圧縮する前の元の状態に戻す処理を行う事でファイルを作成するが、作成するファイルを復元ファイルと仮称し、段落〔００１４〕に記述した圧縮工程で圧縮ファイルを作成する際に使用する圧縮記録規則を使用して復元ファイルを作成する事とする。この本発明の２分割処理圧縮プログラムを記録した記録媒体の圧縮工程で作成した圧縮ファイルを圧縮する前の状態のファイルに戻す工程を復号工程と仮称する。この復号工程で必要とする技術は、一般的に知られたランレングス圧縮を行う方法（圧縮方法）で圧縮されたファイルまたは、配列を圧縮していない元のファイルの状態に戻す方法または、圧縮していない元の配列の状態に戻す方法（復元方法）を使用する事でも可能である。このランレングス圧縮されたファイルまたは、配列を圧縮されていない元のファイルや配列の状態に戻す方法は、当該事業者に於いては、常識的技術である。この復号工程は、圧縮工程を実行後に行うものとする。なぜならば、圧縮ファイルが存在しない限り復号工程を行う事が出来ないからである。
【００４５】
ステップ１０５に進む。ステップ１０５は、人為的処理である。図符号Ｇの参照ボタンを図符号Ｋのマウスなどの入力デバイスを使用してクリックする。これによって、ハードディスクなどの記録媒体の中を閲覧する事が可能になるので、ハードディスクなどの記録媒体から本発明の２分割処理圧縮プログラムを記録した記録媒体の技術で、圧縮対象テストファイルを基に圧縮する事で作成された圧縮ファイルを選択する。選択すると圧縮ファイルのフルパスが図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに入力される。また、図符号Ｊのキーボードなどの入力デバイスを使って図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに、直接入力出来るようになっている。ここで、圧縮工程で作成した圧縮ファイルを選択して図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに指定する。図符号Ｋのマウスなどの入力デバイスを使用して、図符号Ｅの復号ボタンをクリックする。
【００４６】
ステップ１０６に進む。図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに入力されたファイルのサイズを取得するが、このファイルのサイズを取得する方法は、ファイルが何byteあるかを検査する事で取得できる。普通、使用しているコンパイラと呼ばれるプログラムを作成する為に使用するソフトウェアにファイルのサイズを取得するプログラムが用意されているので、用意されたプログラムを使用してファイルサイズを取得するものである。自作でプログラムを作成するという方法でファイルサイズを取得する方法も可能である。自作の場合、ファイルを1byteづつ読み込みながら、カウントし、最後までファイルを読み込み終わった後でカウント終了後の数値を取得すれば、何byteあったかを取得できるのである。また、ファイルの最初から最後まで全て読み込んで、読み込んだbit数を取得し、取得したbit数を8で割ると何byteであったかを取得できる。これらの方法は、既に一般的に知られている方法であり、当該事業者に於いては常識である。図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに入力されたファイルは、圧縮工程で作成された圧縮ファイルであるが、このファイルのサイズを取得して、取得したファイルのサイズで配列を作成し、この配列をAd配列と仮称する。図符号Ａの２分割処理圧縮するファイルの指定テキストボックスに入力された圧縮工程で作成された圧縮ファイルをハードディスクドライブなどの記録媒体から探し出して、バイナリー形式で1byteづつ全て読み込んで、Ad配列の最初の位置から代入する度に1byte分づつ代入する位置をずらして、圧縮ファイルからバイナリー形式で1byteづつ読み込んだデーターを1byteづつAd配列に代入する。
【００４７】
ステップ１０７に進む。Ad配列の最初の位置に代入されているデーターを取得して、取得したデーターを基準データー数と仮称し、基準データー数を配列のサイズとして配列を作成する。この配列を第二配列と仮称する。ここから第二配列にデーターを代入する処理を行う。第二配列の最初の位置から最後の位置まで代入する度に1byteづつ代入する位置をずらして、Ad配列の二番目以降に代入されているデーターを1byteづつ第二配列に代入する。第二配列の最後の位置まで代入し終わったら第二配列にデーターを代入する処理を終了する。
【００４８】
Ad配列の最後の位置に代入されている数値を取得して、その取得した数値を配列のサイズとした配列を作成する。この作成した配列を第一配列と仮称する。ここから第一配列にデーターを代入する処理を行う。Ad配列の最後の位置よりも1byte手前の位置に代入されている数値を取得して、その取得した数値を第一配列の最初の位置から最後の位置までの全ての位置に数値を代入する。ここまでで第一配列にデーターを代入する処理を終了する。Ad配列の最後の位置よりも1byte手前の位置に代入されている数値は、何と言う文字コードを圧縮したのかを示す文字コードを代入してあるのであるから、取得した数値を何と言う文字が何文字連なっていたかを記録してあるAd配列の最後の位置に代入されている数値分だけ、第一配列の最初から最後までの位置に1byteづつ同じ文字コードを代入すれば、元の第一配列の状態に戻す事ができる事になるので、この様な処理工程になる。
【００４９】
ステップ１０８に進む。第一配列の配列のサイズと第二配列の配列のサイズを取得して、取得した両方の数値を加算した数値を配列のサイズとした配列を作成する。作成した配列を復号結果配列と仮称する。1byteの型で変数を二個作成して、この作成した二個の変数を各々回数変数１、回数変数２と仮称する。回数変数１に初期値として0という数値を代入する。回数変数２に初期値として0という数値を代入する。1byteの型で変数を作成する。作成した変数を奇遇数と仮称する。復号結果配列に全てのデーターを代入する為に以下の繰り返し処理を行う。この繰り返し処理を復号結果繰り返し処理と仮称する。復号結果繰り返し処理では、復号結果配列の最初の位置を示すインデックスから最後の位置を示すインデックスまでの全てのインデックスを一つづつ順番に取得して、取得したインデックスを遇奇数に上書き処理(最初だけは遇奇数に代入するだけで上書きしない)で代入する。遇奇数に数値が代入される事によって遇奇数に代入された数値が変わる度に(最初に遇奇数に代入された数値も含めて)以下の処理を行う。遇奇数に代入された数値を2で割った数値が0の場合(偶数の場合)と0ではない場合(奇数の場合)とに分岐処理する。この分岐を分岐２と仮称する。この分岐２で、遇奇数に代入された数値を2で割った数値が0の場合(偶数の場合)は、回数変数１に代入された数値を取得して、取得した数値を第一配列のインデックスとして使用して第一配列に代入されているデーターを取得して、遇奇数に代入された数値を復号結果配列のインデックスとして使用して復号結果配列のインデックスの位置に代入する。次いで、回数変数１に代入された数値に1を加算する。次のインデックスの数値を取得して遇奇数に上書き処理で代入する。この分岐２で、遇奇数に代入された数値を2で割った数値が0ではない場合(奇数の場合)は、回数変数２に代入された数値を取得して、取得した数値を第二配列のインデックスとして使用して第二配列に代入されているデーターを取得して、遇奇数に代入された数値を復号結果配列のインデックスとして使用して復号結果配列のインデックスの位置に代入する。次いで、回数変数２に代入された数値に1を加算する。次のインデックスの数値を取得して遇奇数に上書き処理で代入する。ここまでで、分岐２を終了する。この処理を復号結果配列に付けられた全てのインデックスに対して処理を行い終えたら、復号結果繰り返し処理を終了する。
【００５０】
前述の圧縮工程で既に知られているランレングス圧縮の技術を使用して圧縮ファイルを作成した場合は、この復号工程は、以下の様になる。ランレングス圧縮した部分をAd配列に代入された全てのデーターの中から、Ad配列に記録されたランレングス圧縮部分がAd配列のどの位置からどの位置までに記録されているかを指し示すデーターを取得して、取得したデーターを元にランレングス圧縮した部分をAd配列に代入された全てのデーターの中から、抽出して、抽出したデーターを第一配列の最初の位置から最後の位置までに代入する度に1byte分づつ代入する位置をずらして代入する。Ad配列に記録されたランレングス圧縮部分を除いた部分のデーターをAd配列に記録されたデーターから抽出して、第二配列の最初の位置から最後の位置までに、代入する度に1byte分づつ代入する位置をずらして代入する。第一配列と第二配列にデーターを代入した後は、段落〔００４９〕の処理を行い、段落〔００５１〕から段落〔００５２〕の処理を行って処理を終了するという復号工程となる。
【００５１】
復号結果配列に代入された全てのデーターを1byteづつ取得して、図符号Ｄの復号結果を表示するリストボックスに全て表示させる。
【００５２】
復号結果配列に代入されたの最初から最後までの全てのデーターをバイナリー形式で1byteづつファイルの末尾に付け加えて記録保存する事で復元ファイルを作成する。復号工程を終了する。ここまでの処理工程の処理をコンピューターに実行させるプログラムを記録したコンピューターが読み取る事が可能な記録媒体が第二の発明である。
【００５３】
図６の＜圧縮対象テストファイルから作成した圧縮ファイルを復号工程の処理を行った状態を示した操作画面図＞がこの復号工程を終了した状態の図である。
【００５４】
段落〔００４９〕の配列に付けられたインデックスの取得方法は、当該事業者に於いては常識的技術である。説明する必要性が無いと思われるが少し説明しておく事とする。コンパイラと呼ばれるプログラムを作成する為に用いるプログラムを使用している場合、自動的にこのコンパイラと呼ばれるプログラムによって配列の最初から最後の位置までに０番から順次１づつ数値が増えて行く連番が付けられるものである。この事は、段落〔０００６〕で説明済みである。配列のサイズが１０の配列の場合、インデックスは、０から９までの数値がコンパイラと呼ばれるプログラムによって自動的に付けられるという事である。従って、０から９までの数値が配列のインデックスとなるのである。段落〔００４９〕の配列の最初から最後までのインデックスを一つづつ取得すると記述しているが、そのインデックスを取得する方法は、０番から配列の最後の位置までの連番を作成して、その連番の中から１個づつ順番に数値を取得する事で実現するものである。配列のサイズが１０の場合で説明すると、０から９までの１０個の数値を作成して、１個づつ取得するという意味である。配列の位置を指定する時に配列のインデックスを指定する事はできるが、その反対に代入されたデーターからインデックスを取得する事は出来ない。代入されたデーターの位置を０から１づつカウントして数値を得る事でインデックスと同じ数値を取得するというのが普通のインデックスの取得方法である。
【図面の簡単な説明】
【００５５】
【図１】本発明の２分割処理圧縮プログラムを記録した記録媒体のフローチャート図
【図２】本発明の２分割処理圧縮プログラムを記録した記録媒体の操作画面図
【図３】本発明に使用した機材の説明図
【図４】圧縮対象テストファイルの内容を示した図
【図５】圧縮対象テストファイルを圧縮工程の処理により圧縮ファイルを作成した状態を示した操作画面図
【図６】圧縮対象テストファイルから作成した圧縮ファイルを復号工程の処理を行った状態を示した操作画面図
【符号の説明】
【００５６】
Ａ：２分割処理圧縮するファイルの指定テキストボックス
Ｂ：第一配列の内容を表示するリストボックス
Ｃ：第二配列の内容を表示するリストボックス
Ｄ：復号結果を表示するリストボックス
Ｅ：復号ボタン
Ｆ：実行ボタン
Ｇ：参照ボタン
Ｈ：モニター
Ｉ：コンピューター本体
Ｊ：キーボード
Ｋ：マウス
Ｌ：人為的な手動による操作または、入力
Ｍ：本発明の２分割処理圧縮プログラムを記録した記録媒体とコンピューターによる自動処理
【図１】
2013135344.tif 000003
【図２】
2013135344.tif 000004
【図３】
2013135344.tif 000005
【図４】
2013135344.tif 000006
【図５】
2013135344.tif 000007
【図６】
2013135344.tif 000008