読者です 読者をやめる 読者になる 読者になる

seratch's weblog in Japanese

About Scala, Java and Ruby programming in Japaense. If you need English information, go to http://blog.seratch.net/

LTSV ブームにのっかって Scala のパーサーを書きました

LTSV Scala

Scala ならそれ parser combinator でできるよ」ということでパーサーを書きました。

https://github.com/seratch/ltsv4s

もっと型にマッピングしたくなる気もしますが、目的は主にログのパースですし、まずは Map とかでよいのではという感じになっています。

一行読み込む parseLine と複数行を読む parseLines の二種類がありますが、基本的にはログファイルを Stream な感じで読みながら一行ずつ parseLine で処理するのかなと思います。

scala> import com.github.seratch.ltsv4s._
import com.github.seratch.ltsv4s._

scala> val log: Map[String, String] = LTSV.parseLine("field1:value1\tfield2:value2")
log: Map[String,String] = Map(field1 -> value1, field2 -> value2)

scala> val line: String = LTSV.dump(log)
line: String = field1:value1   field2:value2

scala> val logs: List[Map[String, String]] = LTSV.parseLines("field1:value1\tfield2:value2\nfield1:value1\tfield2:value2")
logs: List[Map[String,String]] = List(Map(field1 -> value1, field2 -> value2), Map(field1 -> value1, field2 -> value2))

scala> val lines: List[String] = LTSV.dump(logs)
lines: List[String] = List(field1:value1   field2:value2, field1:value1    field2:value2)

Twitter でつぶやいたところ、拾っていただいて LTSV の公式サイトに掲載いただきました。

http://ltsv.org/

LTSV が普及すると今いろいろ頑張ってやっているようなログのパースが楽になるので良いですね。