xobQuery(ゾブクエリ)のヘルプ

コマンドプロンプトで、xoBlos Designer をインストールしたフォルダの下の [helper] フォルダに移動します。  (例: C:\Program Files\DIT\xoBlos Designer\helper )

xobquery -?

でヘルプが表示されます。

XobQuery version:1.0.0.2347
使用法: XobQuery
       [-d database_file]
       [-i input_file[::sheet_name[::top_left_cell_address[::row_count['x'column_count]]]][/table_name[/A][/X][/R][/C][/N]]]
       [-e encoding] [-h] [-t] [-l delimiter_char] [-f fields] [-1] [-a]
       [-x file_format] [-s skip_count] [-m max_row_count]

       [-o output_file[::sheet_name[/P][::top_left_cell_address[::row_count['x'column_count]]]][/table_name]] 
       [-E encoding] [-H] [-L delimiter_char] [-N] [-X file_format] 
       [-Z error_message]
       [-J setting]

       [-q query_string] [-Q query_file] [-c query_file_encoding]
       [-p param_name=param_value]
       [-r "query_replace_from::query_replace_to"]

       [-I interrupt_file][/check_count]
 ([]のオプションは省略可能)

 -d database_file
    指定があれば、このファイルをデータの作業場所とする。指定がなければ、メモリ
    内が作業場所となる。メモリ内が作業場所のときは、実行が終われば、作業場所内
    のデータは破棄される。

