オシャレな revo に
巨大なテキストファイルを無理矢理処理させる

インストラクション:

 私の趣味の一つは Magic: the Gathering (以下 MTG) という名のトレーディングカードゲームで、今は週末に地元で行われる大会でジャッジ(審判)をやったり、大会結果を集計してネットで発表するなど、運営のお手伝いもやったりしている。その大会の運営で必要になるのが、MTG のカードリストや詳細ルール等が書かれたテキストファイルである。

 特に一番多用するのは、何といってもカードリストだ。私が主に使っているのは国内 MTG の世界では有名な Sigre 氏のサイトで公開されているカードリストで、日本では発売されていない未訳のカードも含めて全て日本語化されている他、発売後に発行されたカードテキストの修正(エラッタ)も随時適応されており、大変便利だ。カード絡みのルールの疑問や質問等は、これを参照すれば大抵は解決することが多い。プレイヤーもジャッジも必携のリストと言える。

 PSION の revo plus を購入し、メールの読み書き環境を整えた後で最初に思い付いたのが、この「カードリストをその場で素早く参照できるようにする」計画だ。
 従来はこの作業は大会結果集計ソフトを動かしている Libretto 20 でやっていたのだが、さすがにサブノートだと常時携帯できないので「その場で素早く参照」は無理だし、Libretto 20 は何世代も前のマシンなのでテキストの検索速度も遅いし、仮に電源落ちた状態だと再起動に時間がかかるし、しかも調べたい場合に限ってマシンが落ちてる場合が多いしと、こういう用途にはやや不向きだよなぁと感じていた。

 その点、シャツの胸ポケットにすら納まるサイズの revo なら、携帯性・検索性共に問題なし! しかも revo はカッコイイ上に美しいので、持ってるだけで羨ましがられるしな! PSION ユーザーとしてはコレ重要ですよ! 美しさは兵器!
 か、完璧!(←「覚悟のススメ」6巻における散さま完全復活時の老中・影成の様に発音)

 しかし、その実現には一つの問題があった。
 MTG のカードリストは、サイズが1Mを越える巨大なテキストファイルだったのです!

 revo の OS である EPOC OS にも勿論様々な種類のテキストエディタがあるのだが、基本的に EPOC OS 上でのテキストエディタは「revo や 5mx でちょっとしたドラフト文章を打ち、その後 Windows や Mac が搭載された『母艦』マシンに移して仕上げる」用途で作られている(と思う)ので、開けるファイルサイズには制約があるのがほとんどだ(30Kくらい)。さすがに1Mのファイルをいきなり開けて編集できる Windows の「秀丸」エディタみたいな万能エディタは存在しない。
 試しに、ktkawabe 氏が公開している軽量テキストエディタ "Note" でカードリストを無理矢理開いてみたら、ファイルを開こうとして白い画面になったまま帰ってきませんでした。無理を承知で大変な処理をやらせてしまい、まことに申し訳ない!(←誰に謝っているんですか?)

 そこでもう一つの選択肢として考えたのが、revo 内蔵の Word(ワードプロセッサ。勿論 Microsoft Word とは別物)にカードリストを読み込ませてみる方法だ。日本語環境ソフトである UniFEP には、Windows や Mac で使われている Shift-JIS 形式で書かれたテキストファイルを UniFEP で使用している UTF-8 形式に変換して Word 等のアプリケーションに張り付ける機能があり、それを使えば revo でも Shift-JIS ファイルを Word 文書形式に変換することが可能である。
 実際、MTG の詳細ルールが書かれた140K バイト程の大きさのファイルをこの方法で処理させてみたところ、実にすんなり Word 形式に変換することができた。しかも、比較的大きいファイルなのに、Word で開くと即座に立ち上がって内容を表示してくれる。

 という訳で Word にカードリストをムリムリ押し込んでみることにしたのだが、結果的にはこの方法も上手くいかなかった。あまりに元データが大きいのが悪いのか、途中で読み込み処理が勝手に中断してしまうのだ。試しに、カードリストを分割して順次読み込ませてみてもやはりダメでした(1万行くらいが限界?)。

 やはり、巨大なテキストファイルをそのままの形のままでどうこうしよう、という発想そのものが良くなかったらしい。
 revo は Windows ではなく、あくまで EPOC OS のマシンなのだ。「秀丸」エディタで巨大なファイルを開いて何とかするという解決方法は、Windows では有効でも、EPOC では通用しないのだ。

解決方法:

 しょこで!(←笑うところ)

 元々の目的はあくまで「巨大なテキストファイルをエディタで開く」ことではなく「revo でカードリストを検索したい」ことであった、という問題定義に立ち返った結果、revo に内蔵されている Data というカード型データベースソフトに MTG のカードリストを登録してしまえばいいじゃん、という解決方法に達した。

 MTG のカードリストは、個々のカード毎に「カード名」「コスト」「種類」等の項目があり、この項目にカードの能力などが書かれている、という形式になっている。これなら比較的容易にデータベース化することが可能であるはずだ! と思い、とりあえずカードリストを項目毎に分割して CSV フォーマットのファイルを作成する Perl のスクリプトを作成(下記参照)。後は、Data の方でカードリストデータベースのフォーマットを定義してやり、そこにこのデータを流し込んでやれば良い。理論上は。

 ただしここで問題になるのは、例によって文字コードの問題だ。revo の日本語環境ソフト UniFEP は文字コードとして UTF-8 を採用しているため、Data に読ませる CSV ファイルも勿論 UTF-8 にしてやる必要がある。
 この Shift-JIS → UTF-8 変換は、マニュアルによれは「UniFEP + Word を使って行って下さい」とか書いてあるのだが、しかし前述のようにこのカードリストはサイズが巨大なため、正常に Word が読み込んでくれるかどうかは怪しい。何よりも変換には時間がかかる。MTG のカードリストは頻繁に更新されるため、あまりこの手の作業に手間をかけなくないのだ。

 もしかしたら自分で Shift-JIS → UTF-8 変換のプログラムを作らないといけないのかなー、とか思っていたのだが、しかしここで大発見! Windows の「秀丸」エディタには、なんか文字コードを UTF-8 に変換してファイルに保存する機能がありますよ? という Tips を発見し、例の CSV ファイルを「秀丸」で読み込んで UTF-8 に変換! それを revo にコピーし、Data を立ち上げてテキスト読み込みを実行!

 か、完璧!(←「覚悟のススメ」6巻における散さま完全復活時の老中・影成の様に発音)

参考:Data を使った MTG カードデータベースの作り方の実例

性能とか:

 という訳で、何とか自前のカードデータベースが完成した。
 レコード数(カードの種類)が全部で4700件以上もあるので検索速度が不安だったのだが、実際に検索をやってみるとこれが思いの外高速であり、十分実用になるレベルだ。また、検索途中でも発見したレコードを順次表示していくので、使っていても待たされるストレスはまったく感じない。素晴らしい。

 Word もそうだが、revo 内蔵のソフトはどれもなかなか高速・高性能で、大きいデータを喰わせても十分処理できる実用性を備えている様だ。いやもう、「OS内蔵ソフト=ヘボい」という DOS/Windows 世界の歪んだ常識で生きてきた私にとっては、ちょびっとカルチャーショックな出来事でしたよ。
 流石はヨーロッパでスタンダード PDA の地位を確立したというだけのことはあると思った。

今回の結論:

 「秀丸」エディタは便利です(←結局)


[ revo ページに戻る ]

fukazawa@st.rim.or.jp