2004年10月26日

ぐるぐるGroovy

ちまたで噂のGroovyを試してみた。
Javaによく似たスクリプト言語で、簡単に言うとPerlみたいにさくっとかけるようなJavaっぽいコードをJavaバイトコードに変換して実行してくれるような感じか。
遅いのとまだベータ版なのが欠点らしいが開発バージョンは速度は二の次なのでそのうち改善されるとか。

仕事で120万行ほどあるXMLっぽい形式のテキストをXMLとして認識できる形式に変換するコードを書いてみた。
正規表現なら一発のような感じもするけどGroovyを使うきっかけと言うことでGroovyでやってみた。
正規表現はやっぱ必要だよなぁ・・ちゃんと勉強せねば。


以下Groovyスクリプト
convert.groovyみたいな拡張子で保存
groovy convert.groovyとコマンドラインでたたけば実行される
コードの内容としてはテキストファイルを1行ずつ読み込んで<PAIR が先頭にある場合はその行の内容を置換する。んでその結果をファイルに保存。

import java.io.*
import java.util.Date

start = new Date()

bw = new BufferedWriter (new OutputStreamWriter (new FileOutputStream(new File("test_new1.xml")) , "UTF-8") )

new File("READFILE").eachLine{ line |
if( line.indexOf("<PAIR TYPE=") == 0){
line = line.replaceAll("EJ","\"EJ\"")
line = line.replaceAll("DIRECT","\"DIRECT\"")
line = line.replaceAll("EXAMPLE","\"EXAMPLE\"")
}
bw.write line+"\n"
}
bw.close()

end = new Date()
println(end.getTime() - start.getTime() )

ファイルの読み込みがすごい楽になっているのに注目。
Fileオブジェクトに対してeachLineメソッドが追加されて読み込みとループが一緒くたに。
もしかしたら書き込みももっと楽になってるかもしれないけど今回はJava風に。
メソッドの記述が楽になったり、変数の初期化が要らなかったりと便利だけど、コード補完がない(EclipseのGroovyプラグインが猛烈に欲しい)、import文書くのがメンドイ(Eclipseの(略))などが不満点か。

120万行、33MBほどのファイルを処理するのに約20秒。
Windows2000 P4 2G メモリ1.5Gの環境。
まぁそれほど遅いというわけでもない気がするがJava100%で速度調べてないので不明。
Groovy自体の起動(またはコードの解析?)は1秒ほどかかるので実行するのにタイムラグのある感じは否めない。

一般業務アプリ開発だといまいちGroovyが活躍する場面が思い浮かばないけど研究所みたいになんかのデータをちょこちょこっと処理するのに使うにはイイかも。
まぁその場合Perlを使えば楽勝なんですが。

Javaの既存ライブラリを使ってPerl的な処理をする場合はGroovyがイイ感じ。
とりあえずGroovyの今後に期待。

Trackback on "ぐるぐるGroovy"

このエントリーのトラックバックURL: 

"ぐるぐるGroovy"へのトラックバックはまだありません。

Comment on "ぐるぐるGroovy"

"ぐるぐるGroovy"へのコメントはまだありません。

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。