<入力に関するオプション>
 -i input_file
        [::sheet_name
            [::top_left_cell_address[::row_count['x'column_count]]]
        ]
        [/table_name[/A][/X][/R][/N]]
    (このオプションは複数回指定可能。実際は改行なしで指定のこと)
    
    input_file  
                入力ファイルを指定する。ワイルドカード指定可能。抽出データ形式
                (拡張子xml、xbd)、Excel形式(拡張子xl*)、CSV(拡張子その他)
                が指定可能。Excel形式はExcelが対応する全てのファイルが開けるわ
                けではない。
                ワイルドカード指定の場合、table_name の指定は必須で、該当する
                ファイルの全てのデータを table_name に投入する。これらのデータ
                は項目の数や構成が異なっていてもよく、全てのデータの項目を包含
                したテーブルが作成される。
                単一のファイルで、table_name の指定がなければテーブル名は、
                ファイルが Excel ファイルでなければファイル名の拡張子を除いた
                名前となり、Excelファイルならば、最初のシートの名前になる。
                -i を複数回指定して、そのそれぞれで同じ table_name を指定した
                場合は、それぞれの -i で指定したデータの項目を全て包含したテー
                ブルを作成し、全てのデータを投入する。
                テーブルの項目名は、/C の指定が無ければ、入力ファイルから得た
                名前を全て小文字にして作成される。
                一行の入力データに同一名称(大文字小文字区別せず)の項目が複数
                ある場合は、最後に読み込んだ値が採用される。

                ※input_file は存在しなくてもエラーにならない。存在しない時に
                  エラーとしたい場合には、table_name を指定した上、/R 指定する
                  こと。

    ::sheet_name
                Excel形式のときのみ有効。対象のシートを指定する。ワイルドカー
                ド指定が可能。空にするか * を指定すると、全てのシートが対象と
                なる。

                ※ sheet_name は存在しなくてもエラーにならない。存在しない時に
                  エラーとしたい場合には、table_name を指定した上、/R 指定する
                  こと。

    ::top_left_cell_address[::row_count['x'column_count]]
                Excel形式の場合は データを取り出す範囲を限定できる。

        例:
        -i input.xls::sheet1::B5::10x5
        この指定は、input.xls の sheet1 の B5 セルから 10行x5列の範囲を取り出
        す。後ろから順に省略が可能で、省略した場合は全部の範囲が対象となる。
        例えば、
        -i input.xls
        は、input.xls の全てのシートのA1から UsedRange で認識される全てのデータ
        が対象となる。

    /table_name
                input_file がワイルドカード指定の場合は必須。指定した名前のテー
                ブルにデータを投入する。

    /A
                指定がある場合、データを投入する前にテーブルを削除せず、レコー
                ドを追加する。データベースファイルを指定する場合で、一度の実行
                の後、同じテーブルにデータを追加したい時に指定する。このとき、
                既存のテーブルに無い項目を持つデータを指定するとエラーとなる。
                同一テーブル名を複数回指定した場合、うち一つでもこの指定があれ
                ば、全てに指定したのと同一の効果となる。

    /X
                指定がある場合、入力元の制御情報(ロード元のファイル名や行番号
                )を記録しないでテーブルを作成する。制御情報は、通常のクエリで
                は取り出されないが、項目に別名をつけることで取り出せる。
                ただ、この場合、SELECT DISTINCT * を行っても、入力元行番号の
                影響で、期待の結果は得られない。これを抑制するための指定。
                同一テーブル名を複数回指定した場合、うち一つでもこの指定があれ
                ば、全てに指定したのと同一の効果となる。
    
    /R
                指定がある場合、テーブルが作られない時にはエラーとする。
                テーブルが作られない原因は、入力のファイルがないか、レコードが
                ない場合となる。
                同一テーブル名を複数回指定した場合、うち一つでもこの指定があれ
                ば、全てに指定したのと同一の効果となる。

    /C
                入力データから項目名を作成するとき、大文字小文字を保持する。
                ひとつの -i オプションで指定した入力データ(複数あり)内に、同
                一名称(大文字小文字区別せず)の項目が複数ある場合は、最後に読
                んだ項目名が列名となる。(1ファイルであれば、1行内の後ろの
                項目。入力が抽出データ形式xml,xbd)ならば、より後ろの行でか
                つ1行内で後ろの項目。複数のファイルであれば、より後に読んだフ
                ァイルでの最も後ろの項目。複数のファイルは、ファイル名の昇順に
                処理する。)
                同一テーブル名を複数回指定した場合、うち一つでもこの指定があれ
                ば、全てに指定したのと同一の効果となる。

    /N
                指定がある場合、読み込んだ行の列がテーブルの列に対して足りない
                ときに、その列にはNULL値が挿入される。
                これにより、「入力データ中に項目があるが値が空」と、「入力デー
                タ中に項目自体が無い」を区別することが可能となる。
                既定では、これは区別なく、テーブルには空文字列が入る。

 -e encoding
    入力が CSV ファイルの時のみ有効。入力ファイルの文字コード(SJIS, EUC, JIS,
    UTF8, UTF16のどれか) を指定する。省略時は SJIS とみなす。

 -h
    入力が CSVExcelファイルの時のみ有効。データの1行目の値を項目名として使用
    することを指定する。指定がない場合、項目名は item1, item2,...のようになる。
    指定があっても空の場合は、item1 ... の名前をつける。
    項目の値の前後の空白は取り除かれる。また、大文字小文字の区別はつけず、半角
    英字は小文字となる。

 -t
    データ項目の前後の空白を取り除く

 -l delimiter_char
    入力が CSV ファイルの時のみ有効。項目を区切っている文字を指定する

 -f fields
    入力が CSVExcelファイルの時:
    入力する項目の番号(1始まり)を指定する。省略したら、すべての項目が入力と
    なりテーブルに登録される。入力レコードに存在しない項目の番号を指定すると、
    エラーとなる。ただし、入力レコードが0件の場合にはエラーにならない。
                      ex. -f1    1番目の項目
                          -f1,2  1 と 2  
                          -f1-3  1 から 3
    Excelファイルが入力で、列の数を指定しているときは、この指定は無視する。

    抽出データ形式の時:
    入力項目名を指定する。省略したら、全ての項目がテーブルに登録される。
    入力レコードに存在しない項目も指定可能だが、この時はテーブルに空の値が
    登録される。
                      ex. -f名前,住所,電話番号
    なおこの指定をすると、項目名を生成するための入力ファイルの走査を行わない
    ため、高速に処理出来る場合がある。

 -1
    入力が CSV ファイルの時のみ有効。項目を区切らずに改行毎に1項目として扱う。
    -l の指定と重複した場合、こちらが優先される。引用符はデータとして扱う。
    例えば、"aaa","bbb","ccc" の行は、このままの形で登録される。

 -x file_format
    file_format には、XLS|XBD|XBD1|CSV|EXCEL のいずれかが指定できる。
    入力ファイルの拡張子に関わらず、指定の形式として扱う。このため、読み込めな
    い場合がある。ファイルをワイルドカードで指定した時にこの指定をすると、全て
    のファイルを指定の形式として扱う。
    また、この他の入力に関するオプションは、ここで指定を行った場合適宜有効と
    なる。(たとえば、CSVファイルにのみ有効なオプションなど)

    XBD1指定:
    通常、XBD形式のファイルは、すべての行(ROWSタグ)を走査して項目を列挙する
    ため、その他の形式に比べて低速となる。対象のデータの各行が同じ項目である
    事が明らかな場合は、この指定をすることによって、最初のROWSタグのみを項目
    列挙に使用する。skip_count が指定されている場合は、項目列挙に使用するの
    は、指定した数の読み飛ばしを行ってから、最初のROWSタグ内の項目となる。

    EXCEL指定:
    通常、Excel形式のファイルは、MS Excelを使用せずに読み込みを行う(XLS指定
    のときも)が、EXCEL 指定をした時は、MS Excel を使って読み込む。これは、
    非常に低速になるが、通常の処理ではうまく読めないデータがある場合に使用する

 -s skip_count
    読み飛ばす行数を指定する。入力ファイルの種類により次のように動作する。
      Excel の時:このオプションは無視する。
      CSV   の時:先頭から指定行数読み飛ばす。結果、読むデータが無い場合があ
                  る。-h を同時に指定している場合、項目名は、読み飛ばした行の
                  直後の行から生成する。
      抽出データ形式の時:
                  先頭から指定回数分、ROWS 要素を読み飛ばす。

 -m max_row_count
    最大で読む行数を指定する。入力ファイルの種類により次のように動作する。
      Excel の時:このオプションは無視する。
      CSV   の時:指定行数を最大として、データがあるだけ読み込む。
      抽出データ形式の時:
                  指定回数を最大として、ROWS 要素を読み込む。
    
 -a
    テーブル列名に使用できない文字が含まれているために、入力データから列名が生
    成できない場合、エラーとせずに、エラーの原因となる文字を除去して名前をつけ
    る場合に指定する。この結果、元々エラーでなかった他の列と同一名となる場合は
    連番を付加する。
    なお、入力データの列名に相当するものが空の場合は、このオプションが指定され
    ていなくても、自動生成する。

