PowerShell with SQLite3 サンプル集のコードをテストした際に、SQLite3の不具合と思われる現象により、期待した結果が得られずハマったので記載しておきます。
実行環境
Windows 10
SQLite3(sqlite3.exe/version 3.9.2)
現象
インポート前後で、SELECT文の結果出力の改行コードが変わる。
インポート前:CR+LF
インポート後:LF
なお、一旦SQLite3を抜けて再度SQLite3に接続し、
SELECT文を発行すると、改行コードはCR+LFで出力される
問題
SQLite3問い合わせ後、後続の処理でCR+LFを行区切り文字としてテキスト処理を行った場合、行が正しく区切られず、予期せぬ動作をする可能性がある
回避策
・改行コードが、CR+LFでもLFでも問題ないように後続のテキスト処理を行う
・インポート後は一旦SQLite3を抜け、再度接続を行ってから結果出力を行う
再現例
コマンド
c:\minr>sqlite3 test.db
sqlite>.mode csv
sqlite>.output result.csv
sqlite>create table try(id,name);
sqlite>insert into try values(4,'四朗');
sqlite>insert into try values(5,'五郎');
sqlite>select * from try;
sqlite>.import importfile.csv try
sqlite>select * from try;
sqlite>.exit
2行目までが、インポートする前に出力した結果(改行コード:CR+LF)、3行目以降がインポート後に出力した結果(改行コード:LF)
まとめ
もういっそのこと、Windowsが改行コードをLFだけにしてしまえよ 処理対象のテキストファイルの改行コードが何か、ということを気を付けてプログラムを組まないといけない、と改めて感じました。