« MSN Messenger複数起動 | トップページ | ITmediaニュース:ターボリナックスがライブドア子会社に »

2004.03.15

rename_for_tw.pl

某O氏の依頼で作ったrename_for_tw.plですが、今日はそれを作る上での苦労話などを。

手順としては


  1. まずファイルのリストを読みこむ

  2. ファイルのリストの配列でforeachをぶん回す

  3. ファイル名の文字列を置換

  4. 置換後のファイル名で置換前のファイル名のファイルをリネームする

  5. 3-4の繰り返し


という感じです。
一番苦労したのは文字を置換する部分。たとえばTWCI_2004_3_15_0_8_32.jpgの1桁の部分を2桁にして(0を補って)TWCI_2004_03_15_00_08_32.jpgという風にするわけで、ぱっと思いついたのはs/_[0-9]/_0[0-9]/gというもの。ただしこれだと置換結果に[0-9]てのが出てしまうわけで。
ならばということでs/(_)([0-9])/\10\2/gとしてみたものの、"_15"の"_1"にもマッチしてしまう上に\10が1つの変数と見なされてしまってアウト。
ではs/(_)([0-9]_)/\10\2/gとするとどうかとやってみましたが、これも\10が1つの変数と見なされる点では変わらず。そこでs/(_)([0-9]_)/\1Z\2/gとすると、\1Zは1つの変数と見なされないようで美味い具合に_3_が_Z3_に変換されるので、その上でs/Z/0/g;としてやれば完了。
…と思いきや_0_にマッチした跡はg修飾詞をつけても_8_にはマッチしない(1つ目のアンダースコアにマッチしているので対象から外れる)ので、Zを挿入する置換を2回やった上でZを0に変換する方向で解決。

…つーか30k相応の仕事だと思いました('A`)

|

« MSN Messenger複数起動 | トップページ | ITmediaニュース:ターボリナックスがライブドア子会社に »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/13747/301088

この記事へのトラックバック一覧です: rename_for_tw.pl:

« MSN Messenger複数起動 | トップページ | ITmediaニュース:ターボリナックスがライブドア子会社に »