2009/01/26

Re:Re:ファイルの添え番号の桁を3桁に揃えるGroovyスクリプト

Re:ファイルの添え番号の桁を3桁に揃えるGroovyスクリプト - No Programming, No LifeというGroovyを利用してファイル名のリネームを行うコードがあったので、記載されていたものを拝借して僕なりにコーディングしてみた。

def list = [
   'hoge[1].jpg',
   'hoge[11].jpg',
   'hoge[2].jpg',
   'hoge[10111].jpg',
   'hoge[10].jpg',
   'hoge[100].jpg'
]

// 最大桁数を求めて
def maxDigit = list*.replaceAll(/^[^\d]*|[^\d]*$/, "")*.size().max()
// 変換して
def repList = list.collect{ padNumber(it, maxDigit) }
// ソートして出力する
repList.sort().each{ println it }

def padNumber(text, digit) {
   text.replaceAll(/\d+/){ it.padLeft(digit, '0') }
}

最大桁数を求める部分を記述して気づいたけど、こういうコード記述する機会は決して少なくはないと思う。

文字列の配列から特定のパターンの文字列のみを取り出したい場合は、こんな記述もできるということを始めて知った未熟者。

javascriptなら、"  文字列 ".replace(/^ *| *$/g, "")みたいにしてtrimするコード書くことよくありますね。

追記:2009/01/27

fumokmmさんが、以下のような方法も教えてくれました。(MessageFormatを利用する例)

format = new java.text.MessageFormat('{0}[{1}]{2}')
def maxDigit = list.collect{ format.parse(it)[1] }*.size().max()

MessageFormatっていうクラスあるんですね(恥

2 件のコメント:

  1. ゲンゾウさんこんばんは。fumokmmです。
    ブラッシュアップしていただきありがとうございます。

    あまり実用的ではないですが、MessageFormatを利用する例も考えてみました。
    format = new java.text.MessageFormat('{0}[{1}]{2}')
    def maxDigit = list.collect{ format.parse(it)[1] }*.size().max()

    返信削除
  2. >fumokmmさん
    MessageFormatクラスというのがあるんですね。
    これは勉強になりました。
    今後も使えそうです。ありがとうございます。

    返信削除