コンピュータでの作業中に、定型的なテキストファイルをつくったり、加工したりなどの効率化を図りたいときがあります。
こんなとき手元でぱっと動くプログラム言語があると便利です。 Linux なんか使っていると Perl とか Ruby とかすぐ動くのでそちらという手もありますし、Windows なら Excel VBA とか?
そんな一つの方法で、Eclipse 立ち上げて仕事しているのなら Groovy が便利かもしれません、、というわけで使いそうな Groovy のプログラム断片をメモしておきます。
Groovy 言語は Java を拡張して連携できるようなスクリプト言語です。
GroovyはJVM上で動作する言語処理系および言語の名称であり、Javaとの直接的な連携を特徴とする。例えばGroovyからすべてのJava SE APIや、Javaで書かれた任意のサードパーティ製のコンパイル済みのライブラリなどを呼び出すことができる。言語の記述能力としては、Javaで記述できることは、無名内部クラスの定義など一部の例外を除き基本的にGroovyでも記述することができる。逆に言うとJavaで記述できない機能は記述できないが、Javaと同様にC言語などで書かれたネイティブメソッドなどは呼び出すことができる。
groovy-eclipse という Eclipse 用のプラグインが提供されており、これ入れておけば実行環境が簡単につくることができます。 最終的には JVM で動くコードができるので、隣の人につくったプログラム動かしてもらうのも簡単だという利点もあるですね。
Eclipse向けのGroobvy開発プラグイン「Groovy-Eclipse 2.0」 登場 – SourceForge.JP Magazine オープンソースの話題満載
Groovy Eclipseプロジェクトは1月15日、「Eclipse」向けプラグイン「Groovy-Eclipse 2.0」を公開した。Eclipse環境でGroovy開発を構築するもので、EclipseのJava開発機能に匹敵するレベルの支援機能を提供するという。
というわけで、使いそうな断片集です。 ぼくはその場に応じて適当につかっているだけなので、間違っていたらごめんなさい。 メモレベルです。
作業用に、Eclipse のプロジェクトをひとつつくっておいています。
まずは文字列操作編。
// 部分文字列取得
println "テストです。"[3..-1]
// 文字列長さ取得
println "Lengthのテストです。".length()
// 文字列分割
"split1,split2,split3".split(",").each { str ->
println str
}
結果は上から、
です。
13
split1
split2
split3
となります。 日本語も思った通り処理されます。
次は文字列マッチ系。
// 正規表現マッチ判定(完全一致)
if("hiromasa" ==~ /.+masa$/) {
println "mutch!"
}
// 正規表現マッチ判定(部分一致)
if("hiromasa" =~ /masa$/) {
println "mutch!"
}
// 正規表現マッチ取得
"stronger, stranger, walker, hiromasa".eachMatch(/(\w+?er),/) { all, match ->
println match;
}
// 正規表現マッチ置換
println "stronger, stranger, walker, hiromasa".replaceAll(/\w+?er/, { match ->
match[0].toUpperCase() + ((match.size() > 1) ? match[1..-1] : '')
})
結果は、
mutch!
mutch!
stronger
stranger
walker
Stronger, Stranger, Walker, hiromasa
こんな方向で。
次は、リストとマップ。
// リスト
def lists = ["test1", "test2", "test3"]
lists.each { value ->
println value
}
// マップ
def maps = ["key1":"apple", "key2":"orange", "key3":"mango"]
maps.each { key, value ->
println key + " = " + value
}
こんな感じでまわせます。 結果はご想像通りの方向で(笑)
次はファイル処理系。
// ファイル読み込み
new File("file/readme.txt").eachLine { line ->
println line
}
// ファイル書き出し
new File("file/writer.txt").withWriter { line ->
line.println("hoge")
line.println("moge")
}
読み書きともクロージャ渡す感じで。 オープンクローズ、異常系を勝手にやってくれます。 便利あるね。
最後に、便利そうなの。
// 回数指定ループ
(0..2).each { counter ->
println counter
}
// 埋め込み文字列
def lines = ["line1", "line2", "line3"]
def number = 1
lines.each { value ->
println "${number} : ${value}"
number++
}
// 長い文字列
def gstr = """\
改行できますぞ。
改行できますぞ。
改行できますぞ。\
"""
println gstr
文字列系がいろいろ拡張されているようです。
これくらいあればあとは知恵と勇気でなんとかなるかと。 困ったら Java そのまま呼べちゃうので、それでパッと回避するのが吉かもしれません。 ライブラリ jar 入れれば、すぐその機能を使えるのも楽ですね。
てなわけで、Groovy でした。 🙂
さて、先日でました Eclipse 3.6 Helios をちょっと評価がてら最近使っております。
事務所では Windows XP / JavaEE 版をつかっていますが特に不具合はなさそうです。 最近流行のプログラムのマーケット的なところからプラグインの導入ができるようになりました。
毎回、Subclipse のアップデート探していたりしていたので、便利かもしれません。 ぼくの使い方では、あとは JavaEE では劇的に便利になるのはないかな。。
家では、PHP for Developer 版を導入してみました。
Windows 7 対応がされているハズなのですが、うちの環境だとジャンプリストとかがうまく動作しませんでした。 右クリックが無反応でした。(うちだけかな)
Linux 版もいれて、3.5 ガニメデ で存在していた「ボタンが押せなくなる」 SWT の不具合が解消しているのを確認しました。 ただ、PHP のでかいコード表示すると、無反応になった後ヒープエラーがでることも確認。。 パーサがバグってるのかも。
というわけで、全般的にはうちでは 3.6 はまだ様子見という感じです。 引き続きウォッチしていこうと思います。 🙂