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 の公式サイトに掲載いただきました。
LTSV が普及すると今いろいろ頑張ってやっているようなログのパースが楽になるので良いですね。