SQLite対応アプリのデータベースファイルをCSV化する(2)

海上忍
2010-03-02 18:52:04
  • このエントリーをはてなブックマークに追加

 前回は、sqlite3コマンドでアドレスブックのデータベースファイル(~/Library/Application Support/AddressBook/AddressBook-v22.abcddb)をCSVに書き出した。今回は、そのデータを生かすべく、sqlite3コマンドのワンランク上の使い方を紹介しよう。

 sqlite3コマンドは、最初の引数にデータベースファイル名を、2番目の引数に内部コマンドを与えたうえで実行すると、対話モードに遷移せず処理できる。たとえば、~/Library/Application Support/AddressBookがカレントディレクトリのとき以下のコマンドを実行すれば、ファイルのデータすべてをlessで閲覧することができる。

$ sqlite3 AddressBook-v22.abcddb ".dump" | less

 前回紹介したCSVでの出力も、パイプを経由したほうが話は早い。データはUTF-8でエンコードされているので、そのままではExcel 2008で開くことはできないが、nkfにパイプしてシフトJISに変換すればいい。このとき、sqlite3コマンドで「-separator」オプションを使い、区切り記号に「,」を指定することがポイントだ。これで適当なファイルにリダイレクトすれば、シフトJISエンコードのCSVとしてエクスポートできる。

$ sqlite3 -separator "," AddressBook-v22.abcddb "select * from ZABCDCONTACTINDEX" | nkf -s > address.csv

 このような方法でアドレスブックのデータベースにアクセスすれば、必要な情報を表形式で取り出せる。たとえば、すべてのメールアドレスを抽出するには、以下のとおりコマンドを実行すればいい。また、テーブル名を「ZABCDPOSTALADDRESS」、キーワードを「ZZIPCODE」にすれば、郵便番号を抽出できる。テーブルの内容をダンプすればキーワードがわかるので、必要なデータを取り出す用途に役立ててほしい。

$ sqlite3 AddressBook-v22.abcddb "select ZADDRESS from ZABCDEMAILADDRESS;" | sort | uniq
  • 新着記事
  • 特集
  • ブログ