2024/05/09 TechnoStyle

DataBaseTool 仕様

DataBaseToolはコンソールアプリケーションです。データベースSQLiteにアクセスし、CSVファイルのデータをテーブルに登録したり、検索結果をCSVファイルに出力したりすることができます。

使用方法

書式

DataBaseTool 入力ファイル名 -Dデータベースファイル名 [-E] [-I入力テンプレートファイル名] [-Sデータ開始行] [-O出力ファイル名] [-A] [-T] [-U出力テンプレートファイル名] [-Mメッセージ出力ファイル名]

引数の仕様は以下の通りです。[]は省略可能な引数です。

入力ファイル名 Iオプションを指定した場合はCSVファイル、指定しない場合はSQLが記述されたテキストファイルを指定してください。
-Dデータベースファイル名 Dオプションは必ず指定してください。データベースファイルが存在しない場合は自動作成します。
-E Eオプションを指定した場合は結果を返さないSQL(insertやupdate、delete)として処理を実行します。Eオプションを指定しないの場合は結果を返すSQL(select)として処理を実行します。省略可。
-I入力テンプレートファイル名 Iオプションを指定した場合、入力ファイルで指定されたCSVを読み込み、1行毎にIオプションで指定されたテンプレートファイルを展開して実行します。省略可。
-Sデータ開始行 Iオプションが指定されている場合にSオプションを指定すると、CSVファイルのデータ開始行を指定できます。指定されていない場合は1行目からデータとして処理をします。省略可。
-O出力ファイル名 Oオプションを指定した場合、結果をファイルに出力します。指定されていない場合は、結果を標準出力に出力します。省略可。
-A Oオプションが指定されている場合にAオプションを指定すると、出力ファイルに追記します。Aオプションが指定されていない場合は上書きとなります。省略可。
-T Tオプションを指定した場合、出力データはタブ区切り形式となります。指定されていない場合はCSV形式となります。省略可。
-U出力テンプレートファイル名 Uオプションを指定した場合、出力データは出力テンプレートファイルの書式に従って出力されます。(Tオプションは無視されます。)省略可。
-Mメッセージ出力ファイル名 Mオプションを指定した場合、エラーメッセージをファイルに出力します。指定されていない場合は、標準出力に出力します。省略可。

入力ファイル

CSVファイル

Iオプションを指定した場合、入力ファイルに指定されたのCSVファイルを読み込みます。CSVファイルの1行を読み込む毎にIオプションで指定されたテンプレートファイルを展開して実行します。

テンプレートファイルを使うと、実行するSQLの任意の場所にCSVで読み込んだデータを埋め込むことができます。以下の例では、顧客マスタにデータを登録するinsert文のvalues句に、CSVのデータがセットされて実行されます。

insert into 顧客マスタ values ({%GET_FIELD_VALUES_IN_SQL_VALUES(in,1-2)})

values句の「{%GET_FIELD_VALUES_IN_SQL_VALUES(in,1-2)}」の部分がマクロ文となっており、CSVで読み込んだデータの1カラム~2カラムの内容が、SQL文のvalues句として展開されます。

テンプレートファイルのマクロ文の書式は、後述の「テンプレートファイルのマクロ書式」を参照してください。

SQLファイル

Iオプションが指定されていない場合は、入力ファイルにSQLが記述されたテキストファイルを指定します。処理の実行は、単純に記述されているSQLを実行するだけとなります。

出力について

出力先

Oオプションを指定した場合、結果をファイルに出力します。指定しない場合は、結果を標準出力に出力します。

出力形式

Uオプションを指定した場合、出力データは出力テンプレートファイルの書式に従って出力されます。指定しない場合は、CSV形式で出力されます。Tオプションを指定した場合は、タブ区切り形式で出力されます。

Uオプションを指定して、以下の例をテンプレートファイルに記述した場合、CSV形式で出力される結果と同じになります。

{%GET_FIELD_VALUES_IN_CSV(table,1-)}

使用例

例1

SQLのcreate tableを記述したファイル(sql.txt)を実行し、DB(master.db)にテーブルを作成する。

