(58)【調査した分野】(Int.Cl.,DB名)
請求項1〜3の少なくともいずれかに記載のプログラムによって変換された文字列Bを、前記変換をする前の文字列Aに変換する処理を情報処理装置に実行させるプログラムであって、
前記文字列Bは第3の文字列を偶数個含み、
前記文字列Bに含まれる奇数個目の第3の文字列の次の文字から、その次の第3の文字列の1文字前までの間を、
請求項1〜3に記載の所定のルールCに基づいて置き換えられた文字列とみなし、
前記所定のルールCに基づいて変換された部分を、所定のルールC'に基づいて変換する処理を情報処理装置に実行させる
ことを特徴とするプログラム。
【発明を実施するための形態】
【0011】
本明細書に記載の実施形態を、
図1を参照し説明する。
【0012】
情報処理装置100
情報処理装置100は、例えば、サーバ装置、パーソナルコンピュータ、スマートフォン等。
【0013】
情報処理装置100は、CPU101、記憶部102、RAM103、をそなえる。
【0014】
実施内容によっては、入力部104、表示・出力部105、通信部106、の、少なくともいずれかをそなえる形態であってもよい。
【0015】
CPU101
CPU101は、(CPUとはCentral Processing Unit)バスを介してハードウェア各部と接続されている。
【0016】
CPU101は、例えば1個以上のCPUまたはマルチコアCPUをそなえる。
【0017】
CPU101は、記憶部102に記憶されたプログラム102Pに従い、ハードウェア各部を制御する。
【0018】
記憶部102
記憶部102は、例えばハードディスク、大容量メモリ。
【0019】
ドライブ部(図示しない)を介して記憶媒体(図示しない)から、CPU101が処理を行う際に必要となるデータおよびプログラムを読み取る形態、あるいは、前記読み取ったデータおよびプログラムを例えばプログラム102Pとして例えば記憶部102に格納する形態であってもよい。
【0020】
プログラム102P
プログラム102Pは、例えば記憶部102に記憶されるプログラム。通信部106を介してインストールされる形態であってもよいし、記憶媒体(図示しない)から、ドライブ部(図示しない)を介してインストールされる形態であってもよい。
【0021】
RAM103
RAM103は、(RAMとはRandom Access Memory)例えばSRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)、フラッシュメモリ等。
【0022】
RAM103は記憶部としても機能し、CPU101による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【0023】
入力部104
入力部104は、マウスまたはキーボード等の入力デバイス。受け付けた操作情報をCPU101へ送信する。
【0024】
表示・出力部105
表示・出力部105は、例えば液晶ディスプレイ(CPU101から送信された画像データを表示する)、スピーカー(CPU101から送信されたデータを音声として発生させる)、プリンタ(CPU101から送信されたデータを印刷する)等。
【0025】
通信部106
通信部106は、例えば無線LANカードまたは携帯電話用通信モジュール等であり、通信網Nを介して各種情報を送受信する。
【0026】
備考
データベース(図示しない)は、情報処理装置100における記憶部102に記憶するものであってもよいし、通信網Nを介して送受信できるほかの情報処理装置に記憶するものであってもよい。
【0027】
本明細書によって開示される発明を用いたプログラムは、例えば記憶部102に記憶され、入力部104を介して行われた入力に基づいてプログラム102Pが動作し、その結果を表示・出力部105に出力させる形態であってもよい。
【0028】
ほかの情報処理装置から通信部106を介して提供されたデータに基づいてプログラム102Pが動作し、その結果を通信部106を介してほかの情報処理装置に提供する形態であってもよい。
【0029】
図2は、実施の形態1におけるデータベース処理部の図。
【0030】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103にクラス(のインスタンス)として作成・記憶・動作させる。
【0031】
データベース処理部200TB
データベース処理部200TBは、本実施の形態におけるデータベース処理部。
【0032】
例えば、クラス(のインスタンス)によって実現される。
【0033】
情報201
情報201は、データベースに記憶されている情報。
【0034】
例えば、フラットファイルデータベースにおける文字列。
【0035】
設定202
設定202は、データベースを扱うために必要な情報。
【0036】
例えば、データベースが存在するパス(フラットファイルデータベースにおける、データベースとなっているファイルおよび該ファイルが存在するフォルダのパス)、フラットファイルベースにおける行ならびに列を区切る文字が何であるか、カラムの意味を定義する行の位置、主キーとして扱うカラムの位置、といった情報。
【0037】
情報203
情報203は、データベースに記憶されている情報。
【0038】
例えば、フラットファイルデータベースにおける文字列。
【0039】
情報204
情報204は、データベースに書き込まれる情報。
【0040】
例えば、save部212は、情報203に対し、chan部223、del部224の記憶内容に基づいた処理を行い、その情報を情報204として返す。
【0041】
set部211
set部211は、情報201、設定202を受け取り
(例えば、set部211はルーチンであって、該ルーチンは、情報201、設定202を引数とする)、
前記情報201を、bef部222に、前記設定202を、setg部221に記憶する。
【0042】
save部212
save部212は、情報203を受け取り、前記情報203に対し、(a:chan部223、del部224の記憶内容に基づいた処理を行い)、その結果を情報204として返す。
【0043】
これは、データベース処理部200TBは、(b:複数の情報処理装置によって取り扱われていることがあり)、
もし、save部212が、bef部222に対し前記(a)をするならば、前記(b)のため、ほかの情報処理装置によって行われたデータベースの変更内容が消失するおそれがあるため。
【0044】
setg部221
setg部221は、設定202の内容を、set部211を介して記憶してある。
【0045】
bef部222
bef部222は、情報201の内容を、set部211を介してに記憶してある。
【0046】
chan部223
chan部223は、bef部222の内容に対しすべき、レコードの変更およびレコードの追加を記憶する。
【0047】
del部224
del部224は、bef部222の内容に対し削除すべきレコードの主キーを記憶する。
【0048】
ただし、bef部222およびchan部223の内容に対し削除すべきレコードの主キーを記憶するものであってもよい。
【0049】
処理部231
処理部231は、1個以上の処理部だが、ここでは1個の処理部として図示する。処理部231の説明は後述する。
【0050】
備考
set部211、save部212、処理部231は、データベース処理部200TBの外部から使用することができる(処理部231は、データベース処理部200TBの外部から使用できないものがあってもよい)
bef部222、chan部223、del部224は、set部211、save部212、処理部231の一部または全部が、必要な情報を作成するために用いられ、望ましくはデータベース処理部200TBの外部から使用できない仕様とする。(カプセル化)
図3は、実施の形態2における文字列の置き換えを示す図。
図3では、改行をRと表記する。
【0051】
ハードウェア動作(文字列300から文字列305)
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103に記憶してある文字列と、置き換え後の文字列と、の組み合わせを決定して、例えばRAM103に記憶させる(変換定義301)。
【0052】
例えばRAM103に記憶された特定の変換対象文字列を所定の文字列に置き換え(ステップS300)て作成した文字列
に存在する特定の文字列を境に0個以上の文字列に分割(ステップS302)し、
変換対象文字列を例えばRAM103に記憶された変換定義301に基づいて置き換え(ステップS303)、
前記0個以上の文字列を、所定の文字列を区切り文字として連結された文字列を作成(ステップS304)、
その文字列を例えばRAM103に記憶し、処理を終了する。
【0053】
ハードウェア動作(文字列305から文字列300)
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103に記憶された対象の文字列に存在する特定の文字を境に、0個以上の文字列に分割(ステップS305)し、
特定の位置に存在する文字列をプログラム102Pに基づいて置き換え(ステップS354)、
前記0個以上の文字列を、空文字列を区切り文字として連結された文字列を作成(ステップS353)し、
その文字列を例えばRAM103に記憶し、処理を終了する。
【0054】
本実施の形態における発明が解決しようとする課題
本実施の形態では、特に断りがない限り、「文字列」とは、文字を含むものとする。文字は、1文字からなる文字列として扱うことができる。
【0055】
フラットファイルデータベースは、第1の文字列を行の区切りと、第2の文字列をカラムの区切りと、それぞれみなす文字列を作成し、前記文字列を記録したファイルをデータベースとして扱う。
【0056】
ゆえに、フィールドに第1の文字列、第2の文字列、第3の文字列(後述する)、のいずれかが含まれる場合、該フィールドが存在するフラットファイルデータベースを扱う情報処理装置が、誤作動を起こす恐れがあるから、フィールドに前記第1の文字列、前記第2の文字列、前記第3の文字列を含めることができない。
【0057】
本発明では、フィールドに変換対象文字列があるとき、該変換対象文字列を(c:一定の規則に基づいて、変換対象文字列でない文字列に変換)し、該変換によって作成された文字列と、そうでない文字列との境に第3の文字列を配置した文字列を作成する。
【0058】
変換対象文字列とは、少なくとも第1の文字列、第2の文字列、第3の文字列を含む文字列の集合をいう。
【0059】
第3の文字列は、(d:前記(c)によって作成された文字列と、そうでない文字列との境に配置する)文字列。
【0060】
文字列300
文字列300は、本実施の形態における変換をする前の文字列。
【0061】
本実施の形態では、第1の文字列は改行、第2の文字列はカンマ(,)、第3の文字列は等号(=)である場合を例に説明する。
【0062】
文字列300は、第1の文字列、第2の文字列、第3の文字列を含んでいるため、フラットファイルデータベースのフィールドにこのまま書き込むと、該フィールドが存在するフラットファイルデータベースを扱う情報処理装置が、誤作動を起こす恐れがある。
【0063】
変換定義301
変換定義301は、変換対象文字列が何であるか、ならびに、該変換対象文字列を何という文字列に変換すべきかを定義する。変換対象文字列は、少なくとも、第1の文字列、第2の文字列、第3の文字列を含む。これ以外の文字列は、変換対象文字列にあってもなくてもよい。
【0064】
変換後の文字列を何にするかは、変換対象文字列を含まない文字列であればよく、種々の決め方が考えられるが、ここでは、改行はOUT1という文字列、改行以外の変換対象文字列は、該変換対象文字列をUnicode文字コードによってあらわした数値を16進数によって表記した(ただし、該変換対象文字列が複数の文字列からなる場合は、前記「該変換対象文字列をUnicode文字コードによってあらわした数値を16進数によって表記した」文字列同士を、第3の文字列を0個を除く偶数個(例えば2個)で連結した文字列。例えば、変換対象文字列が,,(カンマ2個)なら、2C==2C)ものとする。
【0065】
ここでは、改行を=OUT1=、カンマを=2C=、等号を=3D=に変換するものとして説明する。(改行を表現する方法はいくつかあるため、しばしば、文字コードに変換しないほうが処理が容易となる)
変換定義301は、例えば、連想配列であり、前記連想配列は、改行をキーとしOUT1を返す「キーと値の組み合わせ」と、カンマをキーとし2Cを返す「キーと値の組み合わせ」と、等号をキーとし3Dを返す「キーと値の組み合わせ」と、を記憶した連想配列である形態が考えられる。
【0066】
文字列302
文字列302は、文字列300に存在する第3の文字列を、前記変換定義301に基づいて置き換えることによって作成された文字列である。
【0067】
該文字列302を作成する前の文字列(例えば文字列300)は、第3の文字列が前記(d)の意味で用いられていない場合があるが、該文字列302以降は、第3の文字列は、前記(d)の意味でのみ使用されることとなる。
【0068】
文字列集合303
文字列集合303は、文字列302を、第3の文字列を境に0個以上の文字列に区切ったものである。
【0069】
文字列集合304
文字列集合304は、文字列集合303における(最初の要素を0番とした)偶数番目の要素に存在する、変換定義301にて定義された変換対象文字列(第3の文字列を除く)を、前記変換定義301に基づいて置き換えることによって作成した文字列集合。ただし、ここでの変換は、前記変換定義301に定義されている置き換え後の文字列の先頭と末尾に、第3の文字列をを配置した文字列に変換する。
【0070】
例えば、文字列300では、改行はOUT1という文字列に置き換えられるとあるが、ここでは、=OUT1=に置き換える。
【0071】
前記説明は、文字列集合303が配列であるものとした説明。
【0072】
文字列305
文字列305は、文字列集合304の各要素を、第3の文字列を区切り文字として連結した文字列。
【0073】
前記説明は、文字列集合304が配列であるものとした説明。
【0074】
備考
前記文字列300から前記文字列305に変換する過程は、データベースのフィールドに書き込むと、前記データベースを処理する情報処理装置が誤作動をお起こすおそれがある文字列を、前記おそれを防止する文字列に変換する過程の説明。
【0075】
本実施の形態では、これ以降の説明は、前記変換によって(例えばデータベースのフィールドに記憶された)文字列を、前記変換をする前の文字列に戻す処理の説明。
【0076】
よって、文字列305から文字列300に変換する過程として説明する。
【0077】
文字列集合354
文字列集合354は、文字列305を、第3の文字列を境に0個以上の文字列に区切ったものである。
【0078】
文字列集合353
文字列集合353は、文字列集合354における(最初の要素を0番とした)奇数番目の要素に存在する文字列を置き換えることによって作成した文字列集合。
【0079】
文字列305は、文字列300を文字列305に変換するための処理として、文字列の置き換えを行った部分と、文字列の置き換えを行わなかった部分を、第3の文字列によって囲んでいる。よって、前記第3の文字列で区切って配列にしたなら、最初の要素は、前記文字列の置き換えを行わなかった部分であり、以後の要素は、文字列の置き換えを行った部分と文字列の置き換えを行わなかった部分が交互に並ぶ配列となる。よって(最初の要素を0番目とした)奇数番目を変換対象とする。
【0080】
前記文字列集合303を前記文字列集合304に変換する際、変換対象文字列は、改行はOUT1に、改行以外は前記変換対象文字列に存在する文字のUnicode文字コードを16進数表記した文字列に置き換え、前記変改対象文字列が複数の文字列からなる場合は、前記「前記変換対象文字列に存在する文字のUnicode文字コードを16進数表記した文字列」同士を0個以外の偶数個(例えば2個)の第3の文字によって連結した文字列を作成することとした。という場合を例に説明する。
【0081】
置き換え対象である要素に格納されている文字列は、OUT1という文字列であり改行に置き換えられるべき文字列であるか、数値が16進数表記された文字列であり前記文字列が表す数値と同じ文字コードにて表される文字に置き換えられるべき文字列であるか、のいずれかである。
【0082】
よって、置き換え対象である要素に格納されている文字列は、OUT1ならば改行、OUT1以外なら該文字列を数値が16進数表記された文字列とみなして該文字列が表す数値と同じ文字コードを持つ文字に置き換える処理をする。ただし、前記処理ができないときは、前記処理ができない旨を表す文字ないし文字列(例えば、〓)に置き換える。
【0083】
前記説明は、文字列集合354が配列であるものとした説明。
【0084】
文字列300
文字列300は、文字列集合353を、空文字列を区切り文字として連結した文字列。
【0085】
前記説明は、文字列集合353が配列であるものとした説明。
【0086】
図4は、実施の形態3における文字列の置き換えを示す図。
【0087】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103に記憶された文字列に存在する特定の文字を境に文字列を分割(ステップS404)し、
前記文字列のうち、前記特定の文字列以降に係る文字列の内容を変更(ステップS402)し、
前記文字列のうち、前記特定の文字列以降に係る文字列でないほうの文字列と、前記ステップS402によって作成された文字列とを連結(ステップS403)する動作
からなるループを実行し、前記ステップS403によって作成され当た文字列に、特定の文字列(ステップS404にて分割の基準となる)が存在しないとき、前記ループを脱出する処理をし、
前記ループを脱出する際に作成されている文字列を例えばRAM103に記憶し、処理を終了する。
【0088】
本実施の形態における発明が解決しようとする課題
実施の形態2にて説明した通りの置き換えでは、文字数が過多になる(つまり、データ量が大きくなる)傾向にある。
【0089】
よって、本実施の形態では、より少ない文字数にて同内容を表現することができるように文字列を変更する。
【0090】
実施の形態2にて説明した文字列は、第3の文字列が2連続することがある。これは、第3の文字列、空文字列、第3の文字列が並んだ文字列であると解することができる。しかし、第3の文字列2連続は、第4の文字列1個に置き換えることができれば、文字数の節約になる。
【0091】
この場合、第4の文字列は、変換定義301にて変換後の文字列と定義された文字列でない文字列で、第3の文字列の文字数の2倍未満の文字数を持つ文字列であればよい。
【0092】
本実施の形態では、第3の文字列は等号(=)、第4の文字列は、マイナス記号(-)であるものとして説明する。
【0093】
本実施の形態でいう第3の文字列とは、実施の形態2における第3の文字列と同様である。
【0094】
文字列401
文字列401は、
図3における文字列305に相当する。
【0095】
文字列402L
文字列402Lは、文字列401(または文字列404)に、2連続する第3の文字列があるとき、前記文字列401における2連続する第3の文字列より左側(前記第3の文字列自体を含まない)にある文字列を抜き出すことによって作成した文字列。
【0096】
例えば、12文字の文字列で(最初の文字を1文字目として)5文字目から2連続する第3の文字列がある場合は、1〜4文字目を、文字列402Lとする。
【0097】
文字列402R
文字列402Rは、文字列401(または文字列404)に、2連続する第3の文字列があるとき、前記文字列401における2連続する第3の文字列より右側(前記第3の文字列自体を含む)にある文字列を抜き出すことによって作成した文字列。
【0098】
例えば、12文字の文字列で(最初の文字を1文字目として)5文字目から2連続する第3の文字列がある場合は、5文字目以降を、文字列402Rとする。
【0099】
文字列402L、文字列402Rに関する備考
前記2連続する第3の文字列が複数個あるとき、例えばもっとも左にある2連続する第3の文字列を境に文字列402L、文字列402Rに分けるが、必ずしもこの通りに分ける必要はない。
【0100】
文字列403
文字列403は、文字列402Rに存在する2連続する第3の文字列(複数ある場合はもっとも左にある、2連続する第3の文字列)を、第4の文字列に置き換えることによって作成した文字列。
【0101】
文字列404
文字列404は、文字列402Lと、文字列403と、を連結することによって作成した文字列。文字列404は、文字列402Lと文字列403とを、空文字列を区切り文字として連結した文字列と解することができる。
【0102】
備考
本実施の形態における処理は、文字列404に、2連続第3の文字列が存在しなくなったとき、その文字列を処理結果として終了する。
【0103】
図5は、実施の形態4における文字列の置き換えを示す図。
【0104】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103に記憶されている文字列を、特定の文字列を境に0個以上の文字列に分割(ステップS501)し、
前記0個以上の文字列中の特定の条件を満たす文字列を置き換え(ステップS502)たものを、
特定の文字列を境に連結した文字列を作成(ステップS503)し、
その文字列を例えばRAM103に記憶し、処理を終了する。
【0105】
はじめに
本実施の形態では、実施の形態3にて置き換えた文字列を、置き換える前の文字列に変更する。
【0106】
本実施の形態では、第3の文字列は等号(=)、第4の文字列は、マイナス記号(-)であるものとして説明する。
【0107】
本実施の形態でいう第3の文字列、第4の文字列とは、実施の形態3における第3の文字列、第4の文字列と同様である。
【0108】
文字列501
文字列501は、
図4における文字列404に相当する。
【0109】
文字列集合502
文字列集合502は、文字列501を、第3の文字列を境に0個以上の文字列に区切ったものである。
【0110】
文字列集合503
文字列集合503は、文字列集合502における(最初の要素を0番とした)奇数番目の要素に存在する第4の文字列を、2連続する第3の文字列に置き換えることによって作成した文字列集合。
【0111】
前記説明は、文字列集合502が配列であるものとした説明。
【0112】
文字列504
文字列504は、文字列集合503を、第3の文字列を区切り文字として連結した文字列。
【0113】
前記説明は、文字列集合503が配列であるものとした説明。
【0114】
図6は、実施の形態5における処理を示す図。
【0115】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103に記憶されている対象の文字列の内容を変更する処理をし
作成された文字列を例えばRAM103に記憶させ、処理を終了する。
【0116】
はじめに
本実施の形態では、データベースのフィールドに書き込むと誤作動を起こす恐れがある文字列と、第3の文字列と、の少なくともいずれかが存在する文字列を、前記データベースに書き込むための文字列に変換する処理(以下「データベース変換」)と、
前記変換によって作成され(データベースのフィールドに書き込まれている)文字列を、前記変換をする前の文字列に変換する処理(「以下データベース逆変換」)と、
について説明する。
【0117】
データベース変換は、本実施の形態では、文字列600から文字列602に変換するものとして説明する。
【0118】
データベース逆変換は、本実施の形態では、文字列602から文字列600に変換するものとして説明する。
【0119】
文字列600
文字列600は、データベース変換ををする前の文字列(
図3における文字列300に相当)。
【0120】
文字列600は、データベース逆変換ををした後の文字列(
図3における文字列300に相当)。
【0121】
文字列601は、実施の形態2(文字列305から文字列300)によって、文字列600となる。
【0122】
文字列601
文字列600は、実施の形態2にて説明した処理(文字列300から文字列305)によって、文字列601となる。
【0123】
文字列602は、実施の形態4にて説明した処理によって、文字列601となる。
【0124】
文字列601は、
図3における文字列305、
図4における文字列401、
図5における文字列504に、相当する。
【0125】
文字列602
文字列601は、実施の形態3にて説明した処理によって、文字列602となる。
【0126】
文字列602は、データベース変換をした後の文字列。(
図4における文字列404に相当。)
文字列602は、データベース逆変換をする前の文字列。(
図5における文字列501に相当。)
備考
データベース変換は、文字列600を文字列601に変換する形態(文字列601から文字列602への変換を省略する)であってもよい。
【0127】
データベース逆変換は、前記省略をしたことがわかっている文字列に対してであれば、文字列601を文字列600に変換する形態であってもよい。
【0128】
データベース変換において文字列601から文字列602への変換を省略した場合、実施の形態4によって変換する前の文字列と、実施の形態4によって変換した後の文字列(文字列602から文字列601に変換することによって作成した文字列)は、同一内容となる。
【0129】
図7は、実施の形態6における文字列の置き換えを示す図。
図7では、改行をRと表記する。
【0130】
ハードウェア動作(文字列701から文字列707)
情報処理装置100のCPU101は、プログラム102Pに基づいて、
変換対象文字列と、該変換対象文字列を置き換えた後の文字列と、を定義(変換定義702)したものを例えばRAM103に記憶させ
例えばRAM103に記憶されている文字列中に存在しない文字列を特定し
前記文字列を変換対象文字列の前後に配置した文字列を作成し(ステップS701)、
前記文字列を境に0個以上の文字列に分割し(ステップS704)、
前記0個以上の文字列における特定の条件を満たす文字列を変換定義702に基づいてほかの文字列に置き換え(ステップS705)、
所定の文字列を区切り文字として連結した文字列を作成し(ステップS706)
作成された文字列を例えばRAM103に記憶させ、処理を終了する。
【0131】
ハードウェア動作(文字列704から文字列集合706)
情報処理装置100のCPU101は、プログラム102Pに基づいて、
所定の文字列を境に0個以上の文字列に分割し(ステップS706)、
所定の位置に存在する文字列をプログラム102Pに基づいてほかの文字列に置き換え(ステップS705)、
前記0個以上の文字列を空文字列を区切り文字として連結し(ステップS705b)、
作成された文字列を例えばRAM103に記憶させ、処理を終了する。
【0132】
本実施の形態における発明が解決しようとする課題
実施の形態2と同様。
【0133】
文字列701
文字列701は、本実施の形態における(文字列707への)変換をする前の文字列。
【0134】
本実施の形態では、第1の文字列は改行、第2の文字列はカンマ(,)、第3の文字列は等号(=)である場合を例に説明する。
【0135】
文字列701は、第1の文字列、第2の文字列、第3の文字列を含んでいるため、フラットファイルデータベースのフィールドにこのまま書き込むと、該フィールドが存在するフラットファイルデータベースを扱う情報処理装置が、誤作動を起こす恐れがある。
【0136】
変換定義702
変換定義702は、変換定義301と同様。
【0137】
区切り文字703
区切り文字703は(文字列であってもよい)、変換対象文字列にも文字列701にも存在しない文字。
【0138】
本実施の形態では、区切り文字703は、セミコロンである場合を例に説明する。
【0139】
文字列704
文字列704は、文字列701に存在する変換対象文字列を、前記変換対象文字列の前後を区切り文字703にて囲んだ文字列に置き換えることによって作成した文字列。
【0140】
ここでは、改行、カンマ、等号を、前後をセミコロンで囲んだ文字列に置き換えてある。
【0141】
文字列集合705
文字列集合705は、文字列704を、区切り文字703を境に0個以上の文字列に区切ったものである。
【0142】
文字列集合706
文字列集合706は、文字列集合705における(最初の様相を0番とした)奇数番目の要素に存在する文字列を、変換定義702にて定義された変換対象文字列を、前記変換定義702に基づいて置き換えることによって作成した文字列集合。
【0143】
前記説明は、文字列集合705が配列であるものとした説明。
【0144】
文字列707
文字列707は、文字列集合706の各要素を、第3の文字列を区切り文字として連結した文字列。
【0145】
前記説明は、文字列集合706が配列であるものとした説明。
【0146】
備考
前記文字列701から前記文字列707に変換する過程は、データベースのフィールドに書き込むと、前記データベースを処理する情報処理装置が誤作動をお起こすおそれがある文字列を、前記おそれを防止する文字列に変換する過程の説明。
【0147】
本実施の形態では、これ以降の説明は、前記変換によって(例えばデータベースのフィールドに記憶された)文字列を、前記変換をする前の文字列に戻す処理の説明。
【0148】
よって、文字列707から文字列701に変換する過程として説明する。
【0149】
文字列707
文字列707は、本実施の形態における(文字列701への)変換をする前の文字列。
【0150】
文字列集合706
文字列集合706は、文字列707を、第3の文字列を境に0個以上の文字列に区切ったものである。
【0151】
文字列集合705
文字列集合705は、文字列集合706をもとに作成された文字列集合。ただし、ここで行う変換は、文字列集合354から文字列集合353への変換と同様。
【0152】
前記説明は、文字列集合706が配列であるものとした説明。
【0153】
文字列701
文字列701は、文字列集合705を、空文字列を区切り文字として連結した文字列。
【0154】
前記説明は、文字列集合705が配列であるものとした説明。
【0155】
備考
本実施の形態によって作成された文字列707は、実施の形態3によって文字数を減らすことができる。
【0156】
前記の手段で文字数を減らした文字列は、実施の形態4によって文字列の内容を変更し、前記文字列を、文字列707として、本実施形態によって文字列701に変換することができる。
【0157】
図8は、実施の形態1におけるbef部222を表す図。
【0158】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103にクラス(のインスタンス)として作成・記憶・動作させ、
例えばRAM103に記憶された情報に基づいて、プログラム102Pによって定義された処理を行い、その結果を例えばRAM103に記憶させることがある。
【0159】
処理部800
処理部800は、
図2におけるbef部222に相当する。
【0160】
処理部801
処理部801は、処理部800の外部(例えばset部211)から提供された情報を受け取り、データベース情報記憶部802に記憶させる。
【0161】
データベース情報記憶部802
データベース情報記憶部802は、処理部800の外部から提供されたデータベースの情報を記憶する。
【0162】
データベース情報記憶部802は、表形式で記憶されているため、ある主キーを持つレコードはどこかの行にあり、あるカラムはどこかの列にある、という状態にある。
【0163】
行情報802R
行情報802Rは、データベース情報記憶部802において、何という主キーを持つレコードが、どの行にあるかを表す情報。
【0164】
行情報802Rは、処理部801がデータベース情報記憶部802に書き込んでから(この書き込みと同時でもよい)、処理部803が必要な情報をデータベース情報記憶部802から取得するまで(この取得をする直前でもよい)の間に作成する。好ましくは、データベース情報記憶部802に情報が書き込まれた直後に作成する。
【0165】
列情報802C
列情報802Cは、データベース情報記憶部802において、何というカラムがどの列にあるかを表す情報。
【0166】
列情報802Cの作成タイミングは、行情報802Rの作成タイミングと同様。
【0167】
処理部803
処理部803は、必要な情報のキー(主キー)、カラムの指定に基づいて、行情報802Rを用いて所要の情報が存在するレコードの行を特定し、列情報802Cに基づいて所要の情報が存在するカラムの位置を特定し、
前記特定内容に基づいて特定されたフィールドに存在する値を返す。
【0168】
前記データベース情報記憶部802がフラットファイルデータベースの場合、行の区切りならびに列の区切りと同じ文字をフィールドに含めた場合など、誤作動を起こすおそれがある文字列があるから、その場合は、本明細書に説明した手段によって文字列の内容が変更されて記憶されている場合がある。
【0169】
そのため、ここでは、例えば、実施の形態2(文字列305から文字列300)、ないし実施の形態3〜6にて説明した手段によって、変換前の文字列に直す必要がある。
【0170】
処理部804
処理部804は、処理部800に記憶されているデータベースのカラム一覧を返す。
【0171】
列情報802Cのキーを、文字列集合(例えば配列)に変換して返す。
【0172】
処理部805
処理部805は、に記憶されているデータベースの主キー一覧を返す。
【0173】
行情報802Rのキーを、0個以上の情報の集合(例えば配列)に変換して返す。
【0174】
図9は、実施の形態1における情報201、設定202、set部211、setg部221、bef部222を表す図。
【0175】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103にクラス(のインスタンス)として作成・記憶・動作させ、
例えばRAM103に記憶された情報に基づいて、プログラム102Pによって定義された処理を行い、その結果を例えばRAM103に記憶させることがある。
【0176】
情報901
情報901は、
図2における情報201に相当する。データベースに記憶されている情報。
【0177】
前記データベースがフラットファイルデータベースである場合を例に説明する。情報901は、前記フラットファイルデータベースであるテキストファイルに保存されている文字列。
【0178】
設定902
設定902は、
図2における設定202に相当する。
【0179】
ここでは、本実施の形態にて扱われるデータベースがフラットファイルデータベースである場合を例に説明する。
【0180】
本実施の形態にて取り扱うデータベースは、主キーが存在する列がKEYCOLUMN、カラムを(主キーが存在する列ではない列では、どの列が何のカラムを意味するか)定義する行がTITLEROW、レコードを書き込む最初の行がSARTROW、行の区切りがROWKUGIRI、列の区切りがCOLUMNKUGIRI、実施の形態2における第3の文字列をOUTKUGIRI、実施の形態4における第4の文字列をOUTKUGIRI2、という、それぞれ定数(変数でもよい)にて定義されている。
【0181】
この定義は、設定902にて定義されている。例えば、プログラムの一部として定数が宣言され、該定数として定義されている。
【0182】
set部911
set部911は、
図2におけるset部211に相当する。
【0183】
set部911は、例えばルーチンであって、前記ルーチンは、情報901、設定902から受け取る情報を引数として受け取る。
【0184】
その後、前記情報901から受け取った情報を、bef部922に存在する処理部922−1(
図8における処理部801に相当)に提供し、
setg部921に存在する変数921−1に代入する。
【0185】
bef部922
bef部922は、
図2におけるbef部222に相当する。
【0186】
setg部921
setg部921は、
図2におけるsetg部221に相当する。
【0187】
図10は、実施の形態1におけるchan部223の図。
【0188】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103にクラス(のインスタンス)として作成・記憶・動作させ、
例えばRAM103に記憶された情報に基づいて、プログラム102Pによって定義された処理を行い、その結果を例えばRAM103に記憶させることがある。
【0189】
備考
chan部1000について説明する場合、変更と表記した場合は、特に断りがない限り追加を含む。
【0190】
chan部1000
chan部1000は、
図2におけるchan部223に相当する。
【0191】
chan部1000は、例えばクラス(のインスタンス)。
【0192】
変数1001
変数1001は、chan部1000の外部からadd部1002を介して受け付けた指定内容を記憶し、item部1003は、変数1001に記憶された情報を読み取り、その結果をchan部1000の外部に返す。
【0193】
データベースは、「どのキー」「どのカラム」のフィールドの情報を「何に」変更すべきか、つまり3つの情報が必要である。
【0194】
変数1001は、例えば前記「どのキー」「どのカラム」を表す情報をキーとし、前記「何に」を値とする「キーと値の組み合わせ」を記憶する連想配列。
【0195】
前記キーは、処理部1051によって作成される。処理部1051が前記キーを作成する手順は後述する。
【0196】
上記の手順で作成したキーと、前記「何に」を値とする「キーと値の組み合わせ」を、変数1001に記憶させる。
【0197】
add部1002
add部1002は、例えば変更対象のキー、変更対象のカラム、変更後のフィールド、をそれぞれ指定を受け付ける(引数を持つ)ルーチン。
【0198】
前記変更対象のキー、前記変更対象のカラムから、変数1001を説明する際に説明した手順により「変数1001のキー」を作成し、「キーと値の組み合わせ」として、該キーと、前記変更後のフィールドと、の組み合わせを、変数1001に記憶させる。
【0199】
ただし、変数1001がnullである場合は、前述した処理の前に、変数1001を初期化する。
【0200】
item部1003
item部1003は、例えば読み込み対象のキー、読み込み対象のカラム、読み込みに失敗した際に返す文字列、をそれぞれ指定を受け付ける(引数を持つ)ルーチン。
【0201】
item部1003は、変数1001に前記読み込み対象のキー、前記読み込み対象のカラムであるフィールドに書き込まれるべき情報が変数1001に記憶されている場合は、その情報を返す。
【0202】
それ以外の場合は、読み込みに失敗した場合に返す文字列を返す。
【0203】
例えば、20をキー、氏名をカラムとするフィールドの情報を変数1001から読み込むとする。
【0204】
変数1001を説明する際に説明した手段により、変数1001用のキーが作られ、そのキーは「;20;氏名」である。
【0205】
変数1001は、キーと値の組み合わせであるから、前記キー(;20;氏名)と組み合わせている文字列がある場合はその文字列を返し、それ以外の場合は、「読み込みに失敗した際に返す文字列」を返す。
【0206】
keysORtitles部1004
keysORtitles部1004は、変数1001のキーとして使われている「どのキー」、あるいは「どのカラム」の一覧を返す。
【0207】
keysORtitles部1004は、例えば引数を持つルーチンであり、前記ルーチンの指定内容に基づいて、変数1001のキーである「どのキー」、「どのカラム」のいずれかを返す。
【0208】
ただし、変数1001がnullである場合は、空集合を意味する情報(例えば要素数0の配列)を出力する。
【0209】
keysORtitles部1004は、「どのキー」の一覧を返す処理部と、「どのカラム」の一覧を返す処理部と、を、別々の処理部(図示しない)とすることができる。
【0210】
下記の説明では、「どのキー」あるいは「どのカラム」を文字列型でないデータ型で返すことができる。その場合は、返すための情報を作成するにあたり、型変換をすることができる。型変換をする場合、所望の型変換に変換することができない文字列(例えば、文字列「ツボッシー」をinteger型(int型)に変換しようとする)の場合、指定の値(例えば、integer型(int型)の最大値)に変換することができる。
【0211】
「どのキー」の一覧を返すとは
例えば、変数1001のキーとして「,30,氏名」「,40,氏名」「,40,生年月日」が存在する場合を例に説明する。
【0212】
この文字列は、変数1001でいう「どのキー」「どのカラム」を処理部1051によって文字列として表現したものであり、2〜n-1(ただしnは2文字目以降で最初に1文字目と同じ文字列が出現する位置)文字目が「どのキー」を表す部分。
【0213】
よって、ここでは「30」「40」からなる文字列集合(例えば配列)を返す。
【0214】
「どのカラム」の一覧を返すとは
例えば、変数1001のキーとして「,30,氏名」「,40,氏名」「,40,生年月日」が存在する場合を例に説明する。
【0215】
この文字列は、でいう「どのキー」「どのカラム」を処理部1051によって文字列として表現したものであり、n+1(ただしnは2文字目以降で最初に1文字目と同じ文字列が出現する位置)文字目以降が「どのカラム」を表す部分。
【0216】
よって、ここでは「氏名」「生年月日」からなる文字列集合(例えば配列)を返す。
【0217】
処理部1051を説明する部分によると、変数1001のキーは、「どのキー」「どのカラム」を組み合わせた文字列であり、該対象のキーを表す部分と、該対象のカラムを表す部分と、を、区切り文字によって区切られた文字列の、所定の位置(例えば1文字目)に前記区切り文字を設ける。
【0218】
そのため変数1001のキーの、「どのキー」を抜き出し(具体的には、2文字目〜n-1文字目の間。ただし、ここではnとは2文字目以降にて最初に1文字目が存在する文字の位置。例えば、「x500x生年月日」という文字列からは、「500」という文字列が抜き出される)。
【0219】
変数1001がnullである場合は、空集合を意味する値(例えば要素数0の配列)を処理結果とする。
【0220】
keyTOtitles部1006
keyTOtitles部1006は、変数1001のキーとして使われている「どのカラム」のうち、「どのキー」が指定されたものであるものの一覧を返す。
【0221】
keyTOtitles部1006は、例えば引数を持つルーチンであり、前記ルーチンの指定内容に基づいて、変数1001のキーから、「どの(データベースの)キー」が指定されたものである「どのカラム」の一覧を返す。
【0222】
例えば、変数1001のキーとして「,30,氏名」「,40,氏名」「,40,生年月日」が存在し、keyTOtitles部1006を実行するにあたり40が指定された(例えばkeyTOtitles部1006がルーチンであり、引数に40が指定された)場合を例に説明する。
【0223】
この文字列は、変数1001でいう「どのキー」「どのカラム」を処理部1051によって文字列として表現したものであり、2〜n-1(ただしnは2文字目以降で最初に1文字目と同じ文字列が出現する位置)文字目が「どのキー」を表す部分。
【0224】
よって、変数1001のキーから(最初の文字を1文字目として)、2〜n-1(ただし、nは2文字目以降にて、1文字目と同じ文字が存在する位置)文字目に存在する文字列が「整数に変換すると40になる文字列」であるものを抜き出し
(この操作では「,40,氏名」「,40,生年月日」が抜き出される)、
前記抜き出したものから、n+1文字目(ただし、nは2文字目以降にて、1文字目と同じ文字が存在する位置)以降の文字列を抜き出し、
(この操作では「氏名」「生年月日」が抜き出される)、
該捜査の結果を、keyTOtitles部1006の処理結果(例えば、keyTOtitles部1006がルーチンである場合は返り値)とする。
【0225】
変数1001がnullである場合は、空集合を意味する値(例えば要素数0の配列)を処理結果とする。
【0226】
処理部1051
「どのキー」「どのカラム」を表す情報を文字列にし(例えば、10というキーの氏名というカラムを表す情報は、「10」「氏名」という文字列となる)、該文字列のどこにも存在しない文字(または文字列)を区切り文字として定める。
【0227】
次に、前記「どのキー」「どのカラム」を表す情報を文字列にした文字列の「どのキー」と、「どのカラム」を表す文字列を、前記区切り文字を境に連結し、該文字列の所定の位置(例えば1文字目)に、前記区切り文字を設けた文字列を作成する。この文字列は、変数1001のキーとなる。
【0228】
(例えば、「10」「氏名」という文字列における区切り文字は、1、0、氏、名、以外の文字、例えばセミコロン(;)とし、前記文字列から、「;10;氏名」といった文字列が作成される。)
図11は、実施の形態1におけるdel部224の図。
【0229】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103にクラス(のインスタンス)として作成・記憶・動作させ、
例えばRAM103に記憶された情報に基づいて、プログラム102Pによって定義された処理を行い、その結果を例えばRAM103に記憶させることがある。
【0230】
del部1100
del部1100は、
図2におけるdel部224に相当する。
【0231】
処理部1101
処理部1101は、例えば主キーの番号を受け付ける引数を持つルーチン。
【0232】
処理部1101は、データベースから削除すべきレコードの主キーの指定を受け付けて、該主キーを、変数1102として記憶させる。
【0233】
ただし、変数1102がnullである場合は、上記の処理をする前に、該変数1102を初期化する。
【0234】
変数1102
変数1102は、削除すべきレコードの主キーの番号を記憶する。
【0235】
処理部1103
処理部1103は、変数1102の記憶内容を、del部1100の外部に出力する。
【0236】
ただし、変数1102がnullである場合は、空集合を意味する情報(例えば要素数0の配列)を出力する。
【0237】
図12は、実施の形態7における処理を示すフローチャート。
【0238】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103にdel部として記憶されている情報に、第1の指定と同じキーがあるか確認し(ステップS1210)、
該キーがある場合(ステップS1210:YES)は、第3の指定を例えばRAM103に記憶し、処理を終了する。
【0239】
該キーがない場合(ステップS1210:NO)は、
例えばRAM103に、chan部として記憶されている、第1の指定と同じキーと、第2の指定と同じカラムがあるか確認(ステップS1220)し、
該内容がある場合(ステップS1220:YES)は、item部1003を実行し、その結果を例えばRAM103に記憶し処理を終了する。
【0240】
該内容がない場合(ステップS1220:NO)は、処理部803を実行し、その結果を例えばRAM103に記憶し処理を終了する。
【0241】
本実施の形態では、データベース処理部200TBに記憶されている情報を、対象のキーおよびカラムを指定して取得する。
【0242】
本実施の形態における処理部は、
図2にて処理部231として表現されている処理部のひとつ。
【0243】
本実施の形態では、第1の指定(主キー)、第2の指定(カラム)、に基づいて、前記指定されたキーおよびカラムであるフィールドに存在する情報を返す(これができないとき(例えば、前記キーまたはカラムの少なくともいずれかが存在しない)は、第3の指定(エラー時に返す情報)を返す)。
【0244】
例えば、前記第1の指定、前記第2の指定、前記第3の指定は引数であり、本実施の形態における処理は、前記引数を持つルーチンが実行する形態がある。
【0245】
ステップS1210
ステップS1210では、del部224に、第1の指定と同じ主キーが記憶されているか確認する。
【0246】
処理部1103によって受け取る情報(例えば配列)に、第1の指定と同じ情報が含まれているか確認する。
【0247】
前記情報が含まれている(ステップS1210:YES)場合は、ステップS1211に移行する。
【0248】
前記情報が含まれていない(ステップS1210:NO)場合は、ステップS1220に移行する。
【0249】
ステップS1211
ステップS1211では、第3の指定と同じ情報を返し処理を終了する。
【0250】
ステップS1220
ステップS1220では、chan部223に、第1の指定と同じキーがあり、第2の指定と同じカラムがある場合はYES、それ以外の場合はNOとする。
【0251】
keysORtitles部1004における「どのキー」の一覧を返す処理と、「どのカラム」の一覧を返す処理と、を行い、前者の処理によって取得された情報(例えば主キーの配列)に、第1の情報と同じ主キーがあり、かつ、後者の処理によって取得された情報(例えばカラムの配列)に、第2の指定と同じカラムがある場合をYESとし、これ以外の場合をNOとする。
【0252】
前者の処理によって取得された情報、後者の処理によって取得された情報の少なくともいずれかがnullの場合は、NOとする。
【0253】
ステップS1220がYESの場合は、ステップS1221に移行する。
【0254】
ステップS1220がNOの場合は、ステップS1230に移行する。
【0255】
ステップS1220
ステップS1220では、item部1003を実行し、前記item部1003の返り値を返し、処理を終了する。
【0256】
ステップS1230
ステップS1230では、処理部803を実行し、前記処理部803の返り値を返し、処理を終了する。
【0257】
図13は、実施の形態8における処理を示すフローチャート。
【0258】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
add部1002を実行し、
該add部1002によって例えばRAM103に実行結果が記憶され、処理を終了する。
【0259】
本実施の形態では、第1の指定(主キー)、第2の指定(カラム)、第3の指定(フィールド)を指定し、データベース処理部200TBに、
本実施の形態における処理部は、
図2にて処理部231として表現されている処理部のひとつ。
【0260】
前記第1の指定する主キー、前記第2の指定するカラムのフィールドの値を、前記第3の指定する値とすべき旨の情報を記憶させる。
【0261】
例えば、前記第1の指定、前記第2の指定、前記第3の指定は引数であり、本実施の形態における処理は、前記引数を持つルーチンが実行する形態がある。
【0262】
ステップS1310
ステップS1310では、add部1002を実行する。
【0263】
図14は、実施の形態9における処理を示す図。
【0264】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えばRAM103に記憶されている情報で、
記憶の有無の組み合わせが、所定条件を満たすものを抜き出し、
結果を例えばRAM103に記憶させ、処理を終了する。
【0265】
本実施の形態では、データベース処理部200TBに記憶されている情報の主キーの一覧を返す。
【0267】
本実施の形態における処理部は、
図2にて処理部231として表現されている処理部のひとつ。
【0268】
データ集合1401A
データ集合1401Aは、処理部805を用いて取得され、主キーの番号を格納しているデータ集合(例えば、整数型配列)。
【0269】
データ集合1402A
データ集合1402Aは、keysORtitles部1004を用いて(主キーの一覧が)取得され、主キーの番号を格納しているデータ集合(例えば、整数型配列)。
【0270】
データ集合1402B
データ集合1402Bは、データ集合1402Aと、データ集合1401Aと、を連結し、重複する情報を取り除くことによって作成された、主キーの番号を格納しているデータ集合(例えば、整数型配列)。
【0271】
データ集合1403A
データ集合1403Aは、処理部1103を用いて取得され、削除すべきレコードの主キーの番号を格納しているデータ集合(例えば、整数型配列)。
【0272】
データ集合1403B
データ集合1403Bは、データ集合1402Bから、データ集合1403Aを、取り除くことによって作成された、主キーの番号を格納しているデータ集合(例えば、整数型配列)。
【0273】
本実施の形態は、データ集合1403Bを実行結果とし、処理を終了する。
【0274】
図15は、実施の形態10における処理を示す図。
図15では、半角スペースをSと表記する。
【0275】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
A文字、B文字の指定内容に基づいて、AA文字、AB文字、BB文字が何であるかを特定し、例えばRAM103に記憶する。
【0276】
例えばRAM103に記憶されている変換対象の文字列における、AA文字、AB文字、BB文字の数および位置に基づいて、
実行すべき処理を決定し、
該決定内容に基づいて、前記変換対象の文字列の内容を変更する。
【0277】
その結果を、例えばRAM103に記憶し、処理を終了する。
【0278】
本実施の形態における発明が解決しようとする課題
数値を文字列にて表現する場合、小数点や桁区切りにどんな文字を使うかは、国などによって異なる。
【0279】
例えば、「12,300」は、日本では一万二千三百という意味になるが、スペイン等、12+(10÷3)に等しい数値を意味する場合がある。
【0280】
本実施の形態では、桁区切りとして扱うことがある文字列(本実施の形態では、A文字と呼称する)、小数点として扱うことがある文字列(本実施の形態では、B字と呼称する)の配列や数に基づいて、A文字、ならびに、B文字を、桁区切りないし小数点とみなし、文字列が誤った数値であると解釈されるおそれがある状態を修正する。
【0281】
本実施の形態では、数値に変換できない文字列を数値に変換しようとすることがある。これは本実施の形態を実行するルーチンを用いる場合を例にした説明だが、該ルーチンは、引数として、数値に変換できない文字列が指定された際の返り値を引数とする指定を受け付け、数値に変換できない文字列が指定された場合(例えば、ステップS1506−2に到達した)は、該指定に基づいた文字列を返す。
【0282】
備考
本実施の形態では、A字でありB字でない文字列をAA字、A字でありB字である文字列をAB字、A字でなくB字である文字列をBB字と呼称する。
【0283】
A字集合1501A
A字集合1501Aは、0種類以上のA字の集合。A字集合1501Aは、AA字かAB字のいずれか。
【0284】
ここでは、A字は、半角スペース( )、カンマ(,)、ピリオド(.)である場合を例示してある。
【0285】
B字集合1501B
B字集合1501Bは、0種類以上のB字の集合、B字集合1501Bは、AB字かBB字かのいずれか。
【0286】
ここでは、B字は、カンマ、ピリオド、縦線(|)である場合を例示してある。
【0287】
AA字集合1502AA
AA字集合1502AAは、(A字集合1501A、B字集合1501Bに基づいて作成された情報)A字集合1501Aに存在しB字集合1501Bに存在しない文字列の集合であり、AA字とみなす。
【0288】
AB字集合1502AB
AB字集合1502ABは、(A字集合1501A、B字集合1501Bに基づいて作成された情報)A字集合1501Aに存在しB字集合1501Bに存在する文字列の集合であり、AB字とみなす。
【0289】
BB字集合1502BB
BB字集合1502BBは、(A字集合1501A、B字集合1501Bに基づいて作成された情報)A字集合1501Aに存在せずB字集合1501Bに存在する文字列の集合であり、BB字とみなす。
【0290】
文字列1503
文字列1503は、本実施の形態における変換をする前の文字列。0個以上のAA字、0個以上のAB字、0個以上のBB字を含む。
【0291】
文字列1504
文字列1504は、文字列1503からAA字を取り除いた文字列。AA字は、桁区切りにしかならない(つまり小数点や数値にならない)ため、取り除く。
【0292】
ステップS1505
ステップS1505では、文字列1504に存在するBB字の数を数え、該BB字の数によって、ステップS1506−0、ステップS1506−1、ステップS1506−2、の、いずれかを実行する。
【0293】
ステップS1506−0
ステップS1506−0は、ステップS1505にて数えたBB字の数が0個である場合に実行する。
【0295】
ステップS1506−1
ステップS1506−1は、ステップS1505にて数えたBB字の数が1個である場合に実行する。
【0296】
変換対象の文字列に存在するAB字をすべて取り除く(空文字列に置き換え)、BB字を小数点に置き換える。
【0297】
ステップS1506−2
ステップS1506−2は、ステップS1505にて数えたBB字の数が2個である場合に実行する。
【0298】
数値に変換できない文字列として扱う。
【0299】
備考
実施の形態10は、数値に変換することができる文字列を作成する処理。
【0300】
よって、実施の形態10を実行する情報処理装置が、どんな文字列を小数点とみなすかを判断し、小数点として扱うべき文字列を、前記「小数点とみなす」文字列に置き換える。
【0301】
情報処理装置が小数点として扱う文字列を特定する手段は、下記の通り。
【0302】
小数点が出現する位置が分かっている数値(例えば、円周率)を文字列に変換し、小数点が出現するであろう位置に存在する文字列を、情報処理装置が小数点として扱う文字列とみなす。(好適には、前記数値が0以上なら、該文字列における「+」記号を空文字列に置き換える処理をする。)
以下、円周率から小数点を特定する場合を例に説明。
【0303】
上記の処理をして得られた文字列は、例えば「3.14159」のように、(最初の文字を1文字目とした)2文字目に小数点が出現するであろうから、
上記の処理をして得られた文字列の、(最初の文字を1文字目とした)2文字目に出現した文字を、情報処理装置が小数点として扱う文字列であるとみなす。
【0304】
図16は、実施の形態10におけるステップS1506−0を示す図。
【0305】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
例えば情報処理装置100に記憶されている文字列を、該文字列に存在する、AB字の種類及び数よおび位置に基づいて、該文字列の内容を変更し、結果を例えば情報処理装置100に格納し、処理を終了する。
【0306】
文字列1601
文字列1601は、ステップS1506−0を開始する前の文字列。
【0307】
文字列1601は、文字列1504の時点でAA字がすべて取り除かれているため、文字列1601は、AA字0個、AB字0個以上、BB字0個。
【0308】
表1602
表1602は、文字列1601に存在するBB字の種類ごとの数を数えた表。
【0309】
ここでは、BB字であるカンマは2個、ピリオドは1個である場合を例に説明する。
【0310】
文字列1603
文字列1603は、文字列1601に存在する
「数が1個であるAB字が1種類」である場合は、そのAB字を小数点とみなし、それ以外のAB字を取り除く(空文字列に置き換える)ことにより、文字列1603を作成する。
【0311】
上記以外の場合は、最も右にあるAB字ではないAB字を取り除く(空文字列に置き換える)ことにより、文字列1603を作成する。
【0312】
備考
上記の処理によって作成された文字列1603を、実施の形態10によって作成された文字列として、処理を終了する。
【0313】
図17は、実施の形態11における処理を示すフローチャート。
【0314】
本実施の形態では、に記憶されている情報を、対象のキーおよびカラムを指定して取得し、数値に変換する。
【0315】
本実施の形態における処理部は、
図2にて処理部231として表現されている処理部のひとつ。
【0316】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
実施の形態7、実施の形態10を実行することにより例えばRAM103に記憶された情報を数値に変換し
これを例えばRAM103に記憶し、処理を終了する。
【0317】
ステップS1701
ステップS1701では、実施の形態7を実行する。
【0318】
ステップS1702
ステップS1702では、ステップS1701によって取得した文字列を、実施の形態10を実行することにより、数値に変換できる文字列に変換する。
【0319】
ステップS1703
ステップS1703では、ステップS1702によって作成された文字列を、数値に変換する。
【0320】
備考
本実施の形態は、ルーチンによることができる。読み込むべきデータベースのフィールドが、どの主キーのどのカラムに属するかを引数によって指定し、ステップS1701を実行する際に、前記指定に基づいて処理を実行する形態が考えられる。
【0321】
該ルーチンは、処理に失敗した際に返す値を(該ルーチンの返り値と同じデータ型の引数として)指定し、処理に失敗した際は、前記引数を返す構成とすることができる。
【0322】
本実施の形態では、数値を返すことを想定しているが、数値のデータ型は、double型はもちろん、decimal型、integer(int)型など、であってもよい。
【0323】
図18は、実施の形態12に関する処理を示すフローチャート。
【0324】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
実施の形態7を実行し(ステップS1810)、
該実施の形態7によって例えばRAM103に記憶された文字列に区切り文字があるか判断(ステップS1820)し、
該区切り文字が無い場合(ステップS1820:NO)は、該文字列の内容を、区切り文字があるように変更(ステップS1821)し、
ステップS1821を実行した場合はステップS1821によって作成され、それ以外の場合はステップS1810によって取得された文字列を、前記区切り文字を境に左右に分割し(ステップS1830)、
前記分割によって作成された2個の文字列のうち、いずれかを数値に変換し(ステップS1840)、
前記結果を例えばRAM103に格納し、処理を終了する。
【0325】
本実施の形態における発明が解決しようとする課題
データベースのフィールドに、例えば、最小値と最大値のような、複数の値を書き込む必要があることがある。
【0326】
本実施の形態では、複数の値が書き込まれたフィールドから、例えば、最小値または最大値のような、指定された値を取得する。
【0327】
ここでは、フィールドに書き込まれている値は、数値に変換できる文字列、数値に変換できる文字列2個を区切り文字によって区切った文字列であり、前記区切り文字はアンダースコア(_)であり、前記区切り文字の左側が最小値、右側が最大値である場合を例に説明する。
【0328】
ステップS1810
ステップS1810では、実施の形態7を実行する。
【0329】
ステップS1820
ステップS1820では、ステップS1810にて取得した文字列に区切り文字が存在するかを確認する。
【0330】
前記区切り文字が存在する場合は、ステップS1810にて取得された文字列をを数値に変換し、処理を終了する。
【0331】
(変形例:前記区切り文字が存在しない場合は、ステップS1821に移行する。)
ステップS1821
ステップS1821では、ステップS1810にて取得した文字列を2個並べ、前記2個の間に区切り文字を設けた文字列に変換する。
【0332】
例えば、ステップS1810にて取得した文字列が「23.4」であって、前記区切り文字が「_」である場合は、
ステップS1821にて、「23.4_23.4」という文字列に変換される。
【0333】
ステップS1830
ステップS1830でじゃ、ステップS1810にて取得された文字列(または、ステップS1810にて取得され、ステップS1821にて変更された文字列)
に存在する区切り文字を境に、前記文字列を左右に分ける。
【0334】
例えば、(最初の文字を1文字目として)n文字目に文字数mの区切り文字がある場合は、1〜n-1番目の文字列を抜き出した文字列(文字列S1830−L)と、n+m番目以降の文字列を抜き出した文字列(文字列S1830−R)と、2個の文字列に分ける。
【0335】
ステップS1840
ステップS1840では、ステップS1830にて作成された文字列のいずれかを数値に変換する。この変換に先立って実施の形態10を用いて、数値に変換しようとする文字列を修正する形態であってもよい。
【0336】
例えば、最小値を必要とするときは文字列S1830−L、最大値を必要とするときは文字列S1830−R、を、数値に変換する。
【0337】
図19は、実施の形態1におけるsave部212と、該save部212に関連する処理の図。
【0338】
ハードウェア動作
情報処理装置100のCPU101は、プログラム102Pに基づいて、
データベースから取得され、例えばRAM103に記憶されている情報を、
例えばRAM103に記憶されている情報に基づいて変更し、
前記変更の結果を、例えばRAM103に記憶し、処理を終了する。
【0339】
本実施の形態における発明が解決しようとする課題
データベースは、複数の情報処理装置によって共用されている場合がある。
【0340】
本実施の形態では、変更前のデータベースの情報をbef部222に保持している。
【0341】
しかし、set部211を実行してからsave部212までの間に、ほかの情報処理装置によってデータベースが変更されていれば、
set部211を基準とした更新をすると、前記変更の内容が消失する。
【0342】
これを回避するため、ここでは(直前に)データベースの情報を読み込み、該情報を基準にデータベースを更新する。
【0343】
save部1900
save部1900は、
図2におけるsave部212に相当する。
【0344】
情報1901
情報1901は、
図2における情報203が、save部212の内部に読み込まれたものに相当する。
【0345】
情報1902
情報1902は、情報1901が、行(レコード)ごとに区分された、1個以上のデータの集合。
【0346】
前記説明は、情報1901がフラットファイルデータベースの文字列である場合の例。
【0347】
情報1902−r
情報1902−rは、chan部223に記憶された、変更(
図19の説明中、特に明記なき限り、変更と記載されているものは変更ないし追加を意味する)すべきレコードの主キー。
【0348】
ここでは、chan部223に、主キーが102であるレコード、主キーが104であるレコードの内容を変更すべき旨の情報が、記憶されている場合を例示してある。
【0349】
ここでは、keysORtitles部1004を、「どのキー」の一覧を返すものとして実行し、該keysORtitles部1004によって提供された情報を受け取る。
【0350】
情報1903
情報1903は、情報1902のうち、カラムの意味を定義する行と、変更の対象となるレコードを、
一次元配列である情報1902から、ジャグ配列である情報1903の、該情報1902の同じ番号の要素へ、カラムを区切る文字列を境に区切った配列に変更して書き込み、
該情報1903におけるその他の要素をnullとすることにより作成された。
【0351】
前記説明は、情報1902が一次元配列であり、
該一次元配列は、特定の番号を持つ要素が、タイトル行(少なくともキー列(主キーを格納してある列)を除く列にて、それぞれのカラムの意味を定義する行)の位置が定義され、
該一次元配列は、カラムを区切る文字列が何であるかが定義され、
該一次元配列は、キー列の位置が定義されているものとした例示。
【0352】
備考
情報1902は、カラムを区切る文字とカラムを区切る文字の間(フィールド)に、フィールドに含めると誤作動を起こす恐れがある文字列が、
例えば、実施の形態2,実施の形態5,実施の形態6によって(基づいて)置き換えされた文字列である場合がある。
【0353】
その場合、情報1903の要素に格納するとき、例えば、実施の形態4、実施の形態2(文字列305から文字列300)、あるいは、実施の形態6(文字列707から文字列701)を実行することにより、
前記置き換えがされる前の文字列に変更してから格納する。
【0354】
情報1903−c
情報1903−cは、chan部223に記憶された、変更すべきレコードのカラム。
【0355】
情報1904
情報1904は、情報1903をもとに、
「情報1902−rにあって情報1903にないキー列」を持つ行と
(ここでは、情報1902−rに、102、104、106があり、このうち情報1903の主キーにないのは106であるため、106を追加。)
「情報1903−cにあって情報1903にないカラム」を
(ここでは、情報1903−cには、情報X、情報Y、情報1があり、このうち、情報1903のカラムにないのは、情報X、情報Yであるため、情報X、情報Y、を追加)
追加することによって作成したもの。
【0356】
前記説明は、情報1903、情報1904が、ジャグ配列(キー列の位置が定義されている)であるものとした例示。
【0357】
図19では、追加されたフィールド(要素)を灰色で表記してある。
【0358】
情報1904−d
情報1904−dは、変数1001に記憶された、「どのキー」の「どのカラム」に属するフィールドを、「どんな情報」に変更すべきかを指定した情報。
【0359】
該情報1904−dを、keysORtitles部1004を介して取得したものが、情報1902−r、情報1903−c。
【0360】
情報1905
情報1905は、情報1904を、item部1003を介して取得した情報に基づいて変更することによって作成したもの。
【0361】
変更対象であるキーおよびカラムは、情報1902−r、情報1903−cに基づいてわかっているため、これを用いてitem部1003を実行することができる。
【0362】
なお、item部1003は、「読み込みに失敗した際のに返す文字列」が設定されている。
【0363】
これは、変数1001に存在しない組み合わせ、例えば、
図19でいうと、キーが102、カラムが情報1、を指定した場合に起きる。
【0364】
item部1003が「読み込みに失敗」しているか否かを判別するため、item部1003を、キー・カラムが同じで「読み込みに失敗した際に返す文字列」を違えて、
1回以上ずつ実行する。この複数回の実行にて、同じ文字列が返ってきた場合は、情報1904の該当フィールドを変更し、それ以外の場合は変更しない。
【0365】
情報1904では、nullである行や、存在しないフィールドに書き込むことはできない。
【0366】
それらのフィールドに書き込む際は、書き込む前に、配列を宣言(定義)する。
【0367】
図19では、追加されたフィールド(要素)のうち、情報が書き込まれた要素を濃い灰色、情報が書き込まれなかった要素を薄い灰色で表記してある。
【0368】
情報1906
情報1906は、情報1905におけるnullではない要素に格納されている配列を、列を区切る文字を境にした文字列に直し、
該文字列を、情報1902における同じ番号の要素に格納することによって作成したもの。
【0369】
ただし、情報1905は、データベースのフィールドに含めると誤作動を起こす恐れがある文字列を含むことがある。
【0370】
よって、情報1905から情報1906を作成する際、例えば、実施の形態2(文字列300から文字列305)、実施の形態3、実施の形態5(文字列600から文字列602)、実施の形態6(文字列701から文字列707)のいずれかを実行することにより、誤作動を起こす恐れがある文字列を、ほかの文字列に変更する。
【0371】
前記説明は、情報1905が文字列型ジャグ配列で、情報1906が文字列型配列であるものとした例示。
【0372】
情報1906−d
情報1906−dは、データベースから取り除くべきレコードを、主キーによって指定したもの。処理部1103を介して取得する。
【0373】
情報1907
情報1907は、情報1906から、削除すべきレコードを取り除くことによって作成されたもの。
【0374】
情報1908
情報1908は、情報1906を、行を区切る文字を区切り文字として連結することによって作成した文字列。
【0375】
前記説明は、情報1907が配列であるものとした例示。
【0376】
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図されている。また、各実施の形態は、処理内容を矛盾させない範囲で適宜組み合わせることができる。