<出力に関するオプション>
 -o output_file
        [::sheet_name
            [::top_left_cell_address[::row_count['x'column_count]]]
        ]
        [/table_name]
    output_file
                クエリの結果を出力する出力ファイル。クエリ、table_name 共に指定
                が無い時は無視される。table_name 指定があるとき、クエリ指定は無
                視される。ファイル名に "?" を含む場合には、その文字をクエリの出
                力列名のうち、"file_label"という名前の列の値で置換して出力する
                (結果、出力ファイルが複数となる場合がある)。
                この時、file_label の値がファイル名として不正な文字を含むとエラ
                ーになる。file_label の値はデータ中に出力されない。

                次の形式で出力可能(ファイルの拡張子で判断):

                抽出データ形式(拡張子 xbd, xml)
                    ファイル名に "?" を含まない時は、データの無いときには、Root
                    要素のみのファイルを作成する

                Excel形式(拡張子が xl ではじまるとき)
                    他の形式と異なり、出力ファイルがすでに存在するときは、内容
                    をクリアせずにデータを出力する。
                    出力ファイルが存在しない時、データの無いときは、空のシート
                    が作成される。

                CSV 形式(上記にあてはまらない拡張子のとき)
                    ファイル名に "?" を含まない時は、データの無いときには 0 バ
                    イトのファイルを作成する。

    ::sheet_name
                Excel形式の場合は ::sheet_name の指定が必須。Excel形式以外の場
                合、::sheet_name 指定は無視する。
                sheet_name に "?" を含む場合には、? 文字をクエリの出力列名のう
                ち、"sheet_label"という名前の列の値で置換して出力する(結果、
                出力シートが複数となる場合がある)。
                結果的にシート名が不正となる場合(使用できない文字が含まれる場
                合など)は、エラーになる。

    /P
                指定がある場合、指定したシートが存在しないときは無視する。
                指定のないときは、シートが存在しなければ作成する。

    ::top_left_cell_address[::row_count['x'column_count]]
                Excel形式の場合は データを出力する範囲を限定できる。
                指定の無い場合は、A1セルからデータのある分だけ出力する。

                例:
                -o output.xls::sheet1::B5::10x5
                この指定は、output.xls の sheet1 の B5 セルから 10行x5列の範囲
                にデータを出力する。出力のデータがこの範囲に収まらない場合は、
                それらのデータは切り捨てられる。出力データがこの範囲に満たない
                場合は、そのまま出力する

                ※ クエリの列名による、セルのアドレス指定での出力
                   列名が "cell_label_" で始まる列は、以降をセルのアドレスと
                   して扱い、常にその場所へ出力します。

                   例えば、次のようなクエリの場合

                   SELECT
                     社名     cell_label_C10,
                     住所     cell_label_E15,
                     明細ID,
                     品名,
                     金額
                   FROM TABLE_A

                   社名は常に C10セル、住所は常に E15 に上書き出力され、その他
                   の列(明細ID、品名、金額)は、一覧出力されます。


    /table_name
                指定した名前のテーブルの全件を出力する。この指定は、クエリ指定
                よりも優先される。


 -E encoding
    出力が CSV ファイルの時のみ有効。出力ファイルの文字コード(SJIS, EUC,JIS,
    UTF8, UTF16のどれか) を指定する。省略時は SJIS とみなす。

 -H
    出力が CSVExcelファイルの時のみ有効。1行目に項目名を出力する。

 -L delimiter_char
    出力が CSV ファイルの時のみ有効。項目を区切る文字を指定する。

 -N
    出力が CSV ファイルの時のみ有効。項目をダブルクオーテーションで囲まない時に
    は指定する。

 -X file_format
    file_format には、XLS|XBD|CSV|EXCEL のいずれかが指定できる。
    出力ファイルの拡張子に関わらず、指定の形式として扱う。
    また、この他の出力に関するオプションは、ここで指定を行った場合適宜有効と
    なる。(たとえば、CSVファイルにのみ有効なオプションなど)

    EXCEL指定:
    通常、Excel形式のファイルは、MS Excelを使用せずに出力を行う(XLS指定のとき
    も)が、EXCEL 指定をした時は、MS Excel を使って出力する。これは、非常に低速
    になるが、通常の処理ではうまく出力できないデータがある場合に使用する

 -Z error_message
    クエリ結果が0件のとき、error_message を出力して警告終了するには指定する。
    クエリ、および出力ファイルの指定が無い時にはこの指定は無視される。

 -J setting
    レポート作成設定の JSON 文字列、または設定ファイル名を指定する。
    指定の値のファイルがあれば、設定ファイル名と解釈し、そうでなければ JSON 文
    字列として解釈する。いずれも正しい設定として読み込めなければエラー。

    この指定があると、次の指定は無視する
       -o オプションのファイル名以外のすべての指定
       -E、-H、-L、-N の指定
       -X の EXCEL 以外の指定


