(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
<ハードウェア構成>
実施の形態1
上記の実施形態におけるハードウェアの構成を、
図1を参照し説明する。
図1は情報処理装置を示すブロック図。情報処理装置1は通信網N(例えば、インターネット、LAN(Local Area Network)又は携帯電話網)により他の情報処理装置と相互に接続されている。情報処理装置1は、例えばサーバ装置、パーソナルコンピュータ又はスマートフォン等。情報処理装置1は、CPU(Central Prosessing Unit)11、記憶部12、RAM(Random Access Memory)13、入力部14、表示部15、通信部16およびドライブ部17をそなえる。
【0011】
CPU11はパスを介しハードウェア各部と接続されている。CPU11は例えば1以上のCPU又はマルチコアCPU等をそなえる。CPU11は、プログラム12P(例えば、記憶部12に記憶されている。他の部分(例えば記録媒体10)に記憶されていてもよい)に従いハードウェア各部を制御する。
【0012】
記憶部12は例えばハードディスク又は大容量メモリ等。ドライブ部17は、記録媒体10(例えば、光ディスク)から情報を読み取る。記憶部12にはCPU11が処理を行う際に必要とする種々のデータ及びプログラム12Pを格納する。CPU11は、記録媒体10に記録されたプログラム12Pをドライブ部17に読み取らせ、読み取ったプログラム12Pを記憶部12に記憶させる。CPU11は、必要に応じてプログラム12Pを記憶部12からRAM13にロードし、ロードしたプログラム12Pに従って、各種の処理を実行する。なお、プログラム12Pは、情報処理装置1の外部からダウンロードされてもよく、あらかじめ記憶部12に記憶されていてもよい。この場合、情報処理装置1は、ドライブ部17をそなえていない形態であってもよい。
【0013】
RAM13は、例えばSRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)、フラッシュメモリ等。RAM13は、記憶部としても機能し、CPU11による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【0014】
入力部14はマウスまたはキーボード等の入力デバイスであり、受け付けた操作情報をCPU11へ送信する。表示部15はCPU11から送信された画像データを表示する。表示部15は例えば液晶ディスプレイ。通信部16は、例えば無線LANカード又は携帯電話用通信モジュール等であり、通信網Nを介して各種情報を送受信する。
【0015】
<実施の形態1>
本実施の形態は、データベースをフラットファイルデータベース、つまりプレーンテキストとして保存する。
【0016】
本実施の形態では、第1の文字(例えば改行)はレコードの境界、第2の文字(例えばカンマ)はカラムの境界。つまり、少なくとも第1の文字、第2の文字と同じ文字がフィールドに存在してはならない。さもないと、データベースを処理する際、誤作動が起こる(情報処理装置は、レコードやカラムの境界ではない場所をレコードやカラムの境界であると誤認する)。以後、フィールドに存在してはならない文字を「アウト文字」、アウト文字ではない文字を「セーフ文字」と呼称する。
【0017】
アウト文字は、前述の通りデータベースの管理のために用いる文字であって、その他の目的に用いてはならない。また、将来の機能拡充(例えば、第3の文字2個以上連続したら、それ以降に存在する最初の第2の文字まではコメントであってプログラムによって編集されない部分であるとか、第3の文字に囲まれた文字列によってはプログラムが定められた処理をする(例えば文字の色を変更する)機能)のために、第3の文字(例えばスラッシュ)をフィールドに存在させてはならない。第3の文字はアウト文字である。
【0018】
前述の通り、アウト文字はフィールドに存在させてはならない。そのため、アウト文字が存在する文字列(例えば、「(,,゜Д゜)」。)をフィールドに書き込む場合は、アウト文字をセーフ文字(ただし、後述する第4の文字ではないセーフ文字に限る)のみからなる文字列に変換し、該変換をした部分とそれ以外の部分を区切る第4の文字(例えば等号)によって区切る必要がある。第4の文字は、厳密にはアウト文字ではない(アウト文字をセーフ文字のみからなる文字列に変換した部分と、そうでない部分を区切るためであればフィールドに存在してもよいため)が、アウト文字とセーフ文字を区切る以外のためにフィールドに存在してはならない文字であるため、アウト文字であるかのように扱わなければならない場合がある。(例えば「(=゜ω゜)ノ」は、アウト文字を含まない文字列であるが、第4の文字が存在するため、アウト文字から変換されたセーフ文字が存在するとプログラムが誤認するかもしれない。よって、第4の文字は、アウト文字ではないが、「第4の文字ではないセーフ文字」のみからなる文字列に変換されなければならない。)
【0019】
アウト文字は、それぞれ定められた文字列に変換される。(例えば、第1の文字はOUT1、第2の文字がOUT2、第3の文字はOUT3、第4の文字はOUT4)該変換をした部分とそうでない部分は、第4の文字によって区切られる。(つまり、「(,,゜Д゜)」は「(=OUT2==OUT2=゜Д゜)」に変換され、データベースに保存される。「(=゜ω゜)ノ」は「(=OUT4=゜ω゜)ノ」に変換され、に変換され、データベースに保存される。
(
変形例:
アウト文字は、それぞれの文字の文字コード、あるいはそれぞれの文字の文字コードから作成される文字列(例えば、文字コードを16進数に変換した文字)に変換される。ただし改行は定められた文字列(例えばOUT1)に変換される。(例えば、第1の文字はOUT1、第2の文字は2C、第3の文字は2F、第4の文字は3D)該変換をした部分とそうでない部分は、第4の文字によって区切られる。(つまり、「(,,゜Д゜)R(=゜ω゜)ノR(=,=;)/」(ただしRは改行)は「(=2C-2C=゜Д゜)=OUT1=(=3D=゜ω゜)ノ =OUT1=(=3D-2C-3D=;)=2F=」に変換され、に変換され、データベースに保存される。改行を意味する文字コードは複数存在するため、OUT1のように、変換後の文字列を決めたほうが良い。
)
【0020】
データベースに保存された文字列を読み込むときは、第4の文字列を境に、(最初を0番目とした)奇数番目が、アウト文字(または第4の文字)からセーフ文字(第4の文字を含まない)に変換された文字列であるから、第4の文字列を境に(最初を0番目とした)奇数番目を、アウト文字に変換する。(つまり、フィールドに「(=OUT2==OUT2=゜Д゜)」が保存されている場合、第4の文字を境に「(」「OUT2」「」「OUT2」「」「゜Д゜)」に分けることができる。このうち、(最初を0番目とした)奇数番目は、「OUT2」「OUT2」であるから、これらを「,」「,」に変換する。そして第4の文字を境に分けられた文字列を連結し「(,,゜Д゜)」となる。)
【0021】
(
変形例:
アウト文字や第4の文字が連続する文字列(例えば「(=,=;)」を前述の通り変換する場合、第4の文字が連続する(例えば「(=OUT4==OUT2==OUT4=;)」)となり不都合。この場合、アウト文字や第4の文字が連続する場合は、変換後の文字列に第4の文字が連続することになるから(文字が連続するということは、文字と文字の間に空文字列が挟まっているということ)第4の文字が連続する部分を、アウト文字(第4の文字を含む)から変換したセーフ文字(第4の文字を除く)に使用しない文字(以後、第5の文字と呼称)(例えば「-」)に置き換える(置換ともいう)。例えば、「(=,=;)」は「(=OUT4==OUT2==OUT4=;)」に変換されるが、第4の文字が2連続する部分を第5の文字1個に置き換える(例えば「(=OUT4-OUT2-OUT4=;)」)ことにより、変換後の文字列を減らす。
)
【0022】
(
変形例:
データベースに保存された文字列を読み込むときは、第4の文字列を境に、(最初を0番目とした)奇数番目が、アウト文字(または第4の文字)からセーフ文字(第4の文字を含まない)に変換された文字列であるから、第4の文字列を境に(最初を0番目とした)奇数番目にある文字列を、第5の文字を境に区切って、それぞれの文字列が「決められた文字列ならば該文字列に対応する文字列に変換する(例えば、「OUT1」ならば改行に変換する)」、「前述した処理ができないなら、文字コードとして扱える文字列ならば該文字コードに対応する文字に変換する(例えば「2C」ならばカンマに変換する)」、「前述した処理のいずれもできないなら、その旨を示す文字列(例えば、空文字列、〓記号)に変換する」処理をする。
)
【0023】
本実施形態は、ルーチンによって行うことができる。(ルーチンはVB.net等で用いられるプロシージャ、C言語等で用いられる関数等。)該ルーチンは、アウトな文字や第4の文字を含む文字列を、アウトな文字を含まない文字列に変換するのかそれとも逆かを指定する真理値型の引数(以下、この引数をtoDBstyleと表記する)、変換する対象の文字列を指定する文字列型の引数(以下、この引数をHStextと表記する)、該ルーチンが処理に失敗したときに返す値を指定する文字列型の引数(以下、この引数をerrと表記する)を持ち、返り値が文字列型のルーチン。該ルーチンは、第4の文字列が何であるか、ならびに、アウト文字は何であって、アウト文字ならびに第4の文字列を何に変換すべきか(何という文字列をアウト文字に変換すべきか)、第5の文字列が何であるかが設定されている。(例えば、第1の文字列は「OUT1」という文字列に、第2の文字、第3の文字、第4の文字はそれぞれの文字を意味する文字コードを英字部分を大文字とした16進数によって表記した文字列に変換する。第5の文字列は「-」。つまり、アウト文字(第4の文字を含む)は、O、U、T、1、2、3、4、5、6、7、8、9、0、A、B、C、D、E、F、-、のうち0種類以上の文字を0個以上使用した文字列に変換され、該変換された部分とそうでない部分は、第4の文字によって区切られる。)
【0024】
図2は、実施の形態1に係る情報処理装置が実施の形態1に説明した処理を実行する手順を示すフローチャート。情報処理装置1のCPU11は、プログラム12Pに基づいて以下の処理を実行する。CPU11は、引数toDBstyleに基づいて、引数HStextを「アウト文字(第4の文字を含む)がある文字列をセーフ文字のみからなる文字列に変換する」のかそれとも逆かを判定する(ステップS201)。以下の説明では、第1の文字が改行、第2の文字がカンマ(,)、第3の文字列がスラッシュ(/)、第4の文字が等号(=)、第5の文字がマイナス記号(-)である場合を例に説明する。文字列errは、例えば空文字列。
【0025】
「アウト文字(第4の文字を含む)をセーフ文字のみからなる文字列に変換する」(ステップS201:YES)場合を説明する。ここではHStextに「(,,゜Д゜)R(=゜ω゜)ノR(=,=;)/」(ただしRは改行)が代入され、これをセーフ文字のみからなる文字列に変換する場合を例に説明する。
図3を参照されたい。CPU11はプログラム12Pに基づいて、アウトな文字(第4の文字を含む)を何に変換すべきかを決定し(ステップS301)、HStext(文字列S203A)に存在するアウト文字(第4の文字列を含む)をセーフ文字に変換し、該変換部分とそうでない部分の境目に第4の文字を挿入し、第4の文字が2連続する部分を第5の文字列1個に置きかえることによって文字列S203Bを作成し(ステップS302)、該ステップによって作成された文字列が正しいか否かを点検するために、toDBstyleの真偽を逆転し、HStextに文字列S203Bを代入して本ルーチンを再帰呼び出しすることによって、文字列S203Aが作成されるかを確認する(ステップS303)。CPU11は、ステップS303にて文字列S203Aと同じ文字列が作成された場合は文字列S203Aを、それ以外の場合は文字列errを、RAM13または記憶部12に記憶し、処理を終了する。
【0026】
「セーフ文字のみからなる文字列をアウト文字(第4の文字を含む)がある文字列に変換する」(ステップS201:NO)場合を説明する。ここではHStextに「(=2C-2C=゜Д゜)=OUT1=(=3D=゜ω゜)ノ=OUT1=(=3D-2C-3D=;)=2F=」が代入され、これを、アウト文字を含む文字列に変換する場合を例に説明する。
図4を参照されたい。CPU11はプログラム12に基づいて、指定された文字列(文字列401)を、第4の文字を境に配列に分割する(配列402)。配列402の最初の要素を0番目とした奇数番目(表403A)の要素に対し、第5の文字列を境に配列に分割したもの(配列403B)を作成し(空欄は、その要素が存在しないことを意味する)、配列403Bの各々の要素に対し、「16進数の文字コードとみなして該文字コードにあたる文字に変換する事ができるなら、それを行う」「前記変換ができないなら、決められた文字列(例えばOUT1)なら、その文字列に対応する文字(例えば改行)に変換する」「前記いずれもできないなら、その旨を示す文字列(例えば、空文字列)(例えば、〓記号)に変換する」処理を、この順序で行う(配列403C)。配列403Cの各要素を連結した文字列を作成し、該文字列によって配列402の奇数番目の要素を置き換える(配列404)。配列404の各要素を連結し、文字列405を作成する。CPU11は、作成した文字列をRAM13または記憶部12に記憶し、処理を終了する。
【0027】
請求項6について説明する。
条件Aとは、例えば「第1の文字、第2の文字、第3の文字、第4の文字のいずれかである」、条件Bとは「第4の文字である」、C回とは「偶数回」、Cの値によって決まる回数とは、「Cの半分の回数」、条件Dとは「第5の文字である」ことが考えられる。これは例示であり、これ以外の条件を設定してもかまわない。
【0028】
CPU11は、プログラム12Pに基づいて、変換したい文字列に存在する条件Aを満たす部分を特定し、該部分を、条件Aを満たさない文字列である何に変換すべきかを決定し、該決定に従って該部分を変換する処理をし、該処理をした部分と、それ以外の部分の境目に条件Bを満たす文字列を挟む処理をし、条件Bを満たす文字列が所定の条件を満たす回数(C回)連続している部分を特定し、該部分を、条件Dを満たす文字列(Cの値によって決まる回数だけ連続する)に変換する処理をし、これらの処理によって作成された文字列を、RAM13または記憶部12に記憶する。
【0029】
<実施の形態2>
実施の形態2では、データベースを読み込んで、編集し、書き込む処理の一部または全部を実行する。
図8は、本実施形態に係る情報処理システムの構成を示すブロック図。情報処理システムは、情報処理装置(第1情報処理装置)1及び第2情報処理装置2をそなえる。情報処理装置1の構成は、実施の形態1と同様。
図8に示すように、情報処理装置1及び第2情報処理装置2は、通信網Nに接続されている。
ただし、通信網Nは、3台以上の情報処理装置が接続されていてもよい。
【0030】
第2情報処理装置2は、サーバ装置、パーソナルコンピュータ又はスマートフォン等のコンピュータ。第2情報処理装置2は、CPU21、記憶部22、RAM23、入力部24、表示部25、通信部26、ドライブ部27の少なくともいずれかをそなえる。第2情報処理装置2のCPU21、記憶部22、RAM23、入力部24、表示部25、通信部26、ドライブ部27の構成は、情報処理装置1のCPU11、記憶部12、RAM13、入力部14、表示部15、通信部16、ドライブ部17、と同様であるため、簡潔のため記載を省略する。
記録媒体20は、記録媒体10と同様であるため、簡潔のため記載を省略する。
ただし、3台以上の情報処理装置が接続されている場合は、3台目以降の情報処理装置がそなえるものは、第2情報処理装置2がそなえるものと同様。
【0031】
図5は、本実施形態に係るデータベース処理部の構成を示す図。
読み込み部501は、データベースが存在する場所を示す情報(例えば、第2情報処理装置2の記憶部22)(例えば、第2情報処理装置2にセットされた記録媒体10)またはデータベースから読み込んで取得されたデータの少なくともいずれかを受け取り、ストリーム記憶部511にデータベースが存在する場所を示す情報を記憶する、テキスト記憶部512にデータベースから読み込んで取得されたデータを記憶する、事の少なくともいずれかをする。(CPU11は、プログラム12Pに基づいて、所定の場所(例えば記憶部12)(例えば記憶部22)(例えば記録媒体10)(例えば記録媒体20)の場所を示す情報または該所定の場所に記憶されたデータを読み取った情報の少なくともいずれかを作成し、該情報を記憶部12またはRAM13に記憶する)
ストリーム記憶部511は、読み込み部501によって、データベースが存在する場所を示す情報を記憶する。このとき、データベースが存在する場所を示す情報はもちろん、他の場所(例えば、データベースから削除されたデータを記憶すべき場所)を示す情報を含めて記憶するものであってもかまわない。
テキスト記憶部512は、データベースから読み込んで取得されたデータを記憶する。このとき、データベースの使用ならびに編集に使用する情報(例えば、データベースをフラットファイルデータベース、つまりプレーンテキストとして保存する場合において、カラムの境目を示す文字、レコードの境目を示す文字、キー列がどのカラムであるかを示す情報、カラムの意味を定義するために必要な情報)を含めて記憶するものであってもよい。
変更記憶部513は、データベースに対し施すべき変更を記憶する。(例えば、キー列が1であるレコードの、カラムが「氏名」である部分のデータを「DEF」に変更しろ、キー列が2であるレコードを削除しろ、といった内容が記憶される)
変更部502は、変更記憶部513に対し、データベースに対し施すべき変更(例えば、「キー列が2であるレコードの、カラム「氏名」にあたる情報を「ほむら」にしろ」)を書き込む
消去部503は、変更記憶部513に対し、データベースに対し施すべき消去を書き込む。
書き込み部521は、データベースへの書き込み、データベースに書き込むべきデータの作成の、少なくともいずれかを実行する。
取得部522は、テキスト記憶部512、変更記憶部513の、少なくともいずれかを参照し、現在、データベースに何が書き込まれているかを特定する。このとき、テキスト記憶部512、変更記憶部513の内容が矛盾する場合は、変更記憶部513を優先する。(例えば、テキスト記憶部512に、キー列が2であるレコードの、カラム「氏名」が「まどか」である旨が記憶されており、変更記憶部513に、「キー列が2であるレコードの、カラム「氏名」を「さやか」にしろ」という内容が書き込まれている場合に、キー列2のカラム「氏名」のデータが何かを特定する場合は、その答えは「さやか」である)
【0032】
(
変形例:ストリーム記憶部511またはテキスト記憶部512のいずれかが存在しない形態であってもよい。この場合、読み込み部501、書き込み部521、取得部522は、ストリーム記憶部511またはテキスト記憶部512の、いずれか存在しないほうを参照しない。
)
【0033】
データベース処理部は、データ集合体(配列、連想配列、構造体、ユーザー定義型の変数、クラス、共用体等、0個以上の値を持つことができる変数。変数には、オブジェクト、及びオブジェクトのインスタンスが含まれる。構造体等のデータ集合体とは、夫々に変数である0個以上のメンバを含んでいる。データ集合体中の変数が要素と呼称される場合は、メンバには要素が含まれる。0個以上のメンバは、順番等の互いの関係が定義されていてもよく、0個以上のいずれかにデータが代入される)として扱うことができる。(例えば、クラス)
【0034】
データベース処理部がクラス(のインスタンス)である場合、読み込み部501、変更部502、削除部503、書き込み部521、取得部522はルーチンであって、ストリーム記憶部511、テキスト記憶部512、変更記憶部513は、データベース処理部の外部から参照や変更を直接することができない変数。(いわゆるプライベートな変数)
【0035】
<実施の形態3>
本実施形態では、読み込み部501を実行する。本実施形態のハードウェア構成は実施の形態2と同様。
【0036】
図9は、実施の形態3に係る情報処理装置が読み込み部501を実行する処理の手順を示したフローチャート。
図9に示す処理の手順は、読み込み部501をCPU11が実行する処理の一例。情報処理装置1のCPU11は、データベースが存在する場所を示す情報またはnullをRAM13または記憶部12に記憶する(ステップS901)。CPU11は、ステップS901にて記憶された内容がnullであるかを判断(ステップS902)し、nullでない(ステップS902:YES)場合は、ステップS901にて記憶された内容が示す場所に存在するデータを読み込み、その内容をRAM13または記憶部12に記憶する(ステップS906)。前記判断の際nullである(ステップS902:YES)場合は指定されたデータをRAM13または記憶部12に記憶する。(例えば、ステップS901にて記憶すべき内容がnullである場合は、予め定められたデータをRAM13または記憶部12に記憶する。)
【0037】
読み込み部501は、ルーチンによることができる。前記ルーチンは、データベースが存在する場所を示す情報(nullであってもよい)を示す引数HSstream、データベースから削除されたデータを記憶すべき場所(nullであってもよい)を示す引数HSstreamdelete、データベースから読み込んで取得されたデータHStext_DBstyle、フラットファイルデータベースにおけるカラムの境目が何であるかを示す引数HSkugiri、データベースにおけるどのカラムがキー列であるかを示す引数keycolumn、どのカラムが何を意味するかを定義する行がどの行であるかを示す引数titlerow、レコードの開始行がどの行であるかを示す引数startrow、という引数を有する。
(CPU11は、プログラム12Pに基づいて、前記ルーチンの引数をRAM13または記憶部12に記憶する。このとき、CPU11は、プログラム12Pに基づいて、所定の処理をしたデータ(例えば、文字列をジャグ配列に変換する)を記憶する形態であってもよい)(変形例:フラットファイルデータベースにおける行・レコードの境目が何であるかを示す引数が存在するルーチンによってもよい。)
【0038】
HStext_DBstyleは、第1の特定の文字(例えば改行)が行・レコードの境目で、第2の特定の文字(例えばカンマ)がカラムの境目であるフラットファイルデータベース、つまり文字列として与えられる。よって、少なくとも「フィールドの中に、第1の特定の文字または第2の特定の文字」場合は、フィールドに存在する該文字は、該文字を使わない形態(例えば、実施の形態1にて説明した形態)によって表現される。(例えば、ある行に「1,(,,゜Д゜)」という文字列を表現したい場合は、「1,(=2C-2C=゜Д゜)」と表記する。もし、「1,(,,゜Д゜)」と表記すると、「(,,゜Д゜)」が1個のフィールド内に収まる文字列として扱われない。)
【0039】
<<HSstreamがnullでない場合>>
ステップS902では、NOと判定されるから、ストリーム記憶部511にHSstreamが記憶される。テキスト記憶部512へは、ストリーム記憶部511に記憶されたデータをもとに読み込まれたデータが記憶される。このとき、読み込まれるデータはフラットファイルデータベース、つまりテキストファイルとして説明するが、これ以外の形態であってもよい。
【0040】
しかし、テキスト記憶部512は、特定の形態(ここでは文字列型ジャグ配列として説明する。テキスト記憶部512を、文字列型ジャグ配列を記憶するものとして説明することがあるが、これ以外の形態であってもよい)によっているため、該形態に変換する必要がある。ここでは、ストリーム記憶部511に記憶されたデータをもとに読み込まれたデータがテキスト形式であって、テキスト記憶部512を文字列型ジャグ配列であるものとして説明する。
【0041】
ストリーム記憶部511に記憶されたデータをもとに読み込まれたテキストは、HSkugiriがカラムの境目であって、特定の文字(例えば改行)がレコード・行の境目(フラットファイルデータベースのレコード・行の境目が改行であるものとして説明することがあるが、これ以外の形態であってもよい)。
【0042】
図14は、読み込み部501が実行する処理の手順を示したフローチャート。
情報処理装置1のCPU11は、プログラム12Pに基づいて、ストリーム記憶部511に記憶されたデータ(例えば
図1401)をもとに記憶部12またはRAM13または記憶部22またはRAM23から読み込まれたデータに存在する特定の文字(例えば改行)を境目として第1の配列に分割(その結果は、例えば表1402)し、該第1の配列の各要素に存在するHSkugiriを境に各要素を第2の配列(ジャグ配列)に分割(その結果は、例えば表1403)し、該第2の配列をRAM13又は記憶部12に記憶する。
【0043】
フラットファイルデータベースでは、第1の特定の文字(例えば改行)が行・レコードの境目で、第2の特定の文字(例えばカンマ)がカラムの境目。よって、少なくとも「フィールドの中に、第1の特定の文字または第2の特定の文字」がある場合は、該文字を、該文字を使わずに表現する。そのため、第2の配列を作成して、テキスト記憶部512に記憶する前に、該文字を使わずに表現している部分を、該文字に変換する必要がある。その手順は、実施の形態1に説明した通り。たとえば、ある要素に「(=2C-2C=゜Д゜)」が記憶されている場合は、実施の形態1に説明した手順によって「(,,゜Д゜)」に変換される。
【0044】
<<HSstreamがnullである場合>>
ステップS902では、YESと判定されるから、テキスト記憶部512にHStext_DBstyleをジャグ配列に変換したものが記憶される。ここでは、HStext_DBstyleを文字列として説明するが、これ以外の形態であってもよい。
【0045】
HStext_DBstyleに代入されたテキストは、HSkugiriがカラムの境目であって、特定の文字(例えば改行)がレコード・行の境目(フラットファイルデータベースのレコード・行の境目が改行であるものとして説明することがあるが、これ以外の形態であってもよい)。
【0046】
図14は、読み込み部501が実行する処理の手順を示したフローチャート。
情報処理装置1のCPU11は、プログラム12Pに基づいて、HStext_DBstyleに格納された或いは(RAM13または記憶部12またはRAM23または記憶部22に記憶された)データ(例えば
図1401)に存在する特定の文字(例えば改行)を境目として第1の配列に分割(その結果は、例えば表1402)し、該第1の配列の各要素に存在するHSkugiriを境に各要素を第2の配列(ジャグ配列)に分割(その結果は、例えば表1402)し、該第2の配列をRAM13又は記憶部12に記憶する。)
【0047】
フラットファイルデータベースでは、第1の特定の文字(例えば改行)が行・レコードの境目で、第2の特定の文字(例えばカンマ)がカラムの境目。よって、少なくとも「フィールドの中に、第1の特定の文字または第2の特定の文字」がある場合は、該文字を、該文字を使わずに表現する。そのため、第2の配列を作成して、テキスト記憶部512に記憶する前に、該文字を使わずに表現している部分を、該文字に変換する必要がある。その手順は、実施の形態1に説明した通り。たとえば、ある要素に「(=2C-2C=゜Д゜)」が記憶されている場合は、実施の形態1に説明した手順によって「(,,゜Д゜)」に変換される。
【0048】
<実施の形態4>
本実施の形態では、ストリーム記憶部511の形態を説明する。本実施形態のハードウェア構成は実施の形態2と同様。
【0049】
図15は、ストリーム記憶部511を示す図。データベース記憶部1501はデータベースが存在する場所を示す情報を記憶する。削除データ記憶部1502は、削除されたデータを記憶すべき場所を示す情報を記憶する。どちらも、データ型は例えばSystem.IO.stream型の変数。
【0050】
実施の形態3を補足する。HSstreamはデータベース記憶部、HSstreamdeleteは削除データ記憶部に記憶される。
【0051】
CPU11は、プログラム12Pに基づいて、記憶部12またはRAM13に、データベース記憶部1501として使用する部分、削除データ記憶部1502として使用する部分、の少なくともいずれかを確保する。
【0052】
<実施の形態5>
本実施の形態では、テキスト記憶部512の形態を説明する。本実施形態のハードウェア構成は実施の形態2と同様。
【0053】
データベース記憶部1601は、例えばデータベースから読み込まれたデータを記憶する。例えば、文字列型ジャグ配列。(本明細書では、データベース記憶部1601の「配列を格納する配列」を行、前記「配列を格納する配列」に格納された配列を列として説明することがある。このとき、最初の行を0行目、最初の列を0列目として説明することがある。)
【0054】
行境界記憶部1602は、フラットファイルデータベースを取り扱うときに、何という文字が行・レコードの境目であるかを記憶する。例えば、文字列型の変数または定数。
【0055】
列境界記憶部1603は、フラットファイルデータベースを取り扱うときに、何という文字がカラムの境目であるかを記憶する。例えば、文字列型の変数または定数。
【0056】
キー列位置記憶部1604は、データベース記憶部1601の、どの列がキー列であるかを記憶する。例えば、整数(integer)型の変数または定数。
【0057】
タイトル行記憶部1605は、データベース記憶部1601の、どの行がタイトル行であるかを記憶する。タイトル行とは、キー列を除く列に対し、どの列(カラム)が何を意味するカラムであるかを定義する行。例えば、整数(integer)型の変数または定数。
【0058】
レコード開始行記憶部1606は、データベース記憶部1601の、どの行以降がレコードであるかを記憶する。例えば、整数(integer)型の変数または定数。データベースは、レコードの数が0件である場合がある、例えば、タイトル行記憶部に「0」が記憶されており、レコード開始行記憶部に「1」が記憶されており、データベース記憶部に記憶されているジャグ配列が1行(最初の行を0行目と数えるため、0行目のみ存在することになる)の場合、タイトル行は存在するもののレコードが存在しないデータベースである(本明細書では、レコードが記憶されている行を「データ行」と表記することがある)。
【0059】
実施の形態3を補足する。HStext_DBstyleまたはHSstreamが示す情報をもとに読み込まれたデータはデータベース記憶部、HSkugiriは列境界記憶部、keycolumnはキー列位置記憶部、 titlerowはタイトル行記憶部、startrowはレコード開始行記憶部に記憶される。実施の形態3では、行の境界を示す文字を指定しない形であって、行境界記憶部はプログラム12Pによって定められた文字(例えば改行)が記憶される。(変形例:フラットファイルデータベースにおける行・レコードの境目が何であるかを示す引数が存在するルーチンを用いた場合は、該フラットファイルデータベースにおける行・レコードの境目が何であるかを示す引数に代入されたデータを行境界記憶部に格納する)
【0060】
(
変形例:タイトル行記憶部1605は、(例えば文字列型をキーとして整数型を返す連想配列)どのカラムがどんな意味を持つかを記憶するものであってもよい。この場合、データベース記憶部1601は、タイトル行をそなえない形態であってもよい。
)
【0061】
CPU11は、プログラム12Pに基づいて、所定の場所(例えば記憶部12またはRAM13)に、データベース記憶部1601、行境界記憶部1602、列境界記憶部1603、キー列位置記憶部1604、タイトル行記憶部1605、レコード開始行記憶部1606、の少なくともいずれかを記憶する部分を確保する。
0
【0062】
<実施の形態6>
本実施の形態では、書き込み部521を実行する。本実施形態のハードウェア構成は実施の形態2と同様。
【0063】
本実施の形態は、データベースに記憶されたデータに対し、変更記憶部513に記憶された通りの変更を行ったものを、所定の場所(例えば記憶部12またはRAM13)に書き込む。
【0064】
図11は、本実施の形態に係る情報処理装置が書き込み部521を実行する処理の手順を示したフローチャート。
図12は、本実施の形態に係る情報処理装置が行う処理の例を説明するための図。
図12では、一番上の行を0行目、一番左の列を0列目とし、タイトル行は0行目(タイトル行記憶部1605に0が記憶されている)、データ行は1列目以降(レコード開始行記憶部1606に1が記憶されている)、キー列は0列目(キー列位置記憶部1604に0が格納されている)として説明する。
【0065】
CPU11は、プログラム12Pに基づいて、ストリーム記憶部511にnullが記憶されているか否かを判断(ステップS1101)し、ストリーム記憶部511にnullが記憶されている(ステップS1101:YES)場合は、テキスト記憶部512に記憶されたデータを変更対象のデータとし(ステップS1102A)、ストリーム記憶部511にnullが記憶されていない(ステップS1101:NO)場合は、ストリーム記憶部511に記憶されている「データベースが存在する場所を示す情報」に基づいて読み込んだデータを変更対象のデータとする(ステップS1102B)。前記変更対象のデータの例は、表1201の通り。
【0066】
CPU11は、プログラム12Pに基づいて、前記変更対象のデータのタイトル行(タイトル行記憶部1605によって定義された位置にある行)の列数を、他の行の列数のうち最大であるもの(以下「最大列数」と表記)と同数にする(ステップS1103)。
図12にて説明する例の場合は、該ステップは、表1201に対して行うが、本例の場合、タイトル行の列数は最大列数と同じであるため変化しない。(ほとんどの場合、ステップ1203では最大列数は変化しない。本発明では、タイトル行の列数が他の列の列数未満にならないように制御してあるが、不具合によってその通りにならなかった場合は、ステップS1103によって修正される)
【0067】
CPU11は、プログラム12Pに基づいて、前記変更対象のデータのタイトル行に、前記変更対象のデータのタイトル行に存在せず、変更記憶部513に存在するデータを追加する(ステップS1104)。
図12にて説明する例の場合は、表1202は、変更記憶部513に存在するデータの例。本例では、
「キー列が1であるレコードの、タイトル行がCであるカラムのフィールドに1Cと書き込め」
「キー列が3であるレコードの、タイトル行がAであるカラムのフィールドに3Aと書き込め」
「キー列が5であるレコードの、タイトル行がAであるカラムのフィールドに5Aと書き込め」
「キー列が7であるレコードの、タイトル行がAであるカラムのフィールドに7Aと書き込め」
という情報が記憶されている。すなわち、タイトル行の「キー列ではないカラム」に、A、B、Cというデータが必要であるが、表1201の通りである場合は、タイトル行にCというデータが存在しない。CPU11は、プログラム12Pに基づいて、タイトル行に存在せず、かつ、変更記憶部513のタイトルとして存在するデータ(ここでは、C)を特定し、該データを前記変更対象のデータのタイトル行に追加する。その結果の例は、表1204の通り。
【0068】
CPU11は、プログラム12Pに基づいて、変更記憶部に記憶されている内容を前記変更対象のデータに書き込む(ステップS1105)。
図12にて説明する例の場合は、キー列が1、3、5、7であるレコード(行)に変更対象のデータを書き込むため、該当する行の列数を、タイトル行の列数と同じにする。その結果の例は、表1205の通り。
次に、CPU11は、プログラム12Pに基づいて、適切な位置に適切な値を書き込む。
図12にて説明する例の場合は、
キー列が1であるレコードの、タイトル行がCであるカラムのフィールドに1Cと書き込む処理と、
キー列が3であるレコードの、タイトル行がAであるカラムのフィールドに3Aと書き込む処理と、
キー列が5であるレコードの、タイトル行がAであるカラムのフィールドに5Aと書き込む処理と、
キー列が7であるレコードの、タイトル行がAであるカラムのフィールドに7Aと書き込む処理と、
を実行する。その結果尾の例は、表1206の通り。
【0069】
CPU11は、プログラム12Pに基づいて、前記変更対象のデータを、削除すべき行と、それ以外の行に分ける処理を実行する(ステップS1106)。
削除すべき行は、変更記憶部513に「削除すべきレコード」として記憶された行。その一例は、表1203の通り。本例では、変更記憶部513に「キー列が4であるレコードを削除しろ」という情報が記憶されている。前記変更対象のデータは、レコード開始行記憶部1606に指定された行以降のみが、削除すべき行に分類される可能性がある。
図12にて説明する例の場合は、キー列が4であるレコード(行)が削除すべき行であるため、削除すべき行のみを抜き出したデータ(表1208)と、それ以外の行のみを抜き出したデータ(表1207)が作成される。
以後、「前記第2の変更対象のデータ」と表記する場合は、ステップS1106によって作成された「削除すべき行以外のみを抜き出したデータ」(
図12にて説明する例の場合は、表1207)を指す。
以後、「前記第2の削除対象のデータ」と表記する場合は、ステップS1106によって作成された「削除すべき行のみを抜き出したデータ」(
図12にて説明する例の場合は、表1208)を指す。
【0070】
CPU11は、プログラム12Pに基づいて、前記第2の変更対象のデータならびに前記第2の削除対象のデータを文字列に変換する(ステップS1107)。
本ステップで作成する文字列はフラットファイルデータベースとして使用するため、行境界記憶部1602に記憶された文字が行・レコードの境目、列境界記憶部1603に記憶された文字がカラムの境目として使用される。
よって、少なくともフィールドに行境界記憶部1602に記憶された文字と同じ文字あるいは列境界記憶部1603に記憶された文字が存在する場合、該当する文字をそのまま文字列に変換するとデータベースを処理する際に誤作動を起こす(例えば、列境界記憶部1603に「,」が記憶され、フィールドに「(,,゜Д゜)」が格納されているときは、フィールドに存在する「,,」を他の形態により表現しなければならない)。
よって、CPU11は、プログラム12Pに基づいて、フィールドの文字列を適切な形態に変換する。該変換処理の内容は、実施の形態1に説明した通り。
図12にて説明する例の場合(ここでは、列境界記憶部1603に「,」が、行境界記憶部1602に改行が記憶されているものとして説明する)は、前記第2の変更対象のデータならびに前記第2の削除対象のデータ(いずれもジャグ配列)の各要素である配列を、列境界記憶部1603に記憶された文字を挟んで連結した文字列を作成し、該文字列を要素とする1次元配列を作成し、該1次元配列の各要素である文字列を、行境界記憶部1602に記憶された文字を挟んで連結した文字列を作成する。つまり、前記第2の変更対象のデータは文字列1209に示す通りの文字列となり、前記第2の削除対象のデータは文字列1210に示す通りの文字列となる。
以後、前記第2の変更対象のデータから作成された文字列を「存続文字列」、前記第2の削除対象のデータから作成された文字列を「削除文字列」と表記する。
【0071】
CPU11は、プログラム12Pに基づいて、例えば存続文字列をRAM13または記憶部12に記憶する(ステップS1108)。ただし、ステップS1108は、ステップS1109ならびにステップS1110の後に実行する形態であってもよい。
【0072】
CPU11は、プログラム12Pに基づいて、ストリーム記憶部511にnullが記憶されているか否かを判断(ステップS1108)し、ストリーム記憶部511にnullが記憶されている場合は(ステップS1108:YES)は、存続文字列または削除文字列の少なくともいずれかをストリーム記憶部511(データベースが存在する場所を示す情報を記憶)が示す場所に保存する(RAM13または記憶部12またはRAM23または記憶部22に記憶する)。
詳しく説明すると、次の通り。
データベース記憶部1501にnullが記憶されているか否かを判断(ステップS1108)し、データベース記憶部1501にnullが記憶されている場合は(ステップS1108:YES)は、存続文字列をデータベース記憶部1501(データベースが存在する場所を示す情報を記憶)が示す場所に保存する(RAM13または記憶部12またはRAM23または記憶部22に記憶する)。
削除データ記憶部1502にnullが記憶されているか否かを判断(ステップS1108)し、削除データ記憶部1502にnullが記憶されている場合は(ステップS1108:YES)は、削除文字列を削除データ記憶部1502(データベースが存在する場所を示す情報を記憶)が示す場所に保存する(RAM13または記憶部12またはRAM23または記憶部22に記憶する)。
【0073】
(
変形例:
削除データ記憶部1502が示す場所にすでにデータが存在する場合は、該データに追記、上書きなどをする形態であってもよい
)
【0074】
本実施の形態は、ルーチンによることができる。該ルーチンは、引数を持たず、ストリーム記憶部511(ストリーム記憶部511が示す位置に存在する情報を含んでもよい)、テキスト記憶部512、変更記憶部513を参照し、プログラム12Pに基づいた動作をCPU11に実行させる。返り値は、例えば、ストリーム記憶部511に記憶されたデータならびに存続文字列を格納したデータ集合体(例えばクラス)。
【0075】
<実施の形態7>
本実施の形態では、変更部502を実行する。本実施形態のハードウェア構成は実施の形態2と同様。
【0076】
本実施の形態は、データベースの、何というキーを持つレコードの、何というカラムであるフィールドに、何を書き込むべきかを示す情報を、所定の場所(例えば記憶部12またはRAM13)に記憶するものである。
【0077】
変更部502は、データを書き込むレコードおよびカラムおよび書き込むデータ(例えば、文字列)の指定を受け付けて、該指定の通りにデータベースを変更すべき旨の情報を変更記憶部513(更新記憶部1310)に書き込む。(変形例:該指定の通りにデータベースを変更する。)
【0078】
図17は、実施の形態7に係る情報処理装置が変更部502の一部である更新記憶部1310を実行する処理の手順を示したフローチャート。
【0079】
CPU11は、プログラム12Pに基づいて、更新記憶部1301にnullが格納されているかを確認(ステップS1701)し、更新記憶部1301にnullが格納されている場合(ステップS1701:YES)は、更新記憶部1301を、要素数0のデータ集合体(例えば連想配列)とする。
【0080】
CPU11は、プログラム12Pに基づいて、更新記憶部1301に書き込もうとするキーと同じキーがすでに更新記憶部1301に存在するかを確認(ステップS1703)し、その通りである場合(ステップS1703:YES)は、更新記憶部1301に存在する、書き込もうとするキーと同じキーに対応する値を第2のデータ集合体(例えば、連想配列)とする。そうでない場合(ステップS1703:NO)は、要素数0のデータ集合体(例えば連想配列)を作成し、これを第2のデータ集合体とする。
「キー列が11であるレコードのカラムがDであるフィールドの値を11Dにしろ」という意味の情報を更新記憶部1301に記憶させたい場合を例に説明する。更新記憶部1301に、「11」というキーが存在する場合は、該キーに対応する値を第2のデータ集合体とし、それ以外の場合は、要素数0のデータ集合体を作成し、これを第2のデータ集合体とする。
【0081】
第2のデータ集合体は、例えば「文字列をキーとし文字列を返す連想配列」であって、更新記憶部1301に記憶されるデータ集合体は、例えば「数値をキーに第2のデータ集合体を返す連想配列」。
【0082】
CPU11は、プログラム12Pに基づいて、前記第2のデータ集合体にカラムとフィールドの組み合わせを書き込む。(ステップS1706)
「キー列が11であるレコードのカラムがDであるフィールドの値を11Dにしろ」という意味の情報を更新記憶部1301に記憶させたい場合を例に説明する。前記第2のデータ集合体のキーに「D」が存在する場合は、該キーに対応する値を「11D」に変更する。前記第2のデータ集合体のキーに「D」が存在しない場合は、前記第2のデータ集合体のキーと値の組み合わせに、「D」をキーに「11D」を値とする組み合わせを追加する。
【0083】
CPU11は、プログラム12Pに基づいて、前記第2のデータ集合体を、更新記憶部1301に追加する(RAM13または記憶部12に記憶する)。
「キー列が11であるレコードのカラムがDであるフィールドの値を11Dにしろ」という意味の情報を更新記憶部1301に記憶させたい場合を例に説明する。更新記憶部1301のキーに「11」が存在する場合は、該キーに対応する値を前記第2のデータ集合体に変更する。更新記憶部1301のキーに「11」が存在しない場合は、更新記憶部1301のキーと値の組み合わせに、「11」をキーとし、前記第2のデータ集合体を値とする組み合わせを追加する。
【0084】
(
変形例:
本実施の形態では、連想配列を使用する場合を例示したが、連想配列ではないデータ集合体を用いるものであってもよい。例えば、2つのリストを作成し、第1のリストに連想配列のキーにあたるもの、第2のリストに連想配列の値にあたるものを記憶する等。
)
【0085】
(
変形例:
本実施の形態は、更新記憶部1301を変更することであり、他の実施の形態と組み合わせることによって、更新記憶部1301を介してデータベースの内容を変更する事ができるが、本実施の形態は、データベースを直接変更するものであってもよい。
)
【0086】
変更部502は、ルーチンによって行うことができる。該ルーチンは、書き込みたいレコードのキーを示す引数code(例えば、整数型)、前記レコードにおける書き込む対象であるカラムを示す引数title(例えば、文字列型)、前記レコードの前記カラムに何を書き込むかを示す引数data(例えば、文字列型)を持つ。(例えば、キー列が1であるレコードの、カラムがAであるフィールドに1Aを書き込ませたい場合は、codeに1、titleにA、dataに1Aを代入する)返り値は存在しないが、例えば書き込みの正否を返す値を返り値としてもよい。
【0087】
CPU11は、プログラム12Pに基づいて、更新記憶部1301がnullであるかを確認(ステップS1701)し、更新記憶部1301がnullである場合(ステップS1701:YES)は、更新記憶部1301を、0個のキーを持つデータ集合体(例えば、整数をキーとし、文字列から文字列を返す連想配列を値とする連想配列。)とする。
【0088】
CPU11は、プログラム12Pに基づいて、更新記憶部1301のキーにcodeと同じものが存在するかを判断(ステップS1703)し、更新記憶部1301のキーにcodeと同じものが存在する(ステップS1703:YES)場合は、該キーに対応する値を第2のデータ集合体とし(ステップS1705)、これ以外の場合は0個のキーを持つデータ集合体を作成し、これを第2のデータ集合体とする(ステップS1704)。
CPU11は、プログラム12Pに基づいて、前記第2のデータ集合体のキーと値の組み合わせとして、titleとdataを書き込む(すでにキーとしてtitleと同じものが存在する場合は、titleに対応する値をdataに変更する)(ステップS1706)。
【0089】
CPU11は、プログラム12Pに基づいて、更新記憶部1301に、codeをキーとし前記第2のデータ集合体を値とするキーと値の組み合わせを書き込む。(すでにキーとしてcodeと同じものが存在する場合は、codeに対応する値を前記第2のデータ集合体に変更する)。
【0090】
<実施の形態8>
本実施の形態では、変更記憶部513の形態を説明する。本実施形態のハードウェア構成は実施の形態2と同様。
【0091】
本実施の形態は、データベースの、何というキーの、何というカラムに何を書き込むべきかと、データベースの、何というキーを削除すべきかを、所定の場所(例えば記憶部12またはRAM13)記憶するものである。
【0092】
図13は、変更記憶部513および変更記憶部513に格納されたデータの一例を示す図。
【0093】
更新記憶部1310は、データべースに対して施すべき変更(本実施の形態では、変更と表記する場合、特に断りがなければ新規データの追加を含む)を記憶する。データ型は、例えば「整数型」をキーとして「文字列型をキーとして文字列型を返す連想配列」を返す連想配列。
【0094】
削除記憶部1350は、データベースに対して施すべき削除を記憶する。データ型は、例えば整数型のリスト、コレクションなどのデータ集合体。
図13に示す例では、「キー列が4、5であるレコードを削除しろ」という意味。
【0095】
キー1311は、更新記憶部1310(連想配列)のキー。
図13に示す例では、更新記憶部1310は、1、3、7というキーを持つ連想配列であるから、データベースの、キー列が1、3、7であるレコードに対し変更すべき旨が記憶されている。
【0096】
値1312は、更新記憶部1310(連想配列)の各々のキーに対応する値であって、データ型は、例えば文字列型から文字列型を返す連想配列。
図13に示す例では、「1」をキーとして返す値は、「A」から「1AA」、「C」から「1CC」を返す連想配列である。これは、「キー列が1であるレコードの、カラムがAAであるフィールドの値を1AAにしろ」「キー列が1であるレコードの、カラムがCCであるフィールドの値を1CCにしろ」という意味。3、7をキーとして返す値についても、同様の方式で記憶されている。
【0097】
連想配列1320は、更新記憶部1310(連想配列)の各々のキーに体操する値である連想配列。キー1321は、連想配列1320のキー、値1322は、連想配列1320の値。
【0098】
CPU11は、プログラム12Pに基づいて、所定の場所(例えば記憶部12またはRAM13)に、更新記憶部1310、削除記憶部1350、の少なくともいずれかを記憶する部分を確保する。
【0099】
(
変形例:
本実施の形態では、整数型(以下「データ1」)をキーとして第2の連想配列(以下「データ2」)を返す連想配列と、該第2の連想配列は、文字列(以下「データ2A」)をキーとして文字列(以下「データ2B」)を返す連想配列である場合を例示したが、これによらないデータ集合体を用いてもよい。
)
【0100】
<実施の形態9>
本実施の形態では、消去部503を実行する。本実施形態のハードウェア構成は実施の形態2と同様。
【0101】
本実施の形態は、データベースから削除したいレコードのキー列の指定を受け付けて、該キー列を削除すべき旨の情報を削除記憶部1350に記憶する。
【0102】
CPU11は、プログラム12Pに基づいて、削除記憶部1350にnullが格納されているかを確認する(ステップS1801)。削除記憶部1350にnullが格納されている(ステップS1801:YES)は、削除記憶部1350を、記憶されたキーが0個であるデータ集合体とする(ステップS1802)。
削除記憶部1350は、例えばリスト、コレクション等のデータ集合体である。
【0103】
CPU11は、プログラム12Pに基づいて、削除記憶部1350に書き込もうとするキーと同じデータが削除記憶部1350に存在するかを確認する(ステップS1803)。削除記憶部1350に書き込もうとするキーと同じデータが削除記憶部1350に存在しない(ステップS1803:NO)場合は、削除記憶部1350に書き込もうとするキーを、削除記憶部1350に書き込む(RAM13または記憶部12に記憶する)。
「キー列が13であるレコードを削除しろ」という情報を削除記憶部1350に書き込む場合を例に説明する。削除記憶部に「13」という値が記憶されていない場合は、削除記憶部1350に、「13」という値を記憶する。
【0104】
<実施の形態10>
本実施の形態では、取得部522を実行する。本実施形態のハードウェア構成は実施の形態2と同様。
【0105】
本実施の形態は、変更記憶部513を探索し、テキスト記憶部512を探索する。前記探索の結果、矛盾するデータが記録されている場合は、変更記憶部513を優先する。(例えば、「キー列が1であるレコードのカラムがCであるフィールド」を探索する際、変更記憶部513に「1C」が記憶されていて、テキスト記憶部512に「1CC」が記憶されている場合は、「1C」を優先する。
【0106】
本実施の形態では、キーとカラムの指定を受け付けて、指定されたキーを持つレコードの、指定されたカラムに存在するデータを返す。
図21は、本実施の形態に係る情報処理装置が、変更記憶部513、テキスト記憶部512の少なくともいずれかからデータを探索する手順を示すフローチャート。
【0107】
変更記憶部513から探索する手順を説明する。
CPU11は、プログラム12Pに基づいて、更新記憶部1310に、探索しようとするキーが存在するかを判断(ステップS2101)し、更新記憶部1310に、探索しようとするキーが存在する(ステップS2101:YES)場合は、更新記憶部1310に記憶されているキーに対応する値を取得する(ステップS2102)。(例えば、「16」というキーを持つレコードのデータを取得したい場合は、ステップS2101にて、更新記憶部1310に「16」というキーが存在するかを判断し、該キーが存在する場合は、ステップS2102にて該キーに対応する値を、更新記憶部1310から取得する)
【0108】
CPU11は、プログラム12Pに基づいて、ステップS2102にして取得したデータのキーに、探索しようとするカラムが存在するかを判断(ステップS2103)し、前記ステップS2102にして取得したデータのキーに、探索しようとするカラムが存在(ステップS2103:YES)場合は、前記ステップS2102にて取得したデータのキーに対応する値を記憶部12またはRAM13に記憶(ステップS2104)し、処理を終了する。(例えば、「D」というカラムにおけるデータを取得したい場合は、ステップS2102にて取得したデータのキーに「D」が存在するかを核にし、ステップS2102にて取得したデータのキーに「D」が存在する場合は、該キーに対応する値を、記憶部12またはRAM13に記憶する。)前記ステップS2102にして取得したデータのキーに、探索しようとするカラムが存在しない(ステップS2103:NO)場合は、テキスト記憶部512から探索する手順(ステップS2111以降)に移行する。
ステップS2104では、削除記憶部1350に該当するキーが存在する場合は、は、該当するデータが存在しない旨の情報を記憶部12またはRAM13に記憶する動作(図示しない)を含む。
【0109】
テキスト記憶部512から探索する手順を説明する。この手順は、更新記憶部1310に、探索しようとするキーが存在しない(ステップS2101:NO)場合に実施される。
CPU11は、プログラム12Pに基づいて、テキスト記憶部512のキー列を探索し、探索しようとするキーがキー列に存在する位置を特定(ステップS2111)し、前記ステップS2111にて、探索しようとするキーがキー列に存在するレコードの位置を特定できたかを判断(ステップS2112)し、前記ステップS2111にて、探索しようとするキーがキー列に存在するレコードの位置を特定できなかったとき(ステップS2112:NO)は、該当するデータが存在しない旨の情報を記憶部12またはRAM13に記憶(ステップS2113)し、処理を終了する。
【0110】
前記ステップS2111にて、探索しようとするキーがキー列に存在するレコードの位置を特定できた(ステップS2112:YES)場合は、テキスト記憶部512のタイトル行(タイトル行とは、キー列を除く列にて、どの列が何を意味するカラムであるかを定義する行)を探索し、探索しようとするカラムが存在する位置を特定する(ステップS2114)。ステップS2114にて、探索しようとするカラムの位置が特定できたかを判断(ステップS2115)し、ステップS2114にて、探索しようとするカラムの位置が特定できなかった(ステップS2115:NO)場合は、該当するデータが存在しない旨の情報を記憶部12またはRAM13に記憶(ステップS2113)し、処理を終了する。
前記ステップS2115にて、探索しようとするカラムの位置が特定できた場合は、ステップS2111にて特定したレコードの、ステップS2114にて特定したカラムにあるフィールドに存在する情報を記憶部12またはRAM13に記憶する。これができないときは、該当するデータが存在しない旨の情報を記憶部12またはRAM13に記憶する(ステップS2117)。処理を終了する。
【0111】
ステップS2111の一例を説明する。テキスト記憶部に、キー列が1、2、3であるカラムが存在するとする。このとき、キー列が1、2、3のいずれかであるカラムを探索した場合はステップS2112がYESとなり、それ以外の場合はステップS2112がNOとなる。
【0112】
ステップS2114の一例を説明する。タイトル行のキー列を除く列に、A、B、Cというデータが存在するとする。このとき、A、B、Cのいずれかを探索した場合はステップS2115がYESとなり、それ以外の場合はステップS2115がNOとなる。
【0113】
ステップS2117の一例を説明する。例えば、ステップS2111にて3行目に該当するレコード、ステップS2114にて5列目に該当するカラムが存在する場合は、テキスト記憶部512の3行目かつ5列目のフィールドに存在するデータを記憶部12またはRAM13に記憶する。
【0114】
本実施の形態は、ルーチンによることができる。該ルーチンは、例えば引数として、取得したいレコードのキーを示す引数code(例えば、整数型)、取得したいカラムを示す引数title(例えば、文字列型)、データを取得できなかった場合に返す値err(例えば、文字列型)を持ち、返り値は例えば文字列型(データを取得できなかった場合errを返すため、errが文字列型かどうかにかかわらず、errと返り値は同じデータ型)。(ルーチンの動作中にエラーが発生した場合および該当するデータが見つからない場合にerrを返すが、ルーチンの動作中にエラーが発生した場合および該当するデータが見つからない場合に異なる値を返す形態であってもよい。その場合は、例えばerr1、err2のように、引数の数が変わってもよい)
【0115】
該ルーチンは、変更記憶部1310にcodeと同じものがキーとして存在するかを確認(ステップS2101)し、変更記憶部1310にcodeと同じものがキーとして存在する(ステップS2101:YES)場合は該キーに対応する値を第2のデータ集合体(例えば、連想配列)として取得する(ステップS2102)。前記第2のデータ集合体に、titleと同じものがキーとして存在するかを確認(ステップ2103)し、前記第2のデータ集合体に、titleと同じものがキーとして存在する(ステップS2103:YES)は、前記第2の集合体の該キーに対応する値を返り値とし(記憶部12またはRAM13に記憶)、処理を終了する(ステップS2104)。前記ステップS2101がNOである場合、前記ステップS2103がNOである場合は、ステップ2111に移行する。
前記ステップ2104では、削除記憶部1350にcodeと同じものが記憶されている場合は、errを返り値とし(記憶部12またはRAM13に記憶)、処理を終了する(図示しない)。
【0116】
テキスト記憶部512のレコードに相当する位置に存在するキー列にcodeと同じデータが存在するかを探索(ステップS2111)し、テキスト記憶部512のレコードに相当する位置に存在するキー列にcodeと同じデータが存在する位置を特定できたかを判断(ステップ2112)し、レコードに相当する位置に存在するキー列にcodeと同じデータが存在する位置を特定できなかった(ステップS2112:NO)場合は、errを返り値とし(記憶部12またはRAM13に記憶)、処理を終了する(ステップS2113)。
【0117】
キスト記憶部512のレコードに相当する位置に存在するキー列にcodeと同じデータが存在する位置を特定することができた(ステップS2112:YES)場合は、テキスト記憶部512のキー列を除くタイトル行に、titleと同じデータが存在する位置を特定する(ステップS2114)。テキスト記憶部512のキー列を除くタイトル行に、titleと同じデータが存在する位置を特定できたかを判断(ステップS2115)し、テキスト記憶部512のキー列を除くタイトル行に、titleと同じデータが存在する位置を特定できなかった(ステップS2115:NO)場合は、errを返り値とし(記憶部12またはRAM13に記憶)、処理を終了する(ステップS2116)。
【0118】
テキスト記憶部512のキー列を除くタイトル行に、titleと同じデータが存在する位置を特定できた場合(ステップS2115:YES)は、ステップS2111にて特定したレコードの、ステップS2114にて特定したカラムのフィールドに存在するデータを返り値とし(記憶部12またはRAM13に記憶)、処理を終了する(ステップS2117)。
【0119】
前記ルーチンの一部または全部にエラートラップを設置し、該エラートラップ内でエラーが発生した場合は、返り値をerrとする()形態であってもよい。
【0120】
<実施の形態11>
変更部502を実施する実施の形態は、実施の形態7に説明した通りだが、本実施の形態にて説明する実施の形態であってもよい。
【0121】
フラットファイルデータベースなど、数値を文字列等の一定の形式に変換して書き込むデータベースの場合は、言語によって数値の表現方法が違うから、言語によって間違って処理されるおそれがある。(例えば23.45とう数値を登録しようとする場合、日本語や英語では「23.45」と表記するが、スペイン語等、「23,45」と表記する場合がある。この場合、データベースを記録した言語とは違う言語を用いる情報処理装置が読み込んだ場合、数値が誤って読み込まれる恐れがある)。
【0122】
図19は、変更部502の一例を示す図。文字列変更部S1901は、実施の形態7における変更部502と同様。
【0123】
十進変更部S1902の動作を説明する。十進変更部1902は、データを書き込むレコードおよびカラムおよび書き込む数値の指定を受け付けて、該指定の通りにデータベースを変更すべき旨の情報を変更記憶部513(更新記憶部1310)に書き込む。(変形例:該指定の通りにデータベースを変更する。)
【0124】
CPU11は、プログラム12Pに基づいて、書き込もうとする数値(以下Xと表記)を0への丸め(Xと比較し0に近い(0との差が小さい)いくつかの整数のうち、最もXとの差が小さい数値への変更)をした数値(以下Aと表記)と、XとAとの差の絶対値(以下Bと表記)を計算するステップ(ステップS2001)、Bが整数になるまでBを10倍する処理を繰り返して得た値(以下Cと表記)を計算するステップ(ステップS2002)、Aと、小数点を意味する記号(例えばピリオド)、Cを連結し文字列を作成するステップを実行し(ステップS2004)、文字列変更部1901を実行する。このとき、書き込むべき文字列はステップS2004にて作成した文字列。(ステップS2005)。
前記小数点を意味する記号は、例えばプログラム12Pによってきめられており、使用言語にかかわらず、例えばプログラム12Pは、該記号を小数点として扱う。小数を格納することがある変数を用いる場合のデータ型は、十進型が望ましい。
【0125】
前記計算の一例を示す。
X=16.705の場合、A=16、B=0.705、C=705、となり、「16.705」という文字列が作成される。もしXを直接文字列に変換する処理をした場合、プログラム12Pを実行する情報処理装置が使用する言語など、状況によっては、「16,705」など、不適切な文字列となるおそれがある。
X=-45.6492の場合、A=-45、B=0.6492、C=6492となり、「-45.6492」という文字列が作成される。もしXを直接文字列に変換する処理をした場合、プログラム12Pを実行する情報処理装置が使用する言語など、状況によっては、「-45,6492」など、不適切な文字列となるおそれがある。
【0126】
十進変更部S1902は、ルーチンによることができる。該ルーチンは、書き込むべきレコードのキーをcode(例えば、整数型)、書き込むべきカラムをtitle(例えば、文字列型)、フィールドに書き込むべき数値をdata(例えば、十進型)とし、前記計算を行い、実施の形態7にて説明したルーチンを実行する。このとき、code、titleをそれぞれキー、カラムを意味する引数として渡し、フィールドに書き込むべき文字列は、前記処理によって作成された文字列を引数として渡す。
【0127】
数値変更部S1903の動作を説明する。
数値変更部S1903は、ルーチンによることができる。該ルーチンは、書き込むべきレコードのキーをcode(例えば、整数型)、書き込むべきカラムをtitle(例えば、文字列型)、フィールドに書き込むべき数値をdata(例えば、浮動小数点型)とし、dataを十進型に変換し(以下data_decと表記)、code、title、data_dicを引数として十進変更部S1902を実行する。
【0128】
<備考>
本明細書では、配列を取り扱う場面があるが、コレクションやリストなど、配列のように扱うことができる方法であれば、必ずしも配列でなくてもよい。
本明細書では、情報処理装置1のCPUが第2情報処理装置2の一部または全部を動作させる表現があるが、情報処理装置1と第2情報処理装置2が通信をし、該通信内容に基づいて、第2情報処理装置2のCPU21が動作することによって、第2情報処理装置2の一部または全部を動作させるものであってもよい。
本明細書では、記憶部やRAMにデータを読み書きする表現があるが、ドライブ部を介して記憶媒体にデータを読み書きするものであってもよい。
本明細書では、プログラムが記憶部に記憶されている表現があるが、その他の場所(例えば、記録媒体)(例えば、通信網を介して接続されている他の情報処理装置)に記憶されていてもよい。
本明細書では、「第1の文字」のように、「〜文字」という表現があるが、該部分を「文字列」と読み替えてもよい。
テキスト記憶部512を、文字列型ジャグ配列を記憶するものとして説明することがあるが、これ以外の形態であってもよい
フラットファイルデータベースのレコード・行の境目が改行であるものとして説明することがあるが、これ以外の形態であってもよい。
フラットファイルデータベースのカラムの境目がカンマであるものとして説明することがあるが、これ以外の形態であってもよい。
本明細書では、ストリーム記憶部という表現を用いることがあるが、必ずしもストリームとして記憶するものでなくてもよい。
本明細書では、いくつかのハードウェア構成を記しているが、この通りでなければならないという意図はなく、本明細書に記載の発明を実施することができる形態であれば、任意のハードウェア構成をとりうる。
本明細書では、存在するデータに対し変更を施す旨の表現をすることがあるが、特に明記されていない限り、存在しないデータを新しく追加することを含む。
本明細書では、データが格納されていないことを「nullが格納されている」のように表現することがある。
本明細書は、第1の物が第2の物を変更し、変更された前記第2の物を参照し、第3の物を変更する表現があるが、前記第1の物が、前記第3の物を変更するものであってもよい。例えば、ルーチンが記憶部やRAMに記憶されたデータを変更し、前記データを参照してデータベースの内容を変更するかわりに、前記ルーチンが前記データベースの内容を変更するものであってもよい。
本明細書で説明するルーチンの一部または全部にエラートラップを設置し、該エラートラップ内でエラーが発生した場合は、返り値を、エラーを意味する予め定められた値とする形態であってもよい。
本明細書では、エラーが発生したときや、該当するデータが見つからないときに決められた値を返す旨を記した場合があるが、エラーが発生したときと、該当するデータが見つからないときとで、異なる値を返す形態であってもよい。その場合、ルーチンの引数の数が変わってもよい。
本明細書では、実施の形態2と同様であるハードウェア構成は、実施の形態1と同様であってもよい。
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。また、各実施の形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。