依頼を受けて,CSV を加工するスクリプトを perl で書いてみたり.何年も PHP の仕事ばかりしてたから perl とかえらい久しぶりだったりするですよ.演算子のオペランドの順番なんてのは調べながら書けば問題ないんだけど,とにかく忘れがちだったのが,配列への代入で @var でなく $var と書いてしまうことだな.
で,最初は grep に毛の生えたようなスクリプトだったのだけど,ついでにここをこうして,あそこをああして,とかやってたら,最終的に工程ひとつまるまる省けるくらいのスクリプトが出来上がってきたりした.といっても自分の仕事の工程じゃないんですが.
あたしという人は,コンピュータと共に生きてきて,コンピュータがひとを幸せにすると信じてやまない人間なので,こういう小さいことでも「コンピュータがあってよかった」と思える事柄は全て大喜びなのですよ.
……
で,そのスクリプトは CSV を読み込むようにできているのだけど,まぁその,「コンピュータと共に生きて」いない人々ってのは,Excel から出力するなら何でも一緒,みたいな人が多いわけで……当然のように入力ファイルが .xls 形式で届いたりするわけらしいです.はいw
使う側として最も楽なのは,プログラムが勝手に .xls を読んでくれて CSV と同等に扱える,って線だろう.と,CPAN モジュールから Spreadsheet::ParseExcel あたりをインストールしてみたのだけど,どうもスクリプトを動かす PC 上でうまく CPAN インストールができないようで,これは断念.
んじゃ事前に CSV に変換してから食わせればよかろう,ってことで,xls を csv に変換するソフトとかを Web で検索してみて,いくつか試してみたんだけど,出力は無条件で全項目ダブルクォートで囲っちゃうのとか,空行がなくなっちゃうのとか,なんかビミョーなのしかないねぇ.とりあえずそういう CSV に対応できるように ad hoc な改造を施す.
で,スクリプトが SJIS で書いてあったので 0x5C 問題にハマったりするとイヤなので,euc-jp か utf-8 で書きたいなぁと思ったら,どうも最新 perl の UTF-8 対応とかの Encoding モジュールとか使い方がよくわからず,ていうか調べた通りにやっても期待通りに動いてくれず,困ったので結局 Encode モジュールを使って,入出力のたびに encode() と decode() を繰り返すだっさいコードに.まぁパフォーマンスが要求されるほどのものでもないからよかろう.
しかしアレだな,これ以上いろいろと機能追加をするんだと,やっぱ perl じゃなくて別のもっと新しい言語で書き直した方がいいかもしれんw