<クエリに関するオプション>
-q query_string 
    データベースからデータを出力するときのクエリ文字列。-Q といずれも指定がなけ
    れば、データの取り出しは行わない。クエリの指定があり、-o(出力ファイル)の
    指定がなければ、データを取得しないクエリ(UPDATE とか)とみなし実行する。

      ※クエリにエラーがある場合、警告終了となる。異常終了としないのは、投入デ
        ータの内容によって、対象のテーブルが無い場合などと、本当の文法エラーの
        区別が判断できないため。これは、エラーメッセージから人によって判断が必
        要となる。

      ※出力をXMLファイル(抽出データ形式)にする場合には、取得した項目名は、
        XMLのタグとして利用できるルールに準じている必要がある。

      ※SELECTクエリの時は、複数のクエリを指定しても、最初のクエリの結果のみ得
        られる。SELECTで無い場合は、;(セミコロン)で区切ることにより、複数の
        クエリを一度に実行できる。

      ※クエリに使えるSQLの文法は、SQLite で解釈できるものに準ずる。

      ※同一の名前の項目を複数個指定した場合は、最後の項目が出力される。


 -Q query_file
    クエリ文字列が記載されたファイル。-q と同時に指定した場合、こちらが優先され
    る。

 -c encoding
    クエリファイルの文字コード(SJIS, EUC, JIS, UTF8, UTF16のどれか)を指定する。
    省略時は SJIS とみなす。
    
 -p param_name=param_value
    クエリ内に、@param_name の形式で記述したパラメータに対して、param_value で
    与えた値を割り当てる。

      例:SELECT * FROM table where name = @myname
          に値「sanpei」を割り当てるには、 -p myname=sanpei
          などとする。

    これはいわゆる「パラメータクエリ」なので、通常 WHERE句の条件の値を変更した
    り、INSERT 文の値を変更するのに使うが、SELECT の対象テーブル名を変更したり
    はでできない。このような用途には、-r を使うこと。

 -r "query_replace_from::query_replace_to"
    クエリ文字列内の query_replace_from を query_replace_to に置換する。パラメ
    ータとして使用できないような置換を行うために使う。クエリ文字列の指定が無い
    時は、無視される。パラメータクエリの指定と同時に指定される場合、パラメータ
    の設定よりも前に、置換処理が行われる点に注意のこと。
    複数指定することができるが、query_replace_from が同一の場合、より後ろで設定
    した内容が優先される。また、置換処理は指定した順番にクエリ全体に対して行わ
    れるので、前の置換の結果に対して後続の置換が行われる点も注意のこと。

