2015年2月26日木曜日

エクセルのデータをsqlite3に取り込む

ほぼ一日中会議で終わった。

エクセルのデータをsqlite3に取り込むのに大苦戦。まだ、細かな点は分からなことだらけだが、最低限のことができるようになったのでメモ。

こんな感じのエクセルデータがあるとする。


「CSV(カンマ区切り)」で保存する。今回は「mushi.csv」として保存。


ここからは理由は良く分からないが、こうやったら上手くいった手順ということで。

「テキストエディット」でcsvファイルを開き、「別名で保存」から「Unicode(UTF-8)」で保存する。ファイル名は好きにして良いが、今回は「mushi.csv」のまま。

このcsvファイルを「TextWrangler」で開き、「Save as」から「Line breaks」を「Unix (LF)」に変更して「Save」する。


ターミナルを開き、

$ sqlite3 mushi.db; #mushi.dbというデータベースを作成
sqlite> create table mushi_table(id integer primary key, site text, animal text); #mushi.dbの中にmushi_tableというテーブルを作成
sqlite> .separator , #区切り文字を「,」に指定
sqlite> .import mushi.csv mushi_table #mushi.csvをmushi_tableに入れる
sqlite> select * from mushi_table; #mushi_tableを表示する

で、mushi.csvファイルが、mushi.dbのmushi_tableに取り込まれたことが分かる。

「テキストエディット」と「TextWrangler」の流れは、後者で一回でできるのだが、そのやり方だとナゼか日本語が文字化けする。

これだけのことにかなり苦戦したのだが、最も苦労したのが、「Line breaks」を「Unix (LF)」にするところ。

デフォルトでは「Classic Mac (CR)」になっており、このまま同じ作業を実行すると

expected 3 columns but found 11 - extras ignored

と列の数が上手く認識されない。LFとかCRは改行の指定らしのだが、、、全く理解できていないが、とりあえずということで。