DataBaseTool c:\sql.txt -Dc:\master.db -E

例2

CSV形式のファイル(data.csv)からデータを読み込みDB(master.db)のテーブルにデータを登録する。データ登録用のSQLはテキストファイル(in_template.txt)に記述する。

DataBaseTool c:\data.csv -Dc:\master.db -Iin_template.txt -E

例3

SQLのselectを記述したファイル(sql.txt)を実行し、DB(master.db)のテーブルからデータを取得しCSV形式でファイル(out.csv)に出力する。

DataBaseTool c:\sql.txt -Dc:\master.db -Oout.csv

テンプレートファイルのマクロ書式

テンプレートファイルのマクロ書式の仕様は以下の通りです。

出力テンプレートで使用するマクロ

NAME CSVテキスト取得
FORMAT {%GET_FIELD_VALUES_IN_CSV(対象,列番号,列番号,…)}

SQL実行のSLELCT文の結果レコードをCSV(カンマ区切り)で取得します。対象には「table」を指定します。

列番号は、結果レコードの列番号を指定します。列番号は複数記述することが可能です。例えば1番目と2番目の項目を取得したい場合は、1,2と記述します。2番目~5番目の項目を取得したい場合は、2-5と記述します。1,3-5のようにカンマとハイフンを組み合わせて指定することも可能です。1-や-3のように、開始や終了の列番号を省略することも可能です。

取得されるテキストはCSV形式になります。複数の項目がカンマで区切られ、項目中にカンマがある場合は、項目が”で囲われます。単一の列を取得する場合でも、項目中にカンマがある場合は、項目が”で囲われます。

項目中に"がある場合は、""と2つ続けて記述され、項目が”で囲われます。

例1
Selectの結果レコードが「伊藤由美子,女性,24,東京都品川区」の場合、以下のマクロでは「女性,東京都品川区」が返却されます。
{%GET_FIELD_VALUES_IN_CSV(table,2,4)}
例2
Selectの結果レコードが「伊藤由美子,女性,24,東京都品川区」の場合、以下のマクロでは「伊藤由美子,女性,24」が返却されます。
{%GET_FIELD_VALUES_IN_CSV(table,1-3)}
例3
Selectの結果レコードが「伊藤由美子,女性,24,"東京都,品川区"」の場合、以下のマクロでは「伊藤由美子,"東京都,品川区"」が返却されます。
{%GET_FIELD_VALUES_IN_CSV(table,1,4)}
NAME TSVテキスト取得
FORMAT {%GET_FIELD_VALUES_IN_TSV(対象,列番号,列番号,…)}

SQL実行のSLELCT文の結果レコードをTSV(タブ区切り)で取得します。対象には「table」を指定します。

返却文字列がタブ区切りとなる以外は、CSVテキスト取得マクロと同じ仕様となります。

NAME SVテキスト取得
FORMAT {%GET_FIELD_VALUES_IN_SV(対象,区切り文字,エスケープ有無(有|無),囲い文字,全項目囲い文字付与有無(有|無),項目番号,項目番号,…)}

SQL実行のSLELCT文の結果レコードを引数で指定された区切り文字区切りで取得します。対象には「table」を指定します。

基本的な動作はCSVテキスト取得マクロと同じですが、区切り文字、エスケープ処理の有無、囲い文字、全ての項目に囲い文字を付与するかどうかを指定可能です。

エスケープ処理は、項目中に区切り文字が含まれている場合に、囲い文字で項目を囲います。また、項目中に囲い文字が含まれている場合に囲い文字を2つ続けて記述し、囲い文字で項目を囲います。

例えば1番目のデータが「123」、2番目のデータが「A,BC」の場合、「123,"A,BC"」と取得されます。

1番目のデータが「123」、2番目のデータが「A"BC」の場合、「123,"A""BC"」と取得されます。

全項目囲い文字付与有無に「有」が指定された場合は、全項目が囲い文字で囲われます。エスケープ処理ではないので、同時にエスケープ処理を行いたい場合は、エスケープ有無に「有」を合わせて指定してください。