-- クエリに使える拡張関数 --
   EX_ROUNDINT(値)
        値の小数点以下を四捨五入する。値が数値でないときは0。
   EX_REGMATCH(正規表現パターン, 調べる値)
        正規表現でマッチすれば true
   EX_TOZENKAKU(値)
        値を全角に変換する
   EX_TOHANKAKU(値)
        値を半角に変換する
   EX_FORMAT(書式文字列, 値,...)
        指定した書式で値を変換する。この書式は、.NETの string.Format の書式指
        定文字列と同等
   EX_FORMULA(数式文字列, 値...)
        Excel準互換の数式の結果を得る。値を指定したときは、これを EX_FORMAT と
        同等の書式文字列と扱って、変換した結果の数式文字列を評価する
   EX_DATETOSTR(値, [書式指定文字列])
        Excel の日付シリアル値を、日付の文字列に変換する。EX_FORMAT と同じ書式
        指定が可能
   EX_DATECALC(値, [値を日付に変換にする書式], [年の加算値], [月の加算値],
               [日の加算値], [計算結果を文字列にするときの書式])
        値を、指定した書式の日付として扱い、年、月、日の加算を行って、指定の書
        式で出力する。

     例:SELECT 
           EX_DATECALC(日付の列名, 'yyyy/M/d', 1, 1, 1, 'yyyy-MM-dd')
         FROM TBL
         'yyyy/M/d' 形式で格納されている日付の列の値の、1年と1ヶ月と1日後
         を求め、'yyyy-MM-dd' の形式で出力します。
         加算値は、マイナス値も指定可能。
         年を加算→月を加算→日を加算の順に個別に処理されます。
         書式には .NET のカスタム日付書式文字列が指定できます。和暦には対応
         していません。

<その他のオプション>
-I interrupt_file[/check_count]
    指定があれば、実行時にこのファイルを作成する。処理中にこのファイルが削除さ
    れたら、処理を中断して終了する。ファイルがすでに存在する場合もエラーとなら
    ない。
    check_count は、中断のチェックを行うレコードの間隔を示す。既定値は10000。
    この値が大きいほど、中断チェックを行う処理が、本来の処理に与える影響は小さ
    い。


退出コード:0 - 正常終了
            1 - 警告終了(クエリがエラーになった場合)
            2 - 異常終了(クエリ以外でエラーになった場合)
例外のときの詳細なエラーメッセージは、標準エラーに出力する。


--- オプションの指定の例 ---

