8月 20, 2009

困ったときのRF1

今日は自転車で池袋まで出勤。Mac持って行くのが面倒なので、Windows PCをUbuntuで起動しようと、起動用CDとUbuntu入りのHDDを持っていったのだが、何ということか、職場であてがわれた作業用PCではCD-ROMからの起動が封じられていた。仕方ないので、FAT32パーティションに、とりあえずメモを残すことに。

5時すぎに作業終了。東武のデパ地下で食料を調達する。東武のデパ地下も久しぶりなのだが、プラザ館の食料品売り場がかなり変わっていた。諸国物産コーナーが統廃合されて、中央レジで一括して会計できるようになっていた。それとともに、内容にも変更あり。ザ・ガーデンとか、そのあたりの物真似風でもある。まあしかし、良い傾向ではある。会計が一回で済むのはとても便利。冷静に考えれば、これでやっと普通のスーパーに並んだわけだが。

で、結局、RF1でお惣菜を買って帰宅。RF1も高くなったよなあと溜息。ところがこれが人気らしく、黙って順番待ちしていると、次から次へと先を越されて、いつまで経っても注文できない。さすがにブチキレそうになり、立ち去ろうとしたとき、やっと注文を聞かれる。家内が好きなものを中心に適当に買って帰る。RF1についてはいつもアンビバレンツな感情。まあ、そこそこ美味しいとは思うが、サラダごときでこの値段は何なんだ、とかね。まあでも、困ったときには結構お世話になっているかも。

Perlでエクセル・データを処理する

とある件で、マイクロソフト・エクセル(MS Excel)のデータを取り扱うことになった。というか、入力済みのデータがエクセルのフォーマットという次第。ホントはテキスト・データでくれれば嬉しいのだが、どうも、事務関係はどこもかしこもエクセルばかりのようだ。

幸いなことに、Windowsを起動しなくても、Ubuntu上のOpen Office SpreadSheetで開くことができて、さらに、これを CSV (Comma Separated Values) 形式のテキストファイルとして保存できる。こうなれば、あとは楽である。やっぱりテキストファイルが一番だよねえ。

CSV形式のオプションとして、セパレーターが選べる。コンマで区切るよりもタブで区切る方が、ある意味合理的なので、タブで区切って保存する。これって、Tab Separated Values だから、TSVと呼ぶべきだと思うが、これでもやっぱりCSVと称するのだろうか。

それはともかく、あとは1行ずつ読み込んで処理すればよい。UNIXの標準入力から読み、標準出力に書き出すことにした。実際には、リダイレクトすれば良い。こうすると、プログラムは極めて簡単。入出力を書かなくてよいから。

while (<STDIN>) {
  chomp; # 行末コードを削除
  @data = split /\t/, $_; # $_は1行分のデータ
  # 以下、この配列に対する作業を行う。
}

こんな感じ。UNIXの便利さ、Perlの柔軟さが実感できる。