タイトル通り Elixir の LTSV パーサがなかった。
http://ltsv.org/ の Parser Implementations になかった。
github で ltsv で検索しても出てこなかった。
ということで作ってみましたので、何はともあれ star つけてやってください。よろしくお願いします。
https://github.com/ma2gedev/ltsvex
使い方
LTSV.parse
は HashDict のリストに変換されます。
iex(1)> LTSV.parse "name:taka\taddress:Japan\nname:tetsuo\taddress:Sea"
[#HashDict<[{"address", "Japan"}, {"name", "taka"}]>,
#HashDict<[{"address", "Sea"}, {"name", "tetsuo"}]>]
LTSV.dump
は HashDict のリストから LTSV 文字列を作成します。
iex(4)> LTSV.dump [HashDict.new([{"name", "taka"},{"address", "Japan"}]),
...(4)> HashDict.new([{"name", "tetsuo"}, {"address", "Sea"}])]
"address:Japan\tname:taka\naddress:Sea\tname:tetsuo"
以上。
まとめ
作るにあたり他言語の実装を色々参考にさせていただきました。Ruby, JavaScript, Erlang, Scala, Perl, D などなど。
今の実装はシンプルすぎるので、もう少し使いやすい形にしたいなとは思っています。例えば atom をキーとした HashDict を受け取れるようにするとか。
それと、ちょっとしたことでエラーが起きたり問題が多いので、ちょこちょこ直していければなと思ってます。というか教えていただけると嬉しいです。
明日は @mururu さんです。昨日の記事にも出ていましたが、Enumerable 気になりますね。
See Also
http://ltsv.org/
https://github.com/condor/ltsv
https://github.com/sasaplus1/ltsv.js
https://github.com/shirou/erlang-ltsv
https://github.com/yteraoka/ltsv
https://github.com/seratch/ltsv4s
https://github.com/repeatedly/ltsv-d