1-1. 抽出データ XML ファイルを入力

    ◆ aaa.xml を読んで、項目 xxx が空でないもののみを bbb.xml に出力

       -i aaa.xml -o bbb.xml -q"select * from aaa where xxx is not null"

    ◆ aaa.xml を読んで、query.sql で記述したクエリを実行して、結果を bbb.xml
       に出力

       -i aaa.xml -o bbb.xml -Q query.sql

    ◆ aaa.xml を読んで、TABLE_A という名前のテーブルを作成して投入し、
       query.sql で記述したクエリを実行して、結果を bbb.xml に出力

       -i aaa.xml/TABLE_A -o bbb.xml -Q query.sql

    ◆ aaa.xml を読んで、TABLE_A という名前のテーブルを作成して投入し、
       クエリを指定せずに、全件を取り出す。
       (この例は無意味ですが、XMLCSVなど形式を変換したいときに使います)

       -i aaa.xml/TABLE_A -o bbb.xml/TABLE_A

    ◆ 項目の異なる aaa.xml, ddd.xml を共に TABLE_A に投入し、クエリで取り出す

       -i aaa.xml/TABLE_A -i ddd.xml/TABLE_A -o bbb.xml -Q query.sql

       このとき、TABLE_A は全ての入力 xml の項目をもったものになります。

    ◆ ワイルドカードで指定して、query.sql で記述したクエリを実行して、結果を
       bbb.xml に出力。

       -i *.xml -o bbb.xml -Q query.sqlxml は項目が異なっていても構いません。DBに作成されるテーブルは、全て
       の入力 xml の項目をもったものになります。テーブル名は、最初に *.xml に
       マッチしたファイル名から拡張子を抜いたものになります。

    ◆ 上と同様ですが、DBのテーブル名を明示的に指定しています。全てのデータが 
       TABLE_A に入ります。

       -i *.xml/TABLE_A -o bbb.xml -Q query.sql

    ◆ 一回目の実行で作成したデータベースをとっておいて、二回目の実行で、一回目
       で作成した TABLE_A にデータを追加します。

       -i aaa.xml/TABLE_A   -d work.db (一回目の実行)
       -i ccc.xml/TABLE_A/A -d work.db (二回目の実行)
   
       -d でデータベースファイル名を指定します。ファイルがなくても作成されます
       この場合は、aaa.xml, ccc.xml は同じ項目を持っていなくてはなりません

    ◆ データの投入のみを行います

       -i aaa.xml/TABLE_A -d work.db

    ◆ 既存の work.db ファイルからデータの取り出しのみ行います

       -d work.db -o bbb.xml -Q query.sql

    ◆ データの取り出し以外のクエリを実行します。(このとき出力ファイルを指定す
       ると、動作しません)

       -d work.db -q "DELETE FROM TABLEXXX"

    ◆ クエリファイル内に可変の変数を使い、外から値を与えて実行します

       -i aaa.xml -o xxx.xml -Q query.sql -p param1=AAAAA -p param2=BBBBB

      クエリファイルには次のように記述していて、
         SELECT * FROM mytable 
         WHERE nendo = @param1
         and   month = @param2
      @に続く変数に、値を与えて実行します。
      このような変数は、全ての文言に使えるわけではありません。例えば、
  
         @param1 * FROM mytable
     
      として、param1 に "SELECT" を与えるようなことはできません。

    ◆ -q と -Q を同時に指定したら??
       -Q が優先されます。

    ◆ UTF8 のクエリファイルを使いたい

       -d work.db -o bbb.xml -Q query.sql -c UTF8

    ◆ aaa.xml の 「name」 というタグを、「名前」 に変更したい

       -i aaa.xml -o bbb.xml -q "select name 名前 from aaa"

    ◆ 売上と商品の xml を、マッチングさせて出力したい

       -i 売上.xml -i 商品.xml -o bbb.xml -Q query.sql
   
       query.sql は例えば、
   
       SELECT
         s.商品名 商品名  ← (別名を付けないと「s.商品名」と出力されます)
        ,u.金額   金額
       FROM 売上 u INNER JOIN 商品 s
       ON u.商品コード = s.商品コード
   
       など・・

    ◆ 売上と商品の xml で、"商品にない" 商品コードをもつ売上データを出力したい

       -i 売上.xml -i 商品.xml -o bbb.xml -Q query.sql

       query.sql は例えば、

       SELECT
         u.商品コード   マスタにない商品コード
        ,s.商品コード
        ,u.金額         金額
       FROM 売上 u LEFT OUTER JOIN 商品 s
       ON u.商品コード = s.商品コード
       WHERE s.商品コード is null
       など・・

    ◆ aaa.xml を並べ替えたい

       -i aaa.xml -o bbb.xml -q "SELECT * FROM aaa ORDER BY 金額"

    ◆ aaa.xmlcsv にしたい

       -i aaa.xml -o bbb.csv/aaa
       または
       -i aaa.xml -o bbb.csv -q "SELECT * FROM aaa"

    ◆ aaa.xml の中に、「店名」があり、店名毎に別々のファイルを作成したい

       -i aaa.xml -o 売上_?.xml -Q query.sql
   
       query.sql は
         SELECT
           店名 file_label ← この名前のカラムの値は、出力ファイルの "?" の
                              場所に埋め込まれる
          ,売上金額
         FROM aaa
   
       とすると、
          売上_東京.xml
          売上_大阪.xml
          ....
       のようにファイルができる。



