このブログを書いてるWord PressではMySQLというDB(データベース)を使っているが、iPhoneなどのモバイル用OSではSQLite3を使っている場合が結構あるみたい。
iPhoneのバックアップデータをいろいろ覗いている時によくわからない拡張子があったので、調べてみるとSQLiteのDBファイルだった。
SQLiteは拡張子が任意に付けられるので、謎の拡張子なのも納得
電話帳とか画像ファイル管理とか結構使われてますね。
SQLiteは1ファイルが1DBなので、バックアップもファイルをコピーするだけでできるのですごく扱いやすい。
他にiPhoneではplistというxmlファイルに固有情報などが入ってましたね
ともかく今回のテーマは line 1: expected 10 columns of data but found 1 というエラーについて
ググっても探せなかったが、自分で解決できたので公開しておきます
例えばcsvとかtxtファイルから、SQLiteにインポートするときに、区切り文字を認識する必要がある
TextEditorによっては区切り文字を選択できたり、Excelから別名保存するときにcsv形式を選ぶと,(カンマ)区切りとかありますよね。
SQLiteをコマンドプロンプトでDOS窓から扱う場合、デフォの区切りは|(パイプ)になっている
.separator というコマンドで区切り文字を変えられるんだけど、そこだけではダメなのがわかった。
ボクがやりたかったのは、マクロとかUWSCを使ってExcelに入力したリストからSQLiteのDBを作成するというのを自動化することだった。
Excelから直接インポートは巷に出回っているGUIのツールを使えばできるんだけど、自動化するのはちょっと難しい。
そこで、マクロかUWSCを使ってExcelファイルを一旦メモ帳でtxtファイルに書き出し、それをインポートしようという思惑
しかし、メモ帳だとExcelからコピーした場合の区切り文字はtabになる
それを|(パイプ)に置換するという方法もあるが、データそのものをいじくり回すより、SQLite側の設定を変更したほうが、スマートかな?と思い、そっちでいく事にした
.separator tabs
を実行して、インポートしてみると問題の line 1: expected 10 columns of data but found 1 エラーが出てしまって入らない
“わたしゃ10カラム分のデータを期待してるのに、1個しかないじゃん!”と怒られてしまった
要は区切り文字が認識されていないってことですね
ハイハイ。見てみりゃ良いんでしょ
sqlite> .show
echo: off
explain: off
headers: off
mode: list
nullvalue: “”
output: stdout
separator: “tabs”
stats: off
width:
ちゃんとなってるじゃん
でもちょっと待て
テーブルを作成する時のコマンドをよく見てみた
sqlite> CREATE TABLE tablename (“A” , “B” , “C” , “D” , “E” , “F” , “G” , “H” , “I”, “J” );
なるほど、コレのせいかテーブルを作成するときのcolum名の区切り文字が影響してそう
一旦テーブルを削除して、再度区切り文字をtabにしてやってみた
sqlite> DROP TABLE tablename; //テーブル削除
sqlite> CREATE TABLE tablename (“A” “B” “C” “D” “E” “F” “G” “H” “I” “J” ); //テーブル作成。わかりにくいけどtab区切り
sqlite> .import “c:\\sqlite3\\テストメモ.txt” tablename //Textファイルのインポート
上手くいった
ありがちだけど、ハマると大変だからお気を付けあそばせ。osamushi
コメント