(57)【要約】      （修正有）【課題】クライアントがサーバのデータベースにデータを保存する際、データベースが誤動作を起こさないようデータを変換する技術を提供する。【解決手段】データベースのフィールドに、情報処理システムが誤作動を起こす恐れがある文字を含む場合に、前記文字を、情報処理システムが誤作動を起こす恐れがある文字ではない文字のみからなる文字列に差し替えてデータベースに記憶する。記憶されたフィールドを読み込む場合に、差し替えをした後の文字を、差し替えをする前の文字に変換する処理を情報処理装置に実行させる。【選択図】図２
2020086617.tif 000002
【特許請求の範囲】
【請求項１】
フラットファイルデータベース（第１の文字をレコードの境目、第２の文字をカラムの境目とする）を管理するプログラムであって、
少なくとも、前記第１の文字列、前記第２の文字列が存在するデータを前記データベースに書き込むときに、
前記第１の文字列、前記第２の文字列を含む特定の文字列である部分を、
前記特定の文字列を含まないように変換処理を情報処理装置に実行させること
を特徴とするプログラム。
【請求項２】
請求項１に記載の変換処理は、
対象に第３の文字列が存在する文字列を含むことを特徴とする
請求項１に記載のプログラム。
【請求項３】
請求項１〜２に記載の変換処理は、
該変換処理をした部分と、それ以外の部分を、第４の文字列によって区切ることを特徴とする
請求項１〜２に記載のプログラム。
【請求項４】
請求項１〜３に記載の変換処理は、
対象に第４の文字列が存在することを特徴とする
請求項１〜３に記載にプログラム。
【請求項５】
データベースに、請求項１〜４に記載の変換処理が施された部分を含むデータが存在するときに、
前記処理が施された部分に対し、前記処理を施す前のデータに変更する処理を情報処理装置に実行させる
ことを特徴とするプログラム。
【請求項６】
条件Ａを満たす文字列を含む文字列を、条件Ａを満たさない文字列のみからなる文字列に変換する処理を情報処理装置に実行させるプログラムであって、
前記変換する処理は、前記条件Ａを満たす文字が何であるかによって、何に変換されるかが決定されること、
前記変換する処理を実行した部分と、それ以外の部分とを、条件Ｂを満たす文字列によって区切ること、
前記条件Ｂを満たす文字列が所定の条件を満たす回数（Ｃ回）連続した場合、Ｃの値によって決まる回数だけ連続する、条件Ｄを満たす文字列に変換されること、
を特徴とするプログラム。
【請求項７】
読み込み部と、
変更部と、
消去部と、
ストリーム記憶部またはテキスト記憶部の少なくともいずれかと、
変更記憶部と、
書き込み部と、
取得部と、
を有することを特徴とする
データベース処理部。
【請求項８】
請求項７に記載のデータベース処理部を有することを
特徴とするプログラム。
【請求項９】
請求項７〜８に記載の読み込み部は、
データベースが存在する場所を示す情報が存在するか否かを判断する第１のステップと、
第１のステップにおいてデータベースが存在する場所を示す情報が存在しないと判定された場合は、決められたデータをテキスト記憶部に保存する第２のステップと、
第１のステップにおいてデータベースが存在する場所を示す情報が存在すると判定された場合は、該情報に基づいて読み込まれたデータまたは該データをもとに作成されたデータの少なくともいずれかをテキスト記憶部に記憶する第３のステップと、
第１のステップにおいてデータベースが存在する場所を示す情報が存在すると判定された場合は、該情報をストリーム記憶部に保存する第４のステップと、
を有することを特徴とする、
請求項７〜８に記載の読み込み部。
【請求項１０】
請求項９に記載の第３のステップは、
記憶しようとするデータが文字列である場合は、第１の特定の文字を境目として区切った、
第１のデータ集合体を作成するステップと、
前記第１のデータ集合体のそれぞれの要素に存在する第２の特定の文字を境目として区切った、
第２のデータ集合体を作成するステップと、
を有することを特徴とする、
請求項９に記載のプログラム。
【請求項１１】
請求項９〜１０に記載の処理の少なくともいずれかを情報処理装置に実行させることを
特徴とするプログラム。
【請求項１２】
請求項７〜８に記載のストリーム記憶部は、
データベースが存在する場所を示す情報と、
削除されたデータを記憶すべき場所と、
の少なくともいずれかを記憶することを特徴とする
請求項７〜８に記載のストリーム記憶部。
【請求項１３】
請求項１２に記載の処理を情報処理装置に実行させることを
特徴とするプログラム。
【請求項１４】
請求項７〜８に記載のテキスト記憶部は、
データベース記憶部と、
行境界記憶部と、
列境界記憶部と、
キー列位置記憶部と、
タイトル行記憶部と、
レコード開始行記憶部と、
の少なくともいずれかをそなえることを特徴とする、
請求項７〜８に記載のテキスト記憶部。
【請求項１５】
請求項１４に記載のデータベース記憶部は、
データベースの内容を記憶することを
特徴とする、請求項１４に記載のデータベース記憶部。
【請求項１６】
請求項１４に記載の行境界記憶部は、
少なくともフラットファイルデータベースを取り扱うときに行・レコードの境界として使用する文字が何であるかを記憶することを
特徴とする、請求項１４に記載の行境界記憶部。
【請求項１７】
請求項１４に記載の列境界記憶部は、
少なくともフラットファイルデータベースを取り扱うときにカラムの境界として使用する文字が何であるかを記憶することを
特徴とする、請求項１４に記載の列境界記憶部。
【請求項１８】
請求項１４に記載のキー列位置記憶部は、
前記データベース記憶部のキー列の位置がどこであるかを記憶することを
特徴とする、請求項１４に記載のキー列位置記憶部。
【請求項１９】
請求項１４に記載のタイトル行記憶部は、
前記データベース記憶部の各々のカラムの意味を定義する、または、
前記データベース記憶部の各々のカラムの意味を定義する行の位置がどこであるかを記憶することを
特徴とする、請求項１４に記載のタイトル行記憶部。
【請求項２０】
請求項１４に記載のレコード開始行記憶部は、
前記データベース記憶部のレコードの位置がどこであるかを記憶する、
ことを特徴とする請求項１４に記載のレコード開始行記憶部。
【請求項２１】
請求項１４〜２０に記載の処理の少なくともいずれかを情報処理装置に実行させる
ことを特徴とするプログラム。
【請求項２２】
請求項７〜８に記載の書き込み部は、
テキスト記憶部に記憶されたデータまたはストリーム記憶部に記憶されたデータによって特定される位置から読み込まれるデータの少なくともいずれかを変更対象のデータとし、
前記変更対象のデータに対して、変更記憶部に記憶された内容に基づいた変更を行い、
前記変更が施されたデータを、前記ストリーム記憶部に記憶する動作、または、前記変更が施されたデータを出力することを特徴とする、
請求項７〜８に記載の書き込み部。
【請求項２３】
請求項２２に記載の処理を情報処理装置に実行させることを
特徴とするプログラム。
【請求項２４】
請求項７〜８に記載の変更記憶部は、
更新記憶部と、
削除記憶部と、
の少なくともいずれかをそなえることを
特徴とする、請求項７〜８に記載の変更記憶部。
【請求項２５】
請求項２４に記載の更新記憶部は、
データ集合体であることを
特徴とする、請求項２４に記載の更新記憶部。
【請求項２６】
請求項２５に記載のデータ集合体は、連想配列であって、
キーは、データベースのキー列に使われている値であり、
値は、データ集合体（以下「第２のデータ集合体」と表記）であることを
特徴とする、請求項２５に記載のデータ集合体。
【請求項２７】
請求項２６に記載の第２のデータ集合体は、
連想配列であることを
特徴とする、請求項２６に記載の第２のデータ集合体。
【請求項２８】
請求項２７に記載の連想配列は、
キーは、データベースのカラムに用いられる値であり、
値は、データベースのフィールドに書き込まれる値であることを
特徴とする、請求項２７に記載の連想配列。
【請求項４６】
請求項２４〜２７に記載の処理の少なくともいずれかを情報処理装置に実行させることを
特徴とするプログラム。
【請求項２９】
第１のデータをキーとして第２のデータを返すデータ集合体であって、
前記第２のデータは、第２Ａのデータをキーとして第２Ｂのデータを返すデータ集合体であって、
前記第１のデータは、データベースのキー列、
前記第２Ａのデータは、データベースのカラム、
前記第２Ｂのデータは、データベースのフィールドに書き込まれる値を、
それぞれ表すことを特徴とするプログラム。
【請求項３０】
請求項２４に記載の更新記憶部は、
請求項２９に記載の通りであること
を特徴とする、請求項２４に記載の更新記憶部。
【請求項３１】
請求項２４に記載の削除記憶部は、
削除対象であるレコードのキー列を記憶することを
特徴とする、請求項２４に記載の削除記憶部。
【請求項３２】
請求項２９〜３１に記載の処理の少なくともいずれかを情報処理装置に実行させることを
特徴とするプログラム。
【請求項３３】
請求項７〜８に記載の変更部は、
更新記憶部にデータが格納されていない場合は該更新記憶部に要素数０のデータ集合体を格納するステップと、
更新記憶部に、対象のキー列が存在する場合は、該対象のキーに対応する第２のデータ集合体を取得するステップと、
前記第２の集合体に対し、対象のカラムの値とフィールドの組み合わせを書き込むステップと、
前記書き込みをした前記第２の集合体を、更新記憶部に、前記対象のキー列に対応する値として記憶するステップと、
を有することを特徴とする、請求項７〜８に記載の変更部。
【請求項３４】
請求項３３に記載の処理を情報処理装置に実行させることを
特徴とするプログラム。
【請求項３５】
請求項７〜８に記載の消去部は、
削除記憶部にデータが格納されていないかを確認するステップと、
該ステップによってデータが格納されていないことが確認された場合は、削除記憶部を、記憶されたキーが０個であるデータ集合体に変更するステップと、
削除記憶部に記憶しようとするデータがすでに削除記憶部に存在するかを確認するステップと、
前記ステップによって、削除記憶部に記憶しようとするデータが削除記憶部に存在しないことが確認された場合は、削除記憶部に記憶しようとするデータを削除記憶部に記憶するステップと、
を有すること
を特徴とする、請求項７〜８に記載の変更記憶部。
【請求項３６】
請求項３５に記載の削除記憶部は、
データ集合体であること
を特徴とする、請求項３５に記載の削除記憶部。
【請求項３７】
請求項３５〜３６に記載の削除記憶部は、
リストまたはコレクションであること
を特徴とする、請求項３５〜３６に記載の削除記憶部。
【請求項３８】
請求項３５〜３７に記載の処理の少なくともいずれかを情報処理装置に実行させることを
特徴とするプログラム。
【請求項３９】
請求項７〜８に記載の取得部は、
変更記憶部を探索する第１のステップと、
テキスト記憶部を探索する第２のステップとの、
少なくともいずれかを含むことを
特徴とする、請求項７〜８に記載の取得部。
【請求項４０】
請求項３９に記載の取得部は、
変更記憶部に該当するデータが存在する場合は、テキスト記憶部の探索を行わないことを
特徴とする、請求項３９に記載の取得部。
【請求項４１】
請求項３９に記載の第１のステップは、
削除記憶部に該当するデータが存在する場合は該当するデータが存在しない旨の結果を出力することと、
削除記憶部に該当するデータが存在せず、更新記憶部に該当するデータが存在する場合は、該当するデータを出力することと、
を特徴とする、請求項３９に記載の第１のステップ。
【請求項４２】
請求項３９に記載の第２のステップは、
少なくとも、該当するレコードまたはカラムの少なくともいずれかが存在しない場合は該当するデータが存在しない旨の結果を出力することと、
該当するレコードおよびカラムが存在する場合は、該レコードおよびカラムに存在するデータを出力することと、
を特徴とする、請求項３９に記載の第２のステップ。
【請求項４３】
請求項７〜８に記載の変更部は、
数値（以下「第１の数値」と表記）を記憶しようとするときに、前記数値を意味する文字列に変換する第１のステップと、
前記ステップによって作成された文字列に対し、請求項３３〜３４に記載の処理を実行するステップと、
を有することを
特徴とする、実施の形態７〜８に記載の変更部。
【請求項４４】
請求項４３に記載の第１のステップは、
前記数値を、前記数値より０に近いいくつかの整数のうち、最も前記数値との差が小さい整数を計算する第１のステップと、
前記数値と前記第１のステップによって計算された数値との差の絶対値を計算する第２のステップと、
前記第２のステップによって計算された数値を、整数になるまで１０倍する処理を繰り返す第３のステップと、
前記第１のステップによって作成された数値を文字列に変換した文字列、小数点を意味する記号、前記第３のステップによって作成された数値を文字列に変換した文字列、を連結した文字列を作成する第４のステップと、
を有することを特徴とする、請求項４３に記載の第１のステップ。
【請求項４５】
請求項４３〜４４に記載の処理の少なくともいずれかを情報処理装置に実行させることを
特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースを処理するプログラムに関する。
【背景技術】
【０００２】
従来、第１の情報処理装置および第２の情報処理装置に必要なソフトウェアをインストールし、第１の情報処理装置にインストールされたソフトウェアを操作し、第２の情報処理装置に記憶されているデータベースを処理するプログラムが知られている。（例えば、非特許文献１参照）
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】ニコニコ動画「＜社畜育成ドラマ＞  業務システムが幻想入り  第１２話「ＤＢのすゝめ」」（ＵＲＬ：https://www.nicovideo.jp/watch/sm32753333）２０１８年１０月３０日閲覧  ただし＜および＞は墨付き括弧
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、非特許文献１に開示された技術では、複数の情報処理装置にソフトウェアをインストールしなければならず、ソフトウェアの設定を間違えると正しく動作しない場合があるという問題がある。
【０００５】
本発明は、かかる事情にかんがみてなされたものであって、その目的とするところは、第１の情報処理装置にインストールされたソフトウェアが、第２の情報処理装置に記憶されているデータベースを処理することができるプログラム及び情報処理システムを提供することにある。
【課題を解決するための手段】
【０００６】
本発明の一態様のプログラムは、データベースのフィールドに、情報処理システムが誤作動を起こす恐れがある文字を含む場合に、前記文字を、情報処理システムが誤作動を起こす恐れがある文字ではない文字のみからなる文字列に差し替えてデータベースに記憶する処理と、前記記憶されたフィールドを読み込む場合に、前記差し替えをした後の文字を、前記差し替えをする前の文字に変換する処理を情報処理装置に実行させる。
【０００７】
本発明の一態様のプログラムは、所定の場所（第１情報処理装置であっても、第１情報処理装置と通信手段を介して接続された第２情報処理装置であってもよい）に記憶されているデータベースを操作する処理を、第１情報処理装置に実行される。
【発明の効果】
【０００８】
本発明の一側面によれば、データベースを処理することが可能となる。（第１情報処理装置と通信手段を介して接続された第２情報処理装置に記憶されているプログラムを処理する場合であっても、第２情報処理装置にソフトウェアをインストールする必要がない）
【図面の簡単な説明】
【０００９】
【図１】情報処理装置を示すブロック図。
【図２】実施の形態１に係る情報処理装置が実施の形態１に説明した処理を実行する手順を示すフローチャート。
【図３】実施の形態１に係る情報処理装置が行う処理の例の説明図。
【図４】実施の形態１に係る情報処理装置が行う処理の例の説明図。
【図５】実施の形態２に係るデータベース処理部の構成を示す図。
【図６】欠番。
【図７】欠番。
【図８】実施の形態２に係る情報処理システムの構成を示すブロック図。
【図９】実施の形態３に係る情報処理装置が読み込み部５０１を実行する処理の手順を示したフローチャート。
【図１０】欠番。
【図１１】実施の形態６に係る情報処理装置が書き込み部５２１を実行する処理の手順を示したフローチャート。
【図１２】実施の形態６に係る情報処理装置が行う処理の例を説明するための図。
【図１３】実施の形態８に係る変更記憶部５１３および変更記憶部５１３に格納されたデータの一例を示す図。
【図１４】実施の形態３に係る読み込み部５０１が実行する処理の手順を示したフローチャート。
【図１５】実施の形態４に係るストリーム記憶部５１１を示す図。
【図１６】実施の形態５に係るテキスト記憶部５１２を示す図。
【図１７】実施の形態７に係る情報処理装置が変更部５０２の一部である更新記憶部１３１０を実行する処理の手順を示したフローチャート。
【図１８】実施の形態７に係る情報処理装置が変更部５０２の一部である削除記憶部１３５０を実行する処理の手順を示したフローチャート。
【図１９】実施の形態１１に係る変更部５０２の一例を示す図。
【図２０】実施の形態１１に係る情報処理装置が行う処理の手順を示すフローチャート。
【図２１】実施の形態１０に係る情報処理装置が、変更記憶部５１３、テキスト記憶部５１２の少なくともいずれかからデータを探索する手順を示すフローチャート。
【発明を実施するための形態】
【００１０】
＜ハードウェア構成＞
実施の形態１
上記の実施形態におけるハードウェアの構成を、図１を参照し説明する。図１は情報処理装置を示すブロック図。情報処理装置１は通信網Ｎ（例えば、インターネット、ＬＡＮ（Local Area Network）又は携帯電話網）により他の情報処理装置と相互に接続されている。情報処理装置１は、例えばサーバ装置、パーソナルコンピュータ又はスマートフォン等。情報処理装置１は、ＣＰＵ（Central Prosessing Unit）１１、記憶部１２、ＲＡＭ（Random Access Memory）１３、入力部１４、表示部１５、通信部１６およびドライブ部１７をそなえる。
【００１１】
ＣＰＵ１１はパスを介しハードウェア各部と接続されている。ＣＰＵ１１は例えば１以上のＣＰＵ又はマルチコアＣＰＵ等をそなえる。ＣＰＵ１１は、プログラム１２Ｐ（例えば、記憶部１２に記憶されている。他の部分（例えば記録媒体１０）に記憶されていてもよい）に従いハードウェア各部を制御する。
【００１２】
記憶部１２は例えばハードディスク又は大容量メモリ等。ドライブ部１７は、記録媒体１０（例えば、光ディスク）から情報を読み取る。記憶部１２にはＣＰＵ１１が処理を行う際に必要とする種々のデータ及びプログラム１２Ｐを格納する。ＣＰＵ１１は、記録媒体１０に記録されたプログラム１２Ｐをドライブ部１７に読み取らせ、読み取ったプログラム１２Ｐを記憶部１２に記憶させる。ＣＰＵ１１は、必要に応じてプログラム１２Ｐを記憶部１２からＲＡＭ１３にロードし、ロードしたプログラム１２Ｐに従って、各種の処理を実行する。なお、プログラム１２Ｐは、情報処理装置１の外部からダウンロードされてもよく、あらかじめ記憶部１２に記憶されていてもよい。この場合、情報処理装置１は、ドライブ部１７をそなえていない形態であってもよい。
【００１３】
ＲＡＭ１３は、例えばＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）、フラッシュメモリ等。ＲＡＭ１３は、記憶部としても機能し、ＣＰＵ１１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１４】
入力部１４はマウスまたはキーボード等の入力デバイスであり、受け付けた操作情報をＣＰＵ１１へ送信する。表示部１５はＣＰＵ１１から送信された画像データを表示する。表示部１５は例えば液晶ディスプレイ。通信部１６は、例えば無線ＬＡＮカード又は携帯電話用通信モジュール等であり、通信網Ｎを介して各種情報を送受信する。
【００１５】
＜実施の形態１＞
本実施の形態は、データベースをフラットファイルデータベース、つまりプレーンテキストとして保存する。
【００１６】
本実施の形態では、第１の文字（例えば改行）はレコードの境界、第２の文字（例えばカンマ）はカラムの境界。つまり、少なくとも第１の文字、第２の文字と同じ文字がフィールドに存在してはならない。さもないと、データベースを処理する際、誤作動が起こる（情報処理装置は、レコードやカラムの境界ではない場所をレコードやカラムの境界であると誤認する）。以後、フィールドに存在してはならない文字を「アウト文字」、アウト文字ではない文字を「セーフ文字」と呼称する。
【００１７】
アウト文字は、前述の通りデータベースの管理のために用いる文字であって、その他の目的に用いてはならない。また、将来の機能拡充（例えば、第３の文字２個以上連続したら、それ以降に存在する最初の第２の文字まではコメントであってプログラムによって編集されない部分であるとか、第３の文字に囲まれた文字列によってはプログラムが定められた処理をする（例えば文字の色を変更する）機能）のために、第３の文字（例えばスラッシュ）をフィールドに存在させてはならない。第３の文字はアウト文字である。
【００１８】
前述の通り、アウト文字はフィールドに存在させてはならない。そのため、アウト文字が存在する文字列（例えば、「(,,゜Д゜)」。）をフィールドに書き込む場合は、アウト文字をセーフ文字（ただし、後述する第４の文字ではないセーフ文字に限る）のみからなる文字列に変換し、該変換をした部分とそれ以外の部分を区切る第４の文字（例えば等号）によって区切る必要がある。第４の文字は、厳密にはアウト文字ではない（アウト文字をセーフ文字のみからなる文字列に変換した部分と、そうでない部分を区切るためであればフィールドに存在してもよいため）が、アウト文字とセーフ文字を区切る以外のためにフィールドに存在してはならない文字であるため、アウト文字であるかのように扱わなければならない場合がある。（例えば「(=゜ω゜)ノ」は、アウト文字を含まない文字列であるが、第４の文字が存在するため、アウト文字から変換されたセーフ文字が存在するとプログラムが誤認するかもしれない。よって、第４の文字は、アウト文字ではないが、「第４の文字ではないセーフ文字」のみからなる文字列に変換されなければならない。）
【００１９】
アウト文字は、それぞれ定められた文字列に変換される。（例えば、第１の文字はOUT1、第２の文字がOUT2、第３の文字はOUT3、第４の文字はOUT4）該変換をした部分とそうでない部分は、第４の文字によって区切られる。（つまり、「(,,゜Д゜)」は「(=OUT2==OUT2=゜Д゜)」に変換され、データベースに保存される。「(=゜ω゜)ノ」は「(=OUT4=゜ω゜)ノ」に変換され、に変換され、データベースに保存される。
（
変形例：
アウト文字は、それぞれの文字の文字コード、あるいはそれぞれの文字の文字コードから作成される文字列（例えば、文字コードを１６進数に変換した文字）に変換される。ただし改行は定められた文字列（例えばOUT1）に変換される。（例えば、第１の文字はOUT1、第２の文字は2C、第３の文字は2F、第４の文字は3D）該変換をした部分とそうでない部分は、第４の文字によって区切られる。（つまり、「(,,゜Д゜)R(=゜ω゜)ノR(=,=;)/」（ただしRは改行）は「(=2C-2C=゜Д゜)=OUT1=(=3D=゜ω゜)ノ =OUT1=(=3D-2C-3D=;)=2F=」に変換され、に変換され、データベースに保存される。改行を意味する文字コードは複数存在するため、OUT1のように、変換後の文字列を決めたほうが良い。
）
【００２０】
データベースに保存された文字列を読み込むときは、第４の文字列を境に、（最初を０番目とした）奇数番目が、アウト文字（または第４の文字）からセーフ文字（第４の文字を含まない）に変換された文字列であるから、第４の文字列を境に（最初を０番目とした）奇数番目を、アウト文字に変換する。（つまり、フィールドに「(=OUT2==OUT2=゜Д゜)」が保存されている場合、第４の文字を境に「(」「OUT2」「」「OUT2」「」「゜Д゜)」に分けることができる。このうち、（最初を０番目とした）奇数番目は、「OUT2」「OUT2」であるから、これらを「,」「,」に変換する。そして第４の文字を境に分けられた文字列を連結し「(,,゜Д゜)」となる。）
【００２１】
（
変形例：
アウト文字や第４の文字が連続する文字列（例えば「(=,=;)」を前述の通り変換する場合、第４の文字が連続する（例えば「(=OUT4==OUT2==OUT4=;)」）となり不都合。この場合、アウト文字や第４の文字が連続する場合は、変換後の文字列に第４の文字が連続することになるから（文字が連続するということは、文字と文字の間に空文字列が挟まっているということ）第４の文字が連続する部分を、アウト文字（第４の文字を含む）から変換したセーフ文字（第４の文字を除く）に使用しない文字（以後、第５の文字と呼称）（例えば「-」）に置き換える（置換ともいう）。例えば、「(=,=;)」は「(=OUT4==OUT2==OUT4=;)」に変換されるが、第４の文字が２連続する部分を第５の文字１個に置き換える（例えば「(=OUT4-OUT2-OUT4=;)」）ことにより、変換後の文字列を減らす。
）
【００２２】
（
変形例：
データベースに保存された文字列を読み込むときは、第４の文字列を境に、（最初を０番目とした）奇数番目が、アウト文字（または第４の文字）からセーフ文字（第４の文字を含まない）に変換された文字列であるから、第４の文字列を境に（最初を０番目とした）奇数番目にある文字列を、第５の文字を境に区切って、それぞれの文字列が「決められた文字列ならば該文字列に対応する文字列に変換する（例えば、「OUT1」ならば改行に変換する）」、「前述した処理ができないなら、文字コードとして扱える文字列ならば該文字コードに対応する文字に変換する（例えば「2C」ならばカンマに変換する）」、「前述した処理のいずれもできないなら、その旨を示す文字列（例えば、空文字列、〓記号）に変換する」処理をする。
）
【００２３】
本実施形態は、ルーチンによって行うことができる。（ルーチンはVB.net等で用いられるプロシージャ、C言語等で用いられる関数等。）該ルーチンは、アウトな文字や第４の文字を含む文字列を、アウトな文字を含まない文字列に変換するのかそれとも逆かを指定する真理値型の引数（以下、この引数をtoDBstyleと表記する）、変換する対象の文字列を指定する文字列型の引数（以下、この引数をHStextと表記する）、該ルーチンが処理に失敗したときに返す値を指定する文字列型の引数（以下、この引数をerrと表記する）を持ち、返り値が文字列型のルーチン。該ルーチンは、第４の文字列が何であるか、ならびに、アウト文字は何であって、アウト文字ならびに第４の文字列を何に変換すべきか（何という文字列をアウト文字に変換すべきか）、第５の文字列が何であるかが設定されている。（例えば、第１の文字列は「OUT1」という文字列に、第２の文字、第３の文字、第４の文字はそれぞれの文字を意味する文字コードを英字部分を大文字とした１６進数によって表記した文字列に変換する。第５の文字列は「-」。つまり、アウト文字（第４の文字を含む）は、O、U、T、1、2、3、4、5、6、7、8、9、0、A、B、C、D、E、F、-、のうち０種類以上の文字を０個以上使用した文字列に変換され、該変換された部分とそうでない部分は、第４の文字によって区切られる。）
【００２４】
図２は、実施の形態１に係る情報処理装置が実施の形態１に説明した処理を実行する手順を示すフローチャート。情報処理装置１のＣＰＵ１１は、プログラム１２Ｐに基づいて以下の処理を実行する。ＣＰＵ１１は、引数toDBstyleに基づいて、引数HStextを「アウト文字（第４の文字を含む）がある文字列をセーフ文字のみからなる文字列に変換する」のかそれとも逆かを判定する（ステップＳ２０１）。以下の説明では、第１の文字が改行、第２の文字がカンマ（,）、第３の文字列がスラッシュ（/）、第４の文字が等号（=）、第５の文字がマイナス記号（-）である場合を例に説明する。文字列errは、例えば空文字列。
【００２５】
「アウト文字（第４の文字を含む）をセーフ文字のみからなる文字列に変換する」（ステップＳ２０１：ＹＥＳ）場合を説明する。ここではHStextに「(,,゜Д゜)R(=゜ω゜)ノR(=,=;)/」（ただしRは改行）が代入され、これをセーフ文字のみからなる文字列に変換する場合を例に説明する。図３を参照されたい。ＣＰＵ１１はプログラム１２Ｐに基づいて、アウトな文字（第４の文字を含む）を何に変換すべきかを決定し（ステップＳ３０１）、HStext（文字列Ｓ２０３Ａ）に存在するアウト文字（第４の文字列を含む）をセーフ文字に変換し、該変換部分とそうでない部分の境目に第４の文字を挿入し、第４の文字が２連続する部分を第５の文字列１個に置きかえることによって文字列Ｓ２０３Ｂを作成し（ステップＳ３０２）、該ステップによって作成された文字列が正しいか否かを点検するために、toDBstyleの真偽を逆転し、HStextに文字列Ｓ２０３Ｂを代入して本ルーチンを再帰呼び出しすることによって、文字列Ｓ２０３Ａが作成されるかを確認する（ステップＳ３０３）。ＣＰＵ１１は、ステップＳ３０３にて文字列Ｓ２０３Ａと同じ文字列が作成された場合は文字列Ｓ２０３Ａを、それ以外の場合は文字列errを、ＲＡＭ１３または記憶部１２に記憶し、処理を終了する。
【００２６】
「セーフ文字のみからなる文字列をアウト文字（第４の文字を含む）がある文字列に変換する」（ステップＳ２０１：ＮＯ）場合を説明する。ここではHStextに「(=2C-2C=゜Д゜)=OUT1=(=3D=゜ω゜)ノ=OUT1=(=3D-2C-3D=;)=2F=」が代入され、これを、アウト文字を含む文字列に変換する場合を例に説明する。図４を参照されたい。ＣＰＵ１１はプログラム１２に基づいて、指定された文字列（文字列４０１）を、第４の文字を境に配列に分割する（配列４０２）。配列４０２の最初の要素を０番目とした奇数番目（表４０３Ａ）の要素に対し、第５の文字列を境に配列に分割したもの（配列４０３Ｂ）を作成し（空欄は、その要素が存在しないことを意味する）、配列４０３Ｂの各々の要素に対し、「１６進数の文字コードとみなして該文字コードにあたる文字に変換する事ができるなら、それを行う」「前記変換ができないなら、決められた文字列（例えばOUT1）なら、その文字列に対応する文字（例えば改行）に変換する」「前記いずれもできないなら、その旨を示す文字列（例えば、空文字列）（例えば、〓記号）に変換する」処理を、この順序で行う（配列４０３Ｃ）。配列４０３Ｃの各要素を連結した文字列を作成し、該文字列によって配列４０２の奇数番目の要素を置き換える（配列４０４）。配列４０４の各要素を連結し、文字列４０５を作成する。ＣＰＵ１１は、作成した文字列をＲＡＭ１３または記憶部１２に記憶し、処理を終了する。
【００２７】
請求項６について説明する。
条件Ａとは、例えば「第１の文字、第２の文字、第３の文字、第４の文字のいずれかである」、条件Ｂとは「第４の文字である」、Ｃ回とは「偶数回」、Ｃの値によって決まる回数とは、「Ｃの半分の回数」、条件Ｄとは「第５の文字である」ことが考えられる。これは例示であり、これ以外の条件を設定してもかまわない。
【００２８】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、変換したい文字列に存在する条件Ａを満たす部分を特定し、該部分を、条件Ａを満たさない文字列である何に変換すべきかを決定し、該決定に従って該部分を変換する処理をし、該処理をした部分と、それ以外の部分の境目に条件Ｂを満たす文字列を挟む処理をし、条件Ｂを満たす文字列が所定の条件を満たす回数（Ｃ回）連続している部分を特定し、該部分を、条件Ｄを満たす文字列（Ｃの値によって決まる回数だけ連続する）に変換する処理をし、これらの処理によって作成された文字列を、ＲＡＭ１３または記憶部１２に記憶する。
【００２９】
＜実施の形態２＞
実施の形態２では、データベースを読み込んで、編集し、書き込む処理の一部または全部を実行する。図８は、本実施形態に係る情報処理システムの構成を示すブロック図。情報処理システムは、情報処理装置（第１情報処理装置）１及び第２情報処理装置２をそなえる。情報処理装置１の構成は、実施の形態１と同様。図８に示すように、情報処理装置１及び第２情報処理装置２は、通信網Ｎに接続されている。
ただし、通信網Ｎは、３台以上の情報処理装置が接続されていてもよい。
【００３０】
第２情報処理装置２は、サーバ装置、パーソナルコンピュータ又はスマートフォン等のコンピュータ。第２情報処理装置２は、ＣＰＵ２１、記憶部２２、ＲＡＭ２３、入力部２４、表示部２５、通信部２６、ドライブ部２７の少なくともいずれかをそなえる。第２情報処理装置２のＣＰＵ２１、記憶部２２、ＲＡＭ２３、入力部２４、表示部２５、通信部２６、ドライブ部２７の構成は、情報処理装置１のＣＰＵ１１、記憶部１２、ＲＡＭ１３、入力部１４、表示部１５、通信部１６、ドライブ部１７、と同様であるため、簡潔のため記載を省略する。
記録媒体２０は、記録媒体１０と同様であるため、簡潔のため記載を省略する。
ただし、３台以上の情報処理装置が接続されている場合は、３台目以降の情報処理装置がそなえるものは、第２情報処理装置２がそなえるものと同様。
【００３１】
図５は、本実施形態に係るデータベース処理部の構成を示す図。
読み込み部５０１は、データベースが存在する場所を示す情報（例えば、第２情報処理装置２の記憶部２２）（例えば、第２情報処理装置２にセットされた記録媒体１０）またはデータベースから読み込んで取得されたデータの少なくともいずれかを受け取り、ストリーム記憶部５１１にデータベースが存在する場所を示す情報を記憶する、テキスト記憶部５１２にデータベースから読み込んで取得されたデータを記憶する、事の少なくともいずれかをする。（ＣＰＵ１１は、プログラム１２Ｐに基づいて、所定の場所（例えば記憶部１２）（例えば記憶部２２）（例えば記録媒体１０）（例えば記録媒体２０）の場所を示す情報または該所定の場所に記憶されたデータを読み取った情報の少なくともいずれかを作成し、該情報を記憶部１２またはＲＡＭ１３に記憶する）
ストリーム記憶部５１１は、読み込み部５０１によって、データベースが存在する場所を示す情報を記憶する。このとき、データベースが存在する場所を示す情報はもちろん、他の場所（例えば、データベースから削除されたデータを記憶すべき場所）を示す情報を含めて記憶するものであってもかまわない。
テキスト記憶部５１２は、データベースから読み込んで取得されたデータを記憶する。このとき、データベースの使用ならびに編集に使用する情報（例えば、データベースをフラットファイルデータベース、つまりプレーンテキストとして保存する場合において、カラムの境目を示す文字、レコードの境目を示す文字、キー列がどのカラムであるかを示す情報、カラムの意味を定義するために必要な情報）を含めて記憶するものであってもよい。
変更記憶部５１３は、データベースに対し施すべき変更を記憶する。（例えば、キー列が1であるレコードの、カラムが「氏名」である部分のデータを「DEF」に変更しろ、キー列が2であるレコードを削除しろ、といった内容が記憶される）
変更部５０２は、変更記憶部５１３に対し、データベースに対し施すべき変更（例えば、「キー列が2であるレコードの、カラム「氏名」にあたる情報を「ほむら」にしろ」）を書き込む
消去部５０３は、変更記憶部５１３に対し、データベースに対し施すべき消去を書き込む。
書き込み部５２１は、データベースへの書き込み、データベースに書き込むべきデータの作成の、少なくともいずれかを実行する。
取得部５２２は、テキスト記憶部５１２、変更記憶部５１３の、少なくともいずれかを参照し、現在、データベースに何が書き込まれているかを特定する。このとき、テキスト記憶部５１２、変更記憶部５１３の内容が矛盾する場合は、変更記憶部５１３を優先する。（例えば、テキスト記憶部５１２に、キー列が2であるレコードの、カラム「氏名」が「まどか」である旨が記憶されており、変更記憶部５１３に、「キー列が2であるレコードの、カラム「氏名」を「さやか」にしろ」という内容が書き込まれている場合に、キー列2のカラム「氏名」のデータが何かを特定する場合は、その答えは「さやか」である）
【００３２】
（
変形例：ストリーム記憶部５１１またはテキスト記憶部５１２のいずれかが存在しない形態であってもよい。この場合、読み込み部５０１、書き込み部５２１、取得部５２２は、ストリーム記憶部５１１またはテキスト記憶部５１２の、いずれか存在しないほうを参照しない。
）
【００３３】
データベース処理部は、データ集合体（配列、連想配列、構造体、ユーザー定義型の変数、クラス、共用体等、０個以上の値を持つことができる変数。変数には、オブジェクト、及びオブジェクトのインスタンスが含まれる。構造体等のデータ集合体とは、夫々に変数である０個以上のメンバを含んでいる。データ集合体中の変数が要素と呼称される場合は、メンバには要素が含まれる。０個以上のメンバは、順番等の互いの関係が定義されていてもよく、０個以上のいずれかにデータが代入される）として扱うことができる。（例えば、クラス）
【００３４】
データベース処理部がクラス（のインスタンス）である場合、読み込み部５０１、変更部５０２、削除部５０３、書き込み部５２１、取得部５２２はルーチンであって、ストリーム記憶部５１１、テキスト記憶部５１２、変更記憶部５１３は、データベース処理部の外部から参照や変更を直接することができない変数。（いわゆるプライベートな変数）
【００３５】
＜実施の形態３＞
本実施形態では、読み込み部５０１を実行する。本実施形態のハードウェア構成は実施の形態２と同様。
【００３６】
図９は、実施の形態３に係る情報処理装置が読み込み部５０１を実行する処理の手順を示したフローチャート。図９に示す処理の手順は、読み込み部５０１をＣＰＵ１１が実行する処理の一例。情報処理装置１のＣＰＵ１１は、データベースが存在する場所を示す情報またはnullをＲＡＭ１３または記憶部１２に記憶する（ステップＳ９０１）。ＣＰＵ１１は、ステップＳ９０１にて記憶された内容がnullであるかを判断（ステップＳ９０２）し、nullでない（ステップＳ９０２：ＹＥＳ）場合は、ステップＳ９０１にて記憶された内容が示す場所に存在するデータを読み込み、その内容をＲＡＭ１３または記憶部１２に記憶する（ステップＳ９０６）。前記判断の際nullである（ステップＳ９０２：ＹＥＳ）場合は指定されたデータをＲＡＭ１３または記憶部１２に記憶する。（例えば、ステップＳ９０１にて記憶すべき内容がnullである場合は、予め定められたデータをＲＡＭ１３または記憶部１２に記憶する。）
【００３７】
読み込み部５０１は、ルーチンによることができる。前記ルーチンは、データベースが存在する場所を示す情報（nullであってもよい）を示す引数HSstream、データベースから削除されたデータを記憶すべき場所（nullであってもよい）を示す引数HSstreamdelete、データベースから読み込んで取得されたデータHStext_DBstyle、フラットファイルデータベースにおけるカラムの境目が何であるかを示す引数HSkugiri、データベースにおけるどのカラムがキー列であるかを示す引数keycolumn、どのカラムが何を意味するかを定義する行がどの行であるかを示す引数titlerow、レコードの開始行がどの行であるかを示す引数startrow、という引数を有する。
（ＣＰＵ１１は、プログラム１２Ｐに基づいて、前記ルーチンの引数をＲＡＭ１３または記憶部１２に記憶する。このとき、ＣＰＵ１１は、プログラム１２Ｐに基づいて、所定の処理をしたデータ（例えば、文字列をジャグ配列に変換する）を記憶する形態であってもよい）（変形例：フラットファイルデータベースにおける行・レコードの境目が何であるかを示す引数が存在するルーチンによってもよい。）
【００３８】
HStext_DBstyleは、第１の特定の文字（例えば改行）が行・レコードの境目で、第２の特定の文字（例えばカンマ）がカラムの境目であるフラットファイルデータベース、つまり文字列として与えられる。よって、少なくとも「フィールドの中に、第１の特定の文字または第２の特定の文字」場合は、フィールドに存在する該文字は、該文字を使わない形態（例えば、実施の形態１にて説明した形態）によって表現される。（例えば、ある行に「1,(,,゜Д゜)」という文字列を表現したい場合は、「1,(=2C-2C=゜Д゜)」と表記する。もし、「1,(,,゜Д゜)」と表記すると、「(,,゜Д゜)」が１個のフィールド内に収まる文字列として扱われない。）
【００３９】
＜＜HSstreamがnullでない場合＞＞
ステップＳ９０２では、ＮＯと判定されるから、ストリーム記憶部５１１にHSstreamが記憶される。テキスト記憶部５１２へは、ストリーム記憶部５１１に記憶されたデータをもとに読み込まれたデータが記憶される。このとき、読み込まれるデータはフラットファイルデータベース、つまりテキストファイルとして説明するが、これ以外の形態であってもよい。
【００４０】
しかし、テキスト記憶部５１２は、特定の形態（ここでは文字列型ジャグ配列として説明する。テキスト記憶部５１２を、文字列型ジャグ配列を記憶するものとして説明することがあるが、これ以外の形態であってもよい）によっているため、該形態に変換する必要がある。ここでは、ストリーム記憶部５１１に記憶されたデータをもとに読み込まれたデータがテキスト形式であって、テキスト記憶部５１２を文字列型ジャグ配列であるものとして説明する。
【００４１】
ストリーム記憶部５１１に記憶されたデータをもとに読み込まれたテキストは、HSkugiriがカラムの境目であって、特定の文字（例えば改行）がレコード・行の境目（フラットファイルデータベースのレコード・行の境目が改行であるものとして説明することがあるが、これ以外の形態であってもよい）。
【００４２】
図１４は、読み込み部５０１が実行する処理の手順を示したフローチャート。
情報処理装置１のＣＰＵ１１は、プログラム１２Ｐに基づいて、ストリーム記憶部５１１に記憶されたデータ（例えば図１４０１）をもとに記憶部１２またはＲＡＭ１３または記憶部２２またはＲＡＭ２３から読み込まれたデータに存在する特定の文字（例えば改行）を境目として第１の配列に分割（その結果は、例えば表１４０２）し、該第１の配列の各要素に存在するHSkugiriを境に各要素を第２の配列（ジャグ配列）に分割（その結果は、例えば表１４０３）し、該第２の配列をＲＡＭ１３又は記憶部１２に記憶する。
【００４３】
フラットファイルデータベースでは、第１の特定の文字（例えば改行）が行・レコードの境目で、第２の特定の文字（例えばカンマ）がカラムの境目。よって、少なくとも「フィールドの中に、第１の特定の文字または第２の特定の文字」がある場合は、該文字を、該文字を使わずに表現する。そのため、第２の配列を作成して、テキスト記憶部５１２に記憶する前に、該文字を使わずに表現している部分を、該文字に変換する必要がある。その手順は、実施の形態１に説明した通り。たとえば、ある要素に「(=2C-2C=゜Д゜)」が記憶されている場合は、実施の形態１に説明した手順によって「(,,゜Д゜)」に変換される。
【００４４】
＜＜HSstreamがnullである場合＞＞
ステップＳ９０２では、ＹＥＳと判定されるから、テキスト記憶部５１２にHStext_DBstyleをジャグ配列に変換したものが記憶される。ここでは、HStext_DBstyleを文字列として説明するが、これ以外の形態であってもよい。
【００４５】
HStext_DBstyleに代入されたテキストは、HSkugiriがカラムの境目であって、特定の文字（例えば改行）がレコード・行の境目（フラットファイルデータベースのレコード・行の境目が改行であるものとして説明することがあるが、これ以外の形態であってもよい）。
【００４６】
図１４は、読み込み部５０１が実行する処理の手順を示したフローチャート。
情報処理装置１のＣＰＵ１１は、プログラム１２Ｐに基づいて、HStext_DBstyleに格納された或いは（ＲＡＭ１３または記憶部１２またはＲＡＭ２３または記憶部２２に記憶された）データ（例えば図１４０１）に存在する特定の文字（例えば改行）を境目として第１の配列に分割（その結果は、例えば表１４０２）し、該第１の配列の各要素に存在するHSkugiriを境に各要素を第２の配列（ジャグ配列）に分割（その結果は、例えば表１４０２）し、該第２の配列をＲＡＭ１３又は記憶部１２に記憶する。）
【００４７】
フラットファイルデータベースでは、第１の特定の文字（例えば改行）が行・レコードの境目で、第２の特定の文字（例えばカンマ）がカラムの境目。よって、少なくとも「フィールドの中に、第１の特定の文字または第２の特定の文字」がある場合は、該文字を、該文字を使わずに表現する。そのため、第２の配列を作成して、テキスト記憶部５１２に記憶する前に、該文字を使わずに表現している部分を、該文字に変換する必要がある。その手順は、実施の形態１に説明した通り。たとえば、ある要素に「(=2C-2C=゜Д゜)」が記憶されている場合は、実施の形態１に説明した手順によって「(,,゜Д゜)」に変換される。
【００４８】
＜実施の形態４＞
本実施の形態では、ストリーム記憶部５１１の形態を説明する。本実施形態のハードウェア構成は実施の形態２と同様。
【００４９】
図１５は、ストリーム記憶部５１１を示す図。データベース記憶部１５０１はデータベースが存在する場所を示す情報を記憶する。削除データ記憶部１５０２は、削除されたデータを記憶すべき場所を示す情報を記憶する。どちらも、データ型は例えばSystem.IO.stream型の変数。
【００５０】
実施の形態３を補足する。HSstreamはデータベース記憶部、HSstreamdeleteは削除データ記憶部に記憶される。
【００５１】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、記憶部１２またはＲＡＭ１３に、データベース記憶部１５０１として使用する部分、削除データ記憶部１５０２として使用する部分、の少なくともいずれかを確保する。
【００５２】
＜実施の形態５＞
本実施の形態では、テキスト記憶部５１２の形態を説明する。本実施形態のハードウェア構成は実施の形態２と同様。
【００５３】
データベース記憶部１６０１は、例えばデータベースから読み込まれたデータを記憶する。例えば、文字列型ジャグ配列。（本明細書では、データベース記憶部１６０１の「配列を格納する配列」を行、前記「配列を格納する配列」に格納された配列を列として説明することがある。このとき、最初の行を０行目、最初の列を０列目として説明することがある。）
【００５４】
行境界記憶部１６０２は、フラットファイルデータベースを取り扱うときに、何という文字が行・レコードの境目であるかを記憶する。例えば、文字列型の変数または定数。
【００５５】
列境界記憶部１６０３は、フラットファイルデータベースを取り扱うときに、何という文字がカラムの境目であるかを記憶する。例えば、文字列型の変数または定数。
【００５６】
キー列位置記憶部１６０４は、データベース記憶部１６０１の、どの列がキー列であるかを記憶する。例えば、整数（integer）型の変数または定数。
【００５７】
タイトル行記憶部１６０５は、データベース記憶部１６０１の、どの行がタイトル行であるかを記憶する。タイトル行とは、キー列を除く列に対し、どの列（カラム）が何を意味するカラムであるかを定義する行。例えば、整数（integer）型の変数または定数。
【００５８】
レコード開始行記憶部１６０６は、データベース記憶部１６０１の、どの行以降がレコードであるかを記憶する。例えば、整数（integer）型の変数または定数。データベースは、レコードの数が０件である場合がある、例えば、タイトル行記憶部に「0」が記憶されており、レコード開始行記憶部に「1」が記憶されており、データベース記憶部に記憶されているジャグ配列が１行（最初の行を０行目と数えるため、０行目のみ存在することになる）の場合、タイトル行は存在するもののレコードが存在しないデータベースである（本明細書では、レコードが記憶されている行を「データ行」と表記することがある）。
【００５９】
実施の形態３を補足する。HStext_DBstyleまたはHSstreamが示す情報をもとに読み込まれたデータはデータベース記憶部、HSkugiriは列境界記憶部、keycolumnはキー列位置記憶部、 titlerowはタイトル行記憶部、startrowはレコード開始行記憶部に記憶される。実施の形態３では、行の境界を示す文字を指定しない形であって、行境界記憶部はプログラム１２Ｐによって定められた文字（例えば改行）が記憶される。（変形例：フラットファイルデータベースにおける行・レコードの境目が何であるかを示す引数が存在するルーチンを用いた場合は、該フラットファイルデータベースにおける行・レコードの境目が何であるかを示す引数に代入されたデータを行境界記憶部に格納する）
【００６０】
（
変形例：タイトル行記憶部１６０５は、（例えば文字列型をキーとして整数型を返す連想配列）どのカラムがどんな意味を持つかを記憶するものであってもよい。この場合、データベース記憶部１６０１は、タイトル行をそなえない形態であってもよい。
）
【００６１】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、所定の場所（例えば記憶部１２またはＲＡＭ１３）に、データベース記憶部１６０１、行境界記憶部１６０２、列境界記憶部１６０３、キー列位置記憶部１６０４、タイトル行記憶部１６０５、レコード開始行記憶部１６０６、の少なくともいずれかを記憶する部分を確保する。
0
【００６２】
＜実施の形態６＞
本実施の形態では、書き込み部５２１を実行する。本実施形態のハードウェア構成は実施の形態２と同様。
【００６３】
本実施の形態は、データベースに記憶されたデータに対し、変更記憶部５１３に記憶された通りの変更を行ったものを、所定の場所（例えば記憶部１２またはＲＡＭ１３）に書き込む。
【００６４】
図１１は、本実施の形態に係る情報処理装置が書き込み部５２１を実行する処理の手順を示したフローチャート。
図１２は、本実施の形態に係る情報処理装置が行う処理の例を説明するための図。図１２では、一番上の行を０行目、一番左の列を０列目とし、タイトル行は０行目（タイトル行記憶部１６０５に0が記憶されている）、データ行は１列目以降（レコード開始行記憶部１６０６に1が記憶されている）、キー列は０列目（キー列位置記憶部１６０４に0が格納されている）として説明する。
【００６５】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、ストリーム記憶部５１１にnullが記憶されているか否かを判断（ステップＳ１１０１）し、ストリーム記憶部５１１にnullが記憶されている（ステップＳ１１０１：ＹＥＳ）場合は、テキスト記憶部５１２に記憶されたデータを変更対象のデータとし（ステップＳ１１０２Ａ）、ストリーム記憶部５１１にnullが記憶されていない（ステップＳ１１０１：ＮＯ）場合は、ストリーム記憶部５１１に記憶されている「データベースが存在する場所を示す情報」に基づいて読み込んだデータを変更対象のデータとする（ステップＳ１１０２Ｂ）。前記変更対象のデータの例は、表１２０１の通り。
【００６６】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、前記変更対象のデータのタイトル行（タイトル行記憶部１６０５によって定義された位置にある行）の列数を、他の行の列数のうち最大であるもの（以下「最大列数」と表記）と同数にする（ステップＳ１１０３）。
図１２にて説明する例の場合は、該ステップは、表１２０１に対して行うが、本例の場合、タイトル行の列数は最大列数と同じであるため変化しない。（ほとんどの場合、ステップ１２０３では最大列数は変化しない。本発明では、タイトル行の列数が他の列の列数未満にならないように制御してあるが、不具合によってその通りにならなかった場合は、ステップＳ１１０３によって修正される）
【００６７】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、前記変更対象のデータのタイトル行に、前記変更対象のデータのタイトル行に存在せず、変更記憶部５１３に存在するデータを追加する（ステップＳ１１０４）。
図１２にて説明する例の場合は、表１２０２は、変更記憶部５１３に存在するデータの例。本例では、
「キー列が1であるレコードの、タイトル行がCであるカラムのフィールドに1Cと書き込め」
「キー列が3であるレコードの、タイトル行がAであるカラムのフィールドに3Aと書き込め」
「キー列が5であるレコードの、タイトル行がAであるカラムのフィールドに5Aと書き込め」
「キー列が7であるレコードの、タイトル行がAであるカラムのフィールドに7Aと書き込め」
という情報が記憶されている。すなわち、タイトル行の「キー列ではないカラム」に、A、B、Cというデータが必要であるが、表１２０１の通りである場合は、タイトル行にCというデータが存在しない。ＣＰＵ１１は、プログラム１２Ｐに基づいて、タイトル行に存在せず、かつ、変更記憶部５１３のタイトルとして存在するデータ（ここでは、C）を特定し、該データを前記変更対象のデータのタイトル行に追加する。その結果の例は、表１２０４の通り。
【００６８】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、変更記憶部に記憶されている内容を前記変更対象のデータに書き込む（ステップＳ１１０５）。
図１２にて説明する例の場合は、キー列が1、3、5、7であるレコード（行）に変更対象のデータを書き込むため、該当する行の列数を、タイトル行の列数と同じにする。その結果の例は、表１２０５の通り。
次に、ＣＰＵ１１は、プログラム１２Ｐに基づいて、適切な位置に適切な値を書き込む。図１２にて説明する例の場合は、
キー列が1であるレコードの、タイトル行がCであるカラムのフィールドに1Cと書き込む処理と、
キー列が3であるレコードの、タイトル行がAであるカラムのフィールドに3Aと書き込む処理と、
キー列が5であるレコードの、タイトル行がAであるカラムのフィールドに5Aと書き込む処理と、
キー列が7であるレコードの、タイトル行がAであるカラムのフィールドに7Aと書き込む処理と、
を実行する。その結果尾の例は、表１２０６の通り。
【００６９】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、前記変更対象のデータを、削除すべき行と、それ以外の行に分ける処理を実行する（ステップＳ１１０６）。
削除すべき行は、変更記憶部５１３に「削除すべきレコード」として記憶された行。その一例は、表１２０３の通り。本例では、変更記憶部５１３に「キー列が4であるレコードを削除しろ」という情報が記憶されている。前記変更対象のデータは、レコード開始行記憶部１６０６に指定された行以降のみが、削除すべき行に分類される可能性がある。
図１２にて説明する例の場合は、キー列が4であるレコード（行）が削除すべき行であるため、削除すべき行のみを抜き出したデータ（表１２０８）と、それ以外の行のみを抜き出したデータ（表１２０７）が作成される。
以後、「前記第２の変更対象のデータ」と表記する場合は、ステップＳ１１０６によって作成された「削除すべき行以外のみを抜き出したデータ」（図１２にて説明する例の場合は、表１２０７）を指す。
以後、「前記第２の削除対象のデータ」と表記する場合は、ステップＳ１１０６によって作成された「削除すべき行のみを抜き出したデータ」（図１２にて説明する例の場合は、表１２０８）を指す。
【００７０】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、前記第２の変更対象のデータならびに前記第２の削除対象のデータを文字列に変換する（ステップＳ１１０７）。
本ステップで作成する文字列はフラットファイルデータベースとして使用するため、行境界記憶部１６０２に記憶された文字が行・レコードの境目、列境界記憶部１６０３に記憶された文字がカラムの境目として使用される。
よって、少なくともフィールドに行境界記憶部１６０２に記憶された文字と同じ文字あるいは列境界記憶部１６０３に記憶された文字が存在する場合、該当する文字をそのまま文字列に変換するとデータベースを処理する際に誤作動を起こす（例えば、列境界記憶部１６０３に「,」が記憶され、フィールドに「(,,゜Д゜)」が格納されているときは、フィールドに存在する「,,」を他の形態により表現しなければならない）。
よって、ＣＰＵ１１は、プログラム１２Ｐに基づいて、フィールドの文字列を適切な形態に変換する。該変換処理の内容は、実施の形態１に説明した通り。
図１２にて説明する例の場合（ここでは、列境界記憶部１６０３に「,」が、行境界記憶部１６０２に改行が記憶されているものとして説明する）は、前記第２の変更対象のデータならびに前記第２の削除対象のデータ（いずれもジャグ配列）の各要素である配列を、列境界記憶部１６０３に記憶された文字を挟んで連結した文字列を作成し、該文字列を要素とする１次元配列を作成し、該１次元配列の各要素である文字列を、行境界記憶部１６０２に記憶された文字を挟んで連結した文字列を作成する。つまり、前記第２の変更対象のデータは文字列１２０９に示す通りの文字列となり、前記第２の削除対象のデータは文字列１２１０に示す通りの文字列となる。
以後、前記第２の変更対象のデータから作成された文字列を「存続文字列」、前記第２の削除対象のデータから作成された文字列を「削除文字列」と表記する。
【００７１】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、例えば存続文字列をＲＡＭ１３または記憶部１２に記憶する（ステップＳ１１０８）。ただし、ステップＳ１１０８は、ステップＳ１１０９ならびにステップＳ１１１０の後に実行する形態であってもよい。
【００７２】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、ストリーム記憶部５１１にnullが記憶されているか否かを判断（ステップＳ１１０８）し、ストリーム記憶部５１１にnullが記憶されている場合は（ステップＳ１１０８：ＹＥＳ）は、存続文字列または削除文字列の少なくともいずれかをストリーム記憶部５１１（データベースが存在する場所を示す情報を記憶）が示す場所に保存する（ＲＡＭ１３または記憶部１２またはＲＡＭ２３または記憶部２２に記憶する）。
詳しく説明すると、次の通り。
データベース記憶部１５０１にnullが記憶されているか否かを判断（ステップＳ１１０８）し、データベース記憶部１５０１にnullが記憶されている場合は（ステップＳ１１０８：ＹＥＳ）は、存続文字列をデータベース記憶部１５０１（データベースが存在する場所を示す情報を記憶）が示す場所に保存する（ＲＡＭ１３または記憶部１２またはＲＡＭ２３または記憶部２２に記憶する）。
削除データ記憶部１５０２にnullが記憶されているか否かを判断（ステップＳ１１０８）し、削除データ記憶部１５０２にnullが記憶されている場合は（ステップＳ１１０８：ＹＥＳ）は、削除文字列を削除データ記憶部１５０２（データベースが存在する場所を示す情報を記憶）が示す場所に保存する（ＲＡＭ１３または記憶部１２またはＲＡＭ２３または記憶部２２に記憶する）。
【００７３】
（
変形例：
削除データ記憶部１５０２が示す場所にすでにデータが存在する場合は、該データに追記、上書きなどをする形態であってもよい
）
【００７４】
本実施の形態は、ルーチンによることができる。該ルーチンは、引数を持たず、ストリーム記憶部５１１（ストリーム記憶部５１１が示す位置に存在する情報を含んでもよい）、テキスト記憶部５１２、変更記憶部５１３を参照し、プログラム１２Ｐに基づいた動作をＣＰＵ１１に実行させる。返り値は、例えば、ストリーム記憶部５１１に記憶されたデータならびに存続文字列を格納したデータ集合体（例えばクラス）。
【００７５】
＜実施の形態７＞
本実施の形態では、変更部５０２を実行する。本実施形態のハードウェア構成は実施の形態２と同様。
【００７６】
本実施の形態は、データベースの、何というキーを持つレコードの、何というカラムであるフィールドに、何を書き込むべきかを示す情報を、所定の場所（例えば記憶部１２またはＲＡＭ１３）に記憶するものである。
【００７７】
変更部５０２は、データを書き込むレコードおよびカラムおよび書き込むデータ（例えば、文字列）の指定を受け付けて、該指定の通りにデータベースを変更すべき旨の情報を変更記憶部５１３（更新記憶部１３１０）に書き込む。（変形例：該指定の通りにデータベースを変更する。）
【００７８】
図１７は、実施の形態７に係る情報処理装置が変更部５０２の一部である更新記憶部１３１０を実行する処理の手順を示したフローチャート。
【００７９】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、更新記憶部１３０１にnullが格納されているかを確認（ステップＳ１７０１）し、更新記憶部１３０１にnullが格納されている場合（ステップＳ１７０１：ＹＥＳ）は、更新記憶部１３０１を、要素数０のデータ集合体（例えば連想配列）とする。
【００８０】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、更新記憶部１３０１に書き込もうとするキーと同じキーがすでに更新記憶部１３０１に存在するかを確認（ステップＳ１７０３）し、その通りである場合（ステップＳ１７０３：ＹＥＳ）は、更新記憶部１３０１に存在する、書き込もうとするキーと同じキーに対応する値を第２のデータ集合体（例えば、連想配列）とする。そうでない場合（ステップＳ１７０３：ＮＯ）は、要素数０のデータ集合体（例えば連想配列）を作成し、これを第２のデータ集合体とする。
「キー列が11であるレコードのカラムがDであるフィールドの値を11Dにしろ」という意味の情報を更新記憶部１３０１に記憶させたい場合を例に説明する。更新記憶部１３０１に、「11」というキーが存在する場合は、該キーに対応する値を第２のデータ集合体とし、それ以外の場合は、要素数０のデータ集合体を作成し、これを第２のデータ集合体とする。
【００８１】
第２のデータ集合体は、例えば「文字列をキーとし文字列を返す連想配列」であって、更新記憶部１３０１に記憶されるデータ集合体は、例えば「数値をキーに第２のデータ集合体を返す連想配列」。
【００８２】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、前記第２のデータ集合体にカラムとフィールドの組み合わせを書き込む。（ステップＳ１７０６）
「キー列が11であるレコードのカラムがDであるフィールドの値を11Dにしろ」という意味の情報を更新記憶部１３０１に記憶させたい場合を例に説明する。前記第２のデータ集合体のキーに「D」が存在する場合は、該キーに対応する値を「11D」に変更する。前記第２のデータ集合体のキーに「D」が存在しない場合は、前記第２のデータ集合体のキーと値の組み合わせに、「D」をキーに「11D」を値とする組み合わせを追加する。
【００８３】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、前記第２のデータ集合体を、更新記憶部１３０１に追加する（ＲＡＭ１３または記憶部１２に記憶する）。
「キー列が11であるレコードのカラムがDであるフィールドの値を11Dにしろ」という意味の情報を更新記憶部１３０１に記憶させたい場合を例に説明する。更新記憶部１３０１のキーに「11」が存在する場合は、該キーに対応する値を前記第２のデータ集合体に変更する。更新記憶部１３０１のキーに「11」が存在しない場合は、更新記憶部１３０１のキーと値の組み合わせに、「11」をキーとし、前記第２のデータ集合体を値とする組み合わせを追加する。
【００８４】
（
変形例：
本実施の形態では、連想配列を使用する場合を例示したが、連想配列ではないデータ集合体を用いるものであってもよい。例えば、２つのリストを作成し、第１のリストに連想配列のキーにあたるもの、第２のリストに連想配列の値にあたるものを記憶する等。
）
【００８５】
（
変形例：
本実施の形態は、更新記憶部１３０１を変更することであり、他の実施の形態と組み合わせることによって、更新記憶部１３０１を介してデータベースの内容を変更する事ができるが、本実施の形態は、データベースを直接変更するものであってもよい。
）
【００８６】
変更部５０２は、ルーチンによって行うことができる。該ルーチンは、書き込みたいレコードのキーを示す引数code（例えば、整数型）、前記レコードにおける書き込む対象であるカラムを示す引数title（例えば、文字列型）、前記レコードの前記カラムに何を書き込むかを示す引数data（例えば、文字列型）を持つ。（例えば、キー列が1であるレコードの、カラムがAであるフィールドに1Aを書き込ませたい場合は、codeに1、titleにA、dataに1Aを代入する）返り値は存在しないが、例えば書き込みの正否を返す値を返り値としてもよい。
【００８７】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、更新記憶部１３０１がnullであるかを確認（ステップＳ１７０１）し、更新記憶部１３０１がnullである場合（ステップＳ１７０１：ＹＥＳ）は、更新記憶部１３０１を、０個のキーを持つデータ集合体（例えば、整数をキーとし、文字列から文字列を返す連想配列を値とする連想配列。）とする。
【００８８】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、更新記憶部１３０１のキーにcodeと同じものが存在するかを判断（ステップＳ１７０３）し、更新記憶部１３０１のキーにcodeと同じものが存在する（ステップＳ１７０３：ＹＥＳ）場合は、該キーに対応する値を第２のデータ集合体とし（ステップＳ１７０５）、これ以外の場合は０個のキーを持つデータ集合体を作成し、これを第２のデータ集合体とする（ステップＳ１７０４）。
ＣＰＵ１１は、プログラム１２Ｐに基づいて、前記第２のデータ集合体のキーと値の組み合わせとして、titleとdataを書き込む（すでにキーとしてtitleと同じものが存在する場合は、titleに対応する値をdataに変更する）（ステップＳ１７０６）。
【００８９】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、更新記憶部１３０１に、codeをキーとし前記第２のデータ集合体を値とするキーと値の組み合わせを書き込む。（すでにキーとしてcodeと同じものが存在する場合は、codeに対応する値を前記第２のデータ集合体に変更する）。
【００９０】
＜実施の形態８＞
本実施の形態では、変更記憶部５１３の形態を説明する。本実施形態のハードウェア構成は実施の形態２と同様。
【００９１】
本実施の形態は、データベースの、何というキーの、何というカラムに何を書き込むべきかと、データベースの、何というキーを削除すべきかを、所定の場所（例えば記憶部１２またはＲＡＭ１３）記憶するものである。
【００９２】
図１３は、変更記憶部５１３および変更記憶部５１３に格納されたデータの一例を示す図。
【００９３】
更新記憶部１３１０は、データべースに対して施すべき変更（本実施の形態では、変更と表記する場合、特に断りがなければ新規データの追加を含む）を記憶する。データ型は、例えば「整数型」をキーとして「文字列型をキーとして文字列型を返す連想配列」を返す連想配列。
【００９４】
削除記憶部１３５０は、データベースに対して施すべき削除を記憶する。データ型は、例えば整数型のリスト、コレクションなどのデータ集合体。
図１３に示す例では、「キー列が4、5であるレコードを削除しろ」という意味。
【００９５】
キー１３１１は、更新記憶部１３１０（連想配列）のキー。
図１３に示す例では、更新記憶部１３１０は、1、3、7というキーを持つ連想配列であるから、データベースの、キー列が1、3、7であるレコードに対し変更すべき旨が記憶されている。
【００９６】
値１３１２は、更新記憶部１３１０（連想配列）の各々のキーに対応する値であって、データ型は、例えば文字列型から文字列型を返す連想配列。
図１３に示す例では、「1」をキーとして返す値は、「A」から「1AA」、「C」から「1CC」を返す連想配列である。これは、「キー列が1であるレコードの、カラムがAAであるフィールドの値を1AAにしろ」「キー列が1であるレコードの、カラムがCCであるフィールドの値を1CCにしろ」という意味。3、7をキーとして返す値についても、同様の方式で記憶されている。
【００９７】
連想配列１３２０は、更新記憶部１３１０（連想配列）の各々のキーに体操する値である連想配列。キー１３２１は、連想配列１３２０のキー、値１３２２は、連想配列１３２０の値。
【００９８】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、所定の場所（例えば記憶部１２またはＲＡＭ１３）に、更新記憶部１３１０、削除記憶部１３５０、の少なくともいずれかを記憶する部分を確保する。
【００９９】
（
変形例：
本実施の形態では、整数型（以下「データ１」）をキーとして第２の連想配列（以下「データ２」）を返す連想配列と、該第２の連想配列は、文字列（以下「データ２Ａ」）をキーとして文字列（以下「データ２Ｂ」）を返す連想配列である場合を例示したが、これによらないデータ集合体を用いてもよい。
）
【０１００】
＜実施の形態９＞
本実施の形態では、消去部５０３を実行する。本実施形態のハードウェア構成は実施の形態２と同様。
【０１０１】
本実施の形態は、データベースから削除したいレコードのキー列の指定を受け付けて、該キー列を削除すべき旨の情報を削除記憶部１３５０に記憶する。
【０１０２】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、削除記憶部１３５０にnullが格納されているかを確認する（ステップＳ１８０１）。削除記憶部１３５０にnullが格納されている（ステップＳ１８０１：ＹＥＳ）は、削除記憶部１３５０を、記憶されたキーが０個であるデータ集合体とする（ステップＳ１８０２）。
削除記憶部１３５０は、例えばリスト、コレクション等のデータ集合体である。
【０１０３】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、削除記憶部１３５０に書き込もうとするキーと同じデータが削除記憶部１３５０に存在するかを確認する（ステップＳ１８０３）。削除記憶部１３５０に書き込もうとするキーと同じデータが削除記憶部１３５０に存在しない（ステップＳ１８０３：ＮＯ）場合は、削除記憶部１３５０に書き込もうとするキーを、削除記憶部１３５０に書き込む（ＲＡＭ１３または記憶部１２に記憶する）。
「キー列が13であるレコードを削除しろ」という情報を削除記憶部１３５０に書き込む場合を例に説明する。削除記憶部に「13」という値が記憶されていない場合は、削除記憶部１３５０に、「13」という値を記憶する。
【０１０４】
＜実施の形態１０＞
本実施の形態では、取得部５２２を実行する。本実施形態のハードウェア構成は実施の形態２と同様。
【０１０５】
本実施の形態は、変更記憶部５１３を探索し、テキスト記憶部５１２を探索する。前記探索の結果、矛盾するデータが記録されている場合は、変更記憶部５１３を優先する。（例えば、「キー列が1であるレコードのカラムがCであるフィールド」を探索する際、変更記憶部５１３に「1C」が記憶されていて、テキスト記憶部５１２に「1CC」が記憶されている場合は、「1C」を優先する。
【０１０６】
本実施の形態では、キーとカラムの指定を受け付けて、指定されたキーを持つレコードの、指定されたカラムに存在するデータを返す。
図２１は、本実施の形態に係る情報処理装置が、変更記憶部５１３、テキスト記憶部５１２の少なくともいずれかからデータを探索する手順を示すフローチャート。
【０１０７】
変更記憶部５１３から探索する手順を説明する。
ＣＰＵ１１は、プログラム１２Ｐに基づいて、更新記憶部１３１０に、探索しようとするキーが存在するかを判断（ステップＳ２１０１）し、更新記憶部１３１０に、探索しようとするキーが存在する（ステップＳ２１０１：ＹＥＳ）場合は、更新記憶部１３１０に記憶されているキーに対応する値を取得する（ステップＳ２１０２）。（例えば、「16」というキーを持つレコードのデータを取得したい場合は、ステップＳ２１０１にて、更新記憶部１３１０に「16」というキーが存在するかを判断し、該キーが存在する場合は、ステップＳ２１０２にて該キーに対応する値を、更新記憶部１３１０から取得する）
【０１０８】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、ステップＳ２１０２にして取得したデータのキーに、探索しようとするカラムが存在するかを判断（ステップＳ２１０３）し、前記ステップＳ２１０２にして取得したデータのキーに、探索しようとするカラムが存在（ステップＳ２１０３：ＹＥＳ）場合は、前記ステップＳ２１０２にて取得したデータのキーに対応する値を記憶部１２またはＲＡＭ１３に記憶（ステップＳ２１０４）し、処理を終了する。（例えば、「D」というカラムにおけるデータを取得したい場合は、ステップＳ２１０２にて取得したデータのキーに「D」が存在するかを核にし、ステップＳ２１０２にて取得したデータのキーに「D」が存在する場合は、該キーに対応する値を、記憶部１２またはＲＡＭ１３に記憶する。）前記ステップＳ２１０２にして取得したデータのキーに、探索しようとするカラムが存在しない（ステップＳ２１０３：ＮＯ）場合は、テキスト記憶部５１２から探索する手順（ステップＳ２１１１以降）に移行する。
ステップＳ２１０４では、削除記憶部１３５０に該当するキーが存在する場合は、は、該当するデータが存在しない旨の情報を記憶部１２またはＲＡＭ１３に記憶する動作（図示しない）を含む。
【０１０９】
テキスト記憶部５１２から探索する手順を説明する。この手順は、更新記憶部１３１０に、探索しようとするキーが存在しない（ステップＳ２１０１：ＮＯ）場合に実施される。
ＣＰＵ１１は、プログラム１２Ｐに基づいて、テキスト記憶部５１２のキー列を探索し、探索しようとするキーがキー列に存在する位置を特定（ステップＳ２１１１）し、前記ステップＳ２１１１にて、探索しようとするキーがキー列に存在するレコードの位置を特定できたかを判断（ステップＳ２１１２）し、前記ステップＳ２１１１にて、探索しようとするキーがキー列に存在するレコードの位置を特定できなかったとき（ステップＳ２１１２：ＮＯ）は、該当するデータが存在しない旨の情報を記憶部１２またはＲＡＭ１３に記憶（ステップＳ２１１３）し、処理を終了する。
【０１１０】
前記ステップＳ２１１１にて、探索しようとするキーがキー列に存在するレコードの位置を特定できた（ステップＳ２１１２：ＹＥＳ）場合は、テキスト記憶部５１２のタイトル行（タイトル行とは、キー列を除く列にて、どの列が何を意味するカラムであるかを定義する行）を探索し、探索しようとするカラムが存在する位置を特定する（ステップＳ２１１４）。ステップＳ２１１４にて、探索しようとするカラムの位置が特定できたかを判断（ステップＳ２１１５）し、ステップＳ２１１４にて、探索しようとするカラムの位置が特定できなかった（ステップＳ２１１５：ＮＯ）場合は、該当するデータが存在しない旨の情報を記憶部１２またはＲＡＭ１３に記憶（ステップＳ２１１３）し、処理を終了する。
前記ステップＳ２１１５にて、探索しようとするカラムの位置が特定できた場合は、ステップＳ２１１１にて特定したレコードの、ステップＳ２１１４にて特定したカラムにあるフィールドに存在する情報を記憶部１２またはＲＡＭ１３に記憶する。これができないときは、該当するデータが存在しない旨の情報を記憶部１２またはＲＡＭ１３に記憶する（ステップＳ２１１７）。処理を終了する。
【０１１１】
ステップＳ２１１１の一例を説明する。テキスト記憶部に、キー列が1、2、3であるカラムが存在するとする。このとき、キー列が1、2、3のいずれかであるカラムを探索した場合はステップＳ２１１２がＹＥＳとなり、それ以外の場合はステップＳ２１１２がＮＯとなる。
【０１１２】
ステップＳ２１１４の一例を説明する。タイトル行のキー列を除く列に、A、B、Cというデータが存在するとする。このとき、A、B、Cのいずれかを探索した場合はステップＳ２１１５がＹＥＳとなり、それ以外の場合はステップＳ２１１５がＮＯとなる。
【０１１３】
ステップＳ２１１７の一例を説明する。例えば、ステップＳ２１１１にて３行目に該当するレコード、ステップＳ２１１４にて５列目に該当するカラムが存在する場合は、テキスト記憶部５１２の３行目かつ５列目のフィールドに存在するデータを記憶部１２またはＲＡＭ１３に記憶する。
【０１１４】
本実施の形態は、ルーチンによることができる。該ルーチンは、例えば引数として、取得したいレコードのキーを示す引数code（例えば、整数型）、取得したいカラムを示す引数title（例えば、文字列型）、データを取得できなかった場合に返す値err（例えば、文字列型）を持ち、返り値は例えば文字列型（データを取得できなかった場合errを返すため、errが文字列型かどうかにかかわらず、errと返り値は同じデータ型）。（ルーチンの動作中にエラーが発生した場合および該当するデータが見つからない場合にerrを返すが、ルーチンの動作中にエラーが発生した場合および該当するデータが見つからない場合に異なる値を返す形態であってもよい。その場合は、例えばerr1、err2のように、引数の数が変わってもよい）
【０１１５】
該ルーチンは、変更記憶部１３１０にcodeと同じものがキーとして存在するかを確認（ステップＳ２１０１）し、変更記憶部１３１０にcodeと同じものがキーとして存在する（ステップＳ２１０１：ＹＥＳ）場合は該キーに対応する値を第２のデータ集合体（例えば、連想配列）として取得する（ステップＳ２１０２）。前記第２のデータ集合体に、titleと同じものがキーとして存在するかを確認（ステップ２１０３）し、前記第２のデータ集合体に、titleと同じものがキーとして存在する（ステップＳ２１０３：ＹＥＳ）は、前記第２の集合体の該キーに対応する値を返り値とし（記憶部１２またはＲＡＭ１３に記憶）、処理を終了する（ステップＳ２１０４）。前記ステップＳ２１０１がＮＯである場合、前記ステップＳ２１０３がＮＯである場合は、ステップ２１１１に移行する。
前記ステップ２１０４では、削除記憶部１３５０にcodeと同じものが記憶されている場合は、errを返り値とし（記憶部１２またはＲＡＭ１３に記憶）、処理を終了する（図示しない）。
【０１１６】
テキスト記憶部５１２のレコードに相当する位置に存在するキー列にcodeと同じデータが存在するかを探索（ステップＳ２１１１）し、テキスト記憶部５１２のレコードに相当する位置に存在するキー列にcodeと同じデータが存在する位置を特定できたかを判断（ステップ２１１２）し、レコードに相当する位置に存在するキー列にcodeと同じデータが存在する位置を特定できなかった（ステップＳ２１１２：ＮＯ）場合は、errを返り値とし（記憶部１２またはＲＡＭ１３に記憶）、処理を終了する（ステップＳ２１１３）。
【０１１７】
キスト記憶部５１２のレコードに相当する位置に存在するキー列にcodeと同じデータが存在する位置を特定することができた（ステップＳ２１１２：ＹＥＳ）場合は、テキスト記憶部５１２のキー列を除くタイトル行に、titleと同じデータが存在する位置を特定する（ステップＳ２１１４）。テキスト記憶部５１２のキー列を除くタイトル行に、titleと同じデータが存在する位置を特定できたかを判断（ステップＳ２１１５）し、テキスト記憶部５１２のキー列を除くタイトル行に、titleと同じデータが存在する位置を特定できなかった（ステップＳ２１１５：ＮＯ）場合は、errを返り値とし（記憶部１２またはＲＡＭ１３に記憶）、処理を終了する（ステップＳ２１１６）。
【０１１８】
テキスト記憶部５１２のキー列を除くタイトル行に、titleと同じデータが存在する位置を特定できた場合（ステップＳ２１１５：ＹＥＳ）は、ステップＳ２１１１にて特定したレコードの、ステップＳ２１１４にて特定したカラムのフィールドに存在するデータを返り値とし（記憶部１２またはＲＡＭ１３に記憶）、処理を終了する（ステップＳ２１１７）。
【０１１９】
前記ルーチンの一部または全部にエラートラップを設置し、該エラートラップ内でエラーが発生した場合は、返り値をerrとする（）形態であってもよい。
【０１２０】
＜実施の形態１１＞
変更部５０２を実施する実施の形態は、実施の形態７に説明した通りだが、本実施の形態にて説明する実施の形態であってもよい。
【０１２１】
フラットファイルデータベースなど、数値を文字列等の一定の形式に変換して書き込むデータベースの場合は、言語によって数値の表現方法が違うから、言語によって間違って処理されるおそれがある。（例えば23.45とう数値を登録しようとする場合、日本語や英語では「23.45」と表記するが、スペイン語等、「23,45」と表記する場合がある。この場合、データベースを記録した言語とは違う言語を用いる情報処理装置が読み込んだ場合、数値が誤って読み込まれる恐れがある）。
【０１２２】
図１９は、変更部５０２の一例を示す図。文字列変更部Ｓ１９０１は、実施の形態７における変更部５０２と同様。
【０１２３】
十進変更部Ｓ１９０２の動作を説明する。十進変更部１９０２は、データを書き込むレコードおよびカラムおよび書き込む数値の指定を受け付けて、該指定の通りにデータベースを変更すべき旨の情報を変更記憶部５１３（更新記憶部１３１０）に書き込む。（変形例：該指定の通りにデータベースを変更する。）
【０１２４】
ＣＰＵ１１は、プログラム１２Ｐに基づいて、書き込もうとする数値（以下Xと表記）を０への丸め（Xと比較し０に近い（０との差が小さい）いくつかの整数のうち、最もXとの差が小さい数値への変更）をした数値（以下Aと表記）と、XとAとの差の絶対値（以下Bと表記）を計算するステップ（ステップＳ２００１）、Bが整数になるまでBを１０倍する処理を繰り返して得た値（以下Cと表記）を計算するステップ（ステップＳ２００２）、Aと、小数点を意味する記号（例えばピリオド）、Cを連結し文字列を作成するステップを実行し（ステップＳ２００４）、文字列変更部１９０１を実行する。このとき、書き込むべき文字列はステップＳ２００４にて作成した文字列。（ステップＳ２００５）。
前記小数点を意味する記号は、例えばプログラム１２Ｐによってきめられており、使用言語にかかわらず、例えばプログラム１２Ｐは、該記号を小数点として扱う。小数を格納することがある変数を用いる場合のデータ型は、十進型が望ましい。
【０１２５】
前記計算の一例を示す。
X=16.705の場合、A=16、B=0.705、C=705、となり、「16.705」という文字列が作成される。もしXを直接文字列に変換する処理をした場合、プログラム１２Ｐを実行する情報処理装置が使用する言語など、状況によっては、「16,705」など、不適切な文字列となるおそれがある。
X=-45.6492の場合、A=-45、B=0.6492、C=6492となり、「-45.6492」という文字列が作成される。もしXを直接文字列に変換する処理をした場合、プログラム１２Ｐを実行する情報処理装置が使用する言語など、状況によっては、「-45,6492」など、不適切な文字列となるおそれがある。
【０１２６】
十進変更部Ｓ１９０２は、ルーチンによることができる。該ルーチンは、書き込むべきレコードのキーをcode（例えば、整数型）、書き込むべきカラムをtitle（例えば、文字列型）、フィールドに書き込むべき数値をdata（例えば、十進型）とし、前記計算を行い、実施の形態７にて説明したルーチンを実行する。このとき、code、titleをそれぞれキー、カラムを意味する引数として渡し、フィールドに書き込むべき文字列は、前記処理によって作成された文字列を引数として渡す。
【０１２７】
数値変更部Ｓ１９０３の動作を説明する。
数値変更部Ｓ１９０３は、ルーチンによることができる。該ルーチンは、書き込むべきレコードのキーをcode（例えば、整数型）、書き込むべきカラムをtitle（例えば、文字列型）、フィールドに書き込むべき数値をdata（例えば、浮動小数点型）とし、dataを十進型に変換し（以下data_decと表記）、code、title、data_dicを引数として十進変更部Ｓ１９０２を実行する。
【０１２８】
＜備考＞
本明細書では、配列を取り扱う場面があるが、コレクションやリストなど、配列のように扱うことができる方法であれば、必ずしも配列でなくてもよい。
本明細書では、情報処理装置１のＣＰＵが第２情報処理装置２の一部または全部を動作させる表現があるが、情報処理装置１と第２情報処理装置２が通信をし、該通信内容に基づいて、第２情報処理装置２のＣＰＵ２１が動作することによって、第２情報処理装置２の一部または全部を動作させるものであってもよい。
本明細書では、記憶部やＲＡＭにデータを読み書きする表現があるが、ドライブ部を介して記憶媒体にデータを読み書きするものであってもよい。
本明細書では、プログラムが記憶部に記憶されている表現があるが、その他の場所（例えば、記録媒体）（例えば、通信網を介して接続されている他の情報処理装置）に記憶されていてもよい。
本明細書では、「第１の文字」のように、「〜文字」という表現があるが、該部分を「文字列」と読み替えてもよい。
テキスト記憶部５１２を、文字列型ジャグ配列を記憶するものとして説明することがあるが、これ以外の形態であってもよい
フラットファイルデータベースのレコード・行の境目が改行であるものとして説明することがあるが、これ以外の形態であってもよい。
フラットファイルデータベースのカラムの境目がカンマであるものとして説明することがあるが、これ以外の形態であってもよい。
本明細書では、ストリーム記憶部という表現を用いることがあるが、必ずしもストリームとして記憶するものでなくてもよい。
本明細書では、いくつかのハードウェア構成を記しているが、この通りでなければならないという意図はなく、本明細書に記載の発明を実施することができる形態であれば、任意のハードウェア構成をとりうる。
本明細書では、存在するデータに対し変更を施す旨の表現をすることがあるが、特に明記されていない限り、存在しないデータを新しく追加することを含む。
本明細書では、データが格納されていないことを「nullが格納されている」のように表現することがある。
本明細書は、第１の物が第２の物を変更し、変更された前記第２の物を参照し、第３の物を変更する表現があるが、前記第１の物が、前記第３の物を変更するものであってもよい。例えば、ルーチンが記憶部やＲＡＭに記憶されたデータを変更し、前記データを参照してデータベースの内容を変更するかわりに、前記ルーチンが前記データベースの内容を変更するものであってもよい。
本明細書で説明するルーチンの一部または全部にエラートラップを設置し、該エラートラップ内でエラーが発生した場合は、返り値を、エラーを意味する予め定められた値とする形態であってもよい。
本明細書では、エラーが発生したときや、該当するデータが見つからないときに決められた値を返す旨を記した場合があるが、エラーが発生したときと、該当するデータが見つからないときとで、異なる値を返す形態であってもよい。その場合、ルーチンの引数の数が変わってもよい。
本明細書では、実施の形態２と同様であるハードウェア構成は、実施の形態１と同様であってもよい。
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。また、各実施の形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【図１】
2020086617.tif 000003
【図２】
2020086617.tif 000004
【図３】
2020086617.tif 000005
【図４】
2020086617.tif 000006
【図５】
2020086617.tif 000007
【図６】
2020086617.tif 000008
【図７】
2020086617.tif 000009
【図８】
2020086617.tif 000010
【図９】
2020086617.tif 000011
【図１０】
2020086617.tif 000012
【図１１】
2020086617.tif 000013
【図１２】
2020086617.tif 000014
【図１３】
2020086617.tif 000015
【図１４】
2020086617.tif 000016
【図１５】
2020086617.tif 000017
【図１６】
2020086617.tif 000018
【図１７】
2020086617.tif 000019
【図１８】
2020086617.tif 000020
【図１９】
2020086617.tif 000021
【図２０】
2020086617.tif 000022
【図２１】
2020086617.tif 000023
【手続補正書】
【提出日】平成31年1月16日(2019.1.16)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2020086617.tif 000024
【図２】
2020086617.tif 000025
【図３】
2020086617.tif 000026
【図４】
2020086617.tif 000027
【図５】
2020086617.tif 000028
【図６】
2020086617.tif 000029
【図７】
2020086617.tif 000030
【図８】
2020086617.tif 000031
【図９】
2020086617.tif 000032
【図１０】
2020086617.tif 000033
【図１１】
2020086617.tif 000034
【図１２】
2020086617.tif 000035
【図１３】
2020086617.tif 000036
【図１４】
2020086617.tif 000037
【図１５】
2020086617.tif 000038
【図１６】
2020086617.tif 000039
【図１７】
2020086617.tif 000040
【図１８】
2020086617.tif 000041
【図１９】
2020086617.tif 000042
【図２０】
2020086617.tif 000043
【図２１】
2020086617.tif 000044
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
【図１】情報処理装置を示すブロック図。
【図２】実施の形態１に係る情報処理装置が実施の形態１に説明した処理を実行する手順を示すフローチャート。
【図３】実施の形態１に係る情報処理装置が行う処理の例の説明図。
【図４】実施の形態１に係る情報処理装置が行う処理の例の説明図。
【図５】実施の形態２に係るデータベース処理部の構成を示す図。
【図６】情報処理装置を示すブロック図。
【図７】情報処理装置を示すブロック図。
【図８】実施の形態２に係る情報処理システムの構成を示すブロック図。
【図９】実施の形態３に係る情報処理装置が読み込み部５０１を実行する処理の手順を示したフローチャート。
【図１０】情報処理装置を示すブロック図。
【図１１】実施の形態６に係る情報処理装置が書き込み部５２１を実行する処理の手順を示したフローチャート。
【図１２】実施の形態６に係る情報処理装置が行う処理の例を説明するための図。
【図１３】実施の形態８に係る変更記憶部５１３および変更記憶部５１３に格納されたデータの一例を示す図。
【図１４】実施の形態３に係る読み込み部５０１が実行する処理の手順を示したフローチャート。
【図１５】実施の形態４に係るストリーム記憶部５１１を示す図。
【図１６】実施の形態５に係るテキスト記憶部５１２を示す図。
【図１７】実施の形態７に係る情報処理装置が変更部５０２の一部である更新記憶部１３１０を実行する処理の手順を示したフローチャート。
【図１８】実施の形態７に係る情報処理装置が変更部５０２の一部である削除記憶部１３５０を実行する処理の手順を示したフローチャート。
【図１９】実施の形態１１に係る変更部５０２の一例を示す図。
【図２０】実施の形態１１に係る情報処理装置が行う処理の手順を示すフローチャート。
【図２１】実施の形態１０に係る情報処理装置が、変更記憶部５１３、テキスト記憶部５１２の少なくともいずれかからデータを探索する手順を示すフローチャート。
【手続補正書】
【提出日】令和2年2月20日(2020.2.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
フラットファイルデータベース（第１の文字をレコードの境目、第２の文字をカラムの境目とする）を管理するプログラムであって、
少なくとも、前記第１の文字列、前記第２の文字列が存在するデータを前記データベースに書き込むときに、
前記第１の文字列、前記第２の文字列を含む特定の文字列である部分を、
前記特定の文字列を含まないように変換処理を情報処理装置に実行させること
を特徴とするプログラムにおける、
変換処理は、
該変換処理をした部分と、それ以外の部分を、第４の文字列によって区切ることを特徴とする
プログラム。
【請求項２】
フラットファイルデータベース（第１の文字をレコードの境目、第２の文字をカラムの境目とする）を管理するプログラムであって、
少なくとも、前記第１の文字列、前記第２の文字列が存在するデータを前記データベースに書き込むときに、
前記第１の文字列、前記第２の文字列を含む特定の文字列である部分を、
前記特定の文字列を含まないように変換処理を情報処理装置に実行させること
を特徴とするプログラムにおける、
変換処理は、
対象に第３の文字列が存在する文字列を含むことを特徴とする
プログラム。
【請求項３】
データベースに、請求項１〜２に記載の変換処理が施された部分を含むデータが存在するときに、
前記処理が施された部分に対し、前記処理を施す前のデータに変更する処理を情報処理装置に実行させる
ことを特徴とするプログラム。
【請求項４】
条件Ａを満たす文字列を含む文字列を、条件Ａを満たさない文字列のみからなる文字列に変換する処理を情報処理装置に実行させるプログラムであって、
前記変換する処理は、前記条件Ａを満たす文字が何であるかによって、何に変換されるかが決定されること、
前記変換する処理を実行した部分と、それ以外の部分とを、条件Ｂを満たす文字列によって区切ること、
前記条件Ｂを満たす文字列が所定の条件を満たす回数（Ｃ回）連続した場合、Ｃの値によって決まる回数だけ連続する、条件Ｄを満たす文字列に変換されること、
を特徴とするプログラム。