先日、はがきデザインキットが入ってた macOS Mojave 環境を発掘しました。
既にサポート終了してるアプリですが、「住所書出」機能を利用して、住所データを書き出す事は可能です。
早速、書き出してみたものの、出力された address_list.csv は、残念ながら私の欲しい形式の CSV ファイルではありませんでした。
....
そもそも、はがきデザインキットのデータは yubin10.db に記録されています。
そして、yubin10.db は SQLite のデータファイルなので、CLI である sqlite3 コマンドが利用できます。
私の欲しい形式の CSV ファイルは、文字列がダブルクオートで括られ、空文字列・項目省略・NULL 値が判別可能であれば良いのです。
これは sqlite3 コマンドで提供される機能の範疇で済みます。
せっかくの機会なので、yubin10.db から直接住所データを抽出してみました。
方針
yubin10.db のテーブルを私の都合で解釈します。
- 対象レコードは全件個人。
- 対象項目は私が識別できた項目から独断で決定。
- 項目名は address_list.csv の日本語名を参考に付加。
- 連名は夫婦しか登録してないので、一名のみ。
- 敬称は "様" のみ。
- カテゴリは名称のみ。
スクリプト
sqlite3 コマンドが一括処理できるようにスクリプトを用意します。
・ファイル名: hagaki_designkit.sql
.mode csv .headers on .once result.csv SELECT a.post_app_no AS '番号', a.post_app_name_sei AS '氏名(姓)', a.post_app_name_mei AS '氏名(名)', a.post_app_namekana_sei AS 'フリガナ(姓)', a.post_app_namekana_mei AS 'フリガナ(名)', a.post_app_disp AS 'リスト表示用氏名', a.post_app_disp_kana AS 'リスト表示用フリガナ', (CASE WHEN a.post_app_keisho = 1 THEN '様' ELSE '' END) AS '敬称', a.post_app_zip AS '郵便番号(自宅欄)', a.post_app_address1 AS '自宅住所(都道府県)', a.post_app_address2 AS '自宅住所(市区町村)', a.post_app_address3 AS '自宅住所(番地等)', a.post_app_address4 AS '自宅住所(建物名)', a.post_app_disp_address AS 'リスト表示用自宅住所', IFNULL(r.post_app_name_mei, '') AS '連名1(名:自宅欄)', (CASE WHEN r.post_app_renkeisho = 1 THEN '様' ELSE '' END) AS '連名1(敬称:自宅欄)', c.post_app_category_name AS 'カテゴリ' FROM post_app_adressbook AS a LEFT OUTER JOIN post_app_address_category_tbl AS b ON b.post_app_address_no = a.post_app_no INNER JOIN post_app_address_category_mst AS c ON c.post_app_category_no = b.post_app_category_no LEFT OUTER JOIN post_app_renmei AS r ON r.post_app_no = a.post_app_no ORDER BY a.post_app_no; .system open -a TextEdit result.csv
スクリプト内のドットコマンドでは出力を CSV モードにして、項目名の行を先頭に付加、そしてクエリの実行結果を result.csv に書き込むように指定します。
最後の .system で macOS 標準のテキストエディット (TextEdit) を起動して、result.csv の内容を確認します。
ちなみに VSCode で確認する場合は.system code result.csv
とします。
実行
ターミナルを起動して、スクリプトを処理します。
$ sqlite3 yubin10.db < hagaki_designkit.sql $ file --mime result.csv result.csv: application/csv; charset=utf-8
result.csv ファイルを確認した後、念の為、文字コードも確認してみました。
無事 UTF-8 にエンコードされています。
ほんと sqlite3 コマンドって便利ですね。※公式サイトはこちら
あとがき
住所データを失って早三年かと思ってたところ、まさか別環境に存在してたとは。
今更感満載ですが、これは僥倖とウキウキ作業してました。
しかし、はがきデザインキットが書き出す CSV ファイルは charset=unknown-8bit 、文字列はそのまま出力されます。
期待と異なる結果に、一瞬絶望しました。
それでも結果としては自分好みに処理できたので、概ね満足してます。
後は子供達の名前も連名に含んでるパターンが少々気になりますが、発掘した macOS Mojave 環境は既に消去したので、もはや確認する術がありません。
もう少し早く気づけば良かったな。