例1
Selectの結果レコードが「伊藤由美子,女性,24,"東京都,品川区","タイトル""夏の思い出"""」の場合、以下のマクロでは「"伊藤由美子"|"女性"|"24"|"東京都,品川区"|"タイトル""夏の思い出"""」が返却されます。
{%GET_FIELD_VALUES_IN_SV(table,|,有,",有,1-)}
例2
Selectの結果レコードが「伊藤由美子,女性,24,"東京都,品川区","タイトル""夏の思い出"""」の場合、以下のマクロでは「伊藤由美子,女性,24,東京都,品川区,タイトル"夏の思い出"」が返却されます。
{%GET_FIELD_VALUES_IN_SV(table,\,,無,',無,1-5)}
例3
Selectの結果レコードが「伊藤由美子,女性,24,"東京都,品川区","タイトル""夏の思い出"""」の場合、以下のマクロでは「伊藤由美子,女性,24,'東京都,品川区',タイトル"夏の思い出"」が返却されます。
{%GET_FIELD_VALUES_IN_SV(table,\,,有,',無,1-5)}

入力テンプレートで使用するマクロ

NAME SQL項目値テキスト取得
FORMAT {%GET_FIELD_VALUES_IN_SQL_VALUES(対象,列番号,列番号,…)}

入力ファイルから読み込んだCSVテキストをSQL用のカンマ区切りテキストとして取得します。本マクロでは、SQLに必要なエスケープ処理を行います。対象には「In」を指定します。

以下、顧客マスタのテーブルレイアウトが以下の場合の例となります。

CREATE TABLE 顧客マスタ(
    fax_no VARCHAR(16),
    name text,
    primary key (fax_no)
)
例1
入力ファイルから読み込んだCSVテキストの1番目と2番目の項目値を、顧客マスタに登録するSQLは以下の様になります。
insert into 顧客マスタ values ({%GET_FIELD_VALUES_IN_SQL_VALUES(in,1-2)})

リターンコード

リターンコードは以下の通りです。

-1 入力ファイルが指定されていません。入力ファイルを指定してください。
-2 Dスイッチが指定されていません。Dスイッチは必ず指定してください。
-3 Dスイッチ引数で指定されたデータベースファイルが作成、又はオープンできません。
-4 Dスイッチ引数が指定されていません。データベースファイル名を指定してください。
-5 Oスイッチ引数が指定されていません。
-6 Iスイッチ引数で指定された入力テンプレートファイルが見つかりません。
-7 Iスイッチ引数が指定されていません。入力テンプレートファイル名を指定してください。
-8 Sスイッチ引数は整数を指定してください。
-9 Sスイッチ引数が指定されていません。データ開始行を指定してください。
-10 Uスイッチ引数で指定された出力テンプレートファイルが見つかりません。
-11 Uスイッチ引数が指定されていません。出力テンプレートファイル名を指定してください。
-12 Mスイッチ引数(メッセージファイル)が指定されていません。
-13 仕様外のスイッチが指定されました。
-14 入力ファイルが見つかりません。
-50 実行エラー。SQLの実行でエラーが発生しました。

ライセンスについて

DatabaseToolは、eDocArrangementの購入者にライセンスされます。試用については、eDocArrangementと同じ期間、試用できます。

動作に必要なライブラリー

.NET Framework 4.6.2 以降

使用しているオープンソースライブラリー

System.Data.SQLite 1.0.118.0 を使用しています。

更新履歴

2024/05/09 Version 1.1.0

  • .NET Framework 2.0 から .NET Framework 4.6.2 に変更。
  • System.Data.SQLite.dllを 1.0.118.0 (3.42.0) に更新。

2019/12/04 Version 1.0.3

  • System.Data.SQLite.dllを 1.0.112.0 (3.30.1) に更新。

2018/03/18 Version 1.0.2

  • エラーが発生した場合に行数とSQLを出力するよう変更。
  • エラーメッセージに改行がある場合、改行を削除するよう変更。

2014/01/23 Version 1.0.1

  • 改行の入ったCSVを読み込んだ場合に改行を削除してしまう不具合を修正。

2012/10/22 Version 1.0.0

  • 新規リリース。