sqlite3 で日本語のデータが扱えるのだろうか。
Mac のターミナルを起動して LANG の値を出力したらつぎのようになった。 Tomokiyo-no-MacBook-Pro:~ tomokiyo$ echo $LANG ja_JP.UTF-8 そこで、試しにデータベースを作って日本語のデータを入力してみた。 $ sqlite3 names.db "create table members (mkey integer primary key, name text, age integer);" $ sqlite3 names.db "insert into members (name, age) values ('桃太郎',18); $ sqlite3 names.db "insert into members (name, age) values ('かぐや',16); $ sqlite3 names.db "insert into members (name, age) values ('金太郎',12); $ sqlite3 names.db "select * from members where name='かぐや'" 2|かぐや|16 無事、日本語での検索ができた。 そこで欲を出して郵便番号のデータベースを作ってみることにした。郵便局のホームページから郵便番号の CSV ファイルをダウンロードした。 ダウンロードした KEN_ALL.CSV は CR-LF 改行の S-JIS ファイルなので nkf を使って次のように LF 改行の UTF-8 ファイルにした。 $ nkf -w -Lu KEN_ALL.CSV > yubin.csv nkf が Mac に入っていないときは MacPorts がインストールされていれば、 $ port install nkf でインストールできる。 そこで郵便番号のデータベース yubin.db を次のようにして作った。 $ sqlite3 yubin.db "create table master (dantai text, zip_old text, zip text, ken text, si text, cho text, kenmei text, simei text, chomei text, op1 integer, op2 integer, op3 integer, op4 integer, op5 integer, op6 integer);" CSV ファイルからのデータのインポートは次のようにした。 $ sqlite3 -separator , yubin.db ".import yubin.csv master" 日本語で検索すると実行できた。 $ sqlite3 yubin.db "select * from master where cho='ヤマカワマチ'" 40203|839 |8390817|フクオカケン|クルメシ|ヤマカワマチ|福岡県|久留米市|山川町|0|0|0|0|0|0 42204|854 |8540074|ナガサキケン|イサハヤシ|ヤマカワマチ|長崎県|諫早市|山川町|0|0|0|0|0|0 これで、sqlite3 で日本語が使えることがわかった。 ところが落とし穴があった。次のように sqlite3 のインタラクティブモードに入ると、日本語の入力ができないことがわかった。sqlite3 のコマンドラインが日本語入力に対応してないためだ。 $ sqlite3 yubin.db 前途多難だ。心配になったので、Haskell の getLine が日本語を受け付けるかどうか試してみた。 Prelude> getLine >>= putStrLn おはよう おはよう こちらのほうは、大丈夫なようだ。 Mac でうまくいったので Ubuntu でもやってみた。yubin.db を作るところまではうまくいったのだが、 $ sqlite3 yubin.db "select * from master where cho='ヤマカワマチ'" とやっても、レコードが検索できない。かくとうしているうちにフィールドのデータが ヤマカワマチ ではなく、 "ヤマカワマチ" のように引用符つきで表示されているのに気づいた。そこで、csv ファイルを次のように加工して yubin2.csv をつくりインポートしたらうまくいった。 $ sed s/\"//g yubin.csv > yubin2.csv $ sqlite3 -separator , yubin.db ".import yubin2.csv master" ところが、Ubuntu の sqlite3 ではインタラクティブモードでも日本語が入力できた。機種によって反応が違うので注意しなければならない。
by tnomura9
| 2012-12-29 22:14
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||