1-2. CSV ファイルを入力

    ◆ bbb.csvxml にする

       -i bbb.csv -o aaa.xml/bbb
       または
       -i bbb.csv -o aaa.xml -q "select * from bbb"
   
       ※ クエリでは、テーブル、カラム、SELECT等のキーワードは大文字小文字を
          区別しません。

    ◆ csv を全部まとめて xml にする(全ての csv が allcsv テーブルに入る)

       -i *.csv/allcsv -o aaa.xml/allcsv

    ◆ csv の一行目は項目名になっている。

       -i bbb.csv -h -o aaa.xml/bbb

    ◆ csv を全部まとめて xml にするが、各項目は異なっている

       -i *.csv/allcsv -h -o aaa.xml/allcsv

       ※ 例えば、
          csv-A
            ID,名前,性別
            1,太郎,男
            2,花子,女
        
          csv-B
            ID,生年月日,社員番号
            2,19900101,0808
            3,19951220,0900
      
          が、allcsv テーブルとして

            ID,名前,性別,生年月日,社員番号
            1,太郎,男,,
            2,花子,女,,
            2,,,19900101,0808
            3,,,19951220,0900

          と入る

    ◆ bbb.csv の特定の項目(1,3,8~10,20以降最後まで)のみを xml にする

       -i bbb.csv -f 1,3,8-10,20- -o aaa.xml/bbb


    ◆ ! 区切りで、UTF8 の csv を読む

       -i bbb.csv -e UTF8 -l ! -o aaa.xml/bbb


1-3. Excel ファイルを入力

    ◆ 特定のexcel シートを読み込む

       -i aaa.xls::sheet1

       このとき、テーブル名は、ファイル名と同じ aaa になります。

    ◆ 全部のシートを読み込む

       -i aaa.xls

       全てのシートが同一テーブルに入ります。このとき項目はすべてのシートの項目
       を含んだものになります。

    ◆ ワイルドカードでシートを指定

       -i aaa.xls::sheet_*

    ◆ 1行目を項目名にする

       -i aaa.xls::sheet1 -h

    ◆ C3セルを左上として読み込み、1行目を項目名にする

       -i aaa.xls::sheet1::C3 -h

    ◆ C3セルを左上として、10行x5列だけ読み込み、そのうちの1行目を項目名にする

       -i aaa.xls::sheet1::C3::10x5 -h

    ◆ C3セルを左上として、特定の列(1,2,3,7)だけ読み込む

       -i aaa.xls::sheet1::C3 -f 1-3,7

       -i aaa.xls::sheet1::C3::10x5 -h -f 1-3
       ↑このようにした場合、-f の指定は無視されます。
         (列数の指定をされているため)

    ◆ C3セルを左上として、特定の列と、行数を指定して読み込む

       -i aaa.xls::sheet1::C3::10 -f 1-3,7

    ◆ ExcelCSVxml を読んで、同じテーブルに投入

       -f 1-3,7 -h(続く)
        -i aaa.xls::sheet1::C3::10x5/TABLE_A  (続く) ← -f指定は効きません
        -i aaa.xls::sheet2::B5::20x8/TABLE_A  (続く) ← -f指定は効きません
        -i bbb.xls/TABLE_A                    (続く) ← -f指定が効きます
                                                           (全てのシートを読み
                                                             ます)
        -i ccc.xls::sheet_*::E1::5x5/TABLE_A  (続く) ← -f指定は効きません
        -i ddd.csv/TABLE_A                    (続く) ← -f指定が効きます
        -i eee.xml/TABLE_A                             ← -f指定は効きません
                                                           (そもそもXMLには効
                                                             かない)
    
       このとき TABLE_A には、CSV, Excelの対象の領域の一行目の項目と、xml の
       項目の全てを含んだ列ができます。

    ◆ 一行目を項目名として使い、項目番号を指定した時

       aaa.csv --
         あ,い,う
         aaa,bbb,ccc
     
       bbb.csv --
         い,う,え
         vvv,xxx,zzz

       というファイルを、
   
       -i aaa.csv/TABLE_A -b bbb.csv/TABLE_A -f 2,3
   
       で読み込むと、TABLE_A は
       い   う   え
       ----+----+----
       bbb  ccc
            xxx  zzz
   
       というデータになります。


2-1. Excel を出力する

    ◆ TABLE_A のデータを全て、Excel の Sheet1 に出力する

       -o out.xls::sheet1/TABLE_A

    ◆ クエリの結果を Excel の Sheet1 に出力する

       -o out.xls::sheet1 -q "SELECT * FROM TABLE_A"

    ◆ クエリの結果の値をファイル名の一部にして、複数のExcelファイルのSheet1 に
       出力する

       -o out_?.xls::sheet1 -q "SELECT *, name file_label FROM TABLE_A"
              ↑                                ↑
              file_label の値で置換する         ファイル名の一部にしたい値に
              位置に "?" を記述する             file_label という列名をつける

    ◆ クエリの結果の値をシート名の一部にして、Excelファイルの複数のシートに出
       力する

       -o out.xls::sheet_? -q "SELECT *, name sheet_label FROM TABLE_A"
                         ↑                     ↑
              sheet_label の値で置換する        ファイル名の一部にしたい値に
              位置に "?" を記述する             sheet_label という列名をつける

    ◆ クエリの結果の値をC5セルを左上にして出力する。また、name 列の値は、
       B3 セルに出力する

       -o out.xls::sheet1::C5 -q "SELECT name cell_label_B3, meisai FROM TABLE_A"
                                                         ↑
                                                出力するセルの位置を指定する

    ◆ クエリの結果の値をC5セルを左上にして、最大 10 行 x 5 列で出力する。

       -o out.xls::sheet1::C5::10x5 -q "SELECT * FROM TABLE_A"


【クエリTips】
    ◆ 売上の上位10レコードを抽出したい

       select
           店
          ,売上
       from 売上データ
       order by cast(売上 as int) desc
       limit 10

       ※ 売上は文字列なので、cast しないと正しく並べ替えられません


    ◆ 売上の上位11位~20位を抽出したい

       select
           店
          ,売上
       from 売上データ
       order by cast(売上 as int) desc
       limit 10
       offset 10


    ◆ 元のファイル名や、行番号の情報を取得したい
       select
          x.path
         ,x.filename
         ,x.ext
         ,x.sheetname
         ,t.__xob_row 行番号
         ,t.*
       from t inner join __xob_finfo x
       on t.__xob_finfo_rowid = x.rowid

       ※ __xob_finfo テーブルはシステムテーブルで、処理を行うと必ず作成されま
          す。また、各テーブルには、以下のシステム列があります。
             __xob_row           元のファイルの行番号
             __xob_finfo_rowid   ファイル情報テーブルの rowid

          クエリで select * をした場合、列が __xob で始まる場合は出力されませ
          ん。出力したい場合は、__xob 列に別名をつけます。