【发布时间】:2016-11-11 01:16:37
【问题描述】:
我们有一个文件,其中包含我们想要与案例类匹配的数据。我知道足以强行使用它,但在 scala 中寻找一种惯用的方式。
给定文件:
#record
name:John Doe
age: 34
#record
name: Smith Holy
age: 33
# some comment
#record
# another comment
name: Martin Fowler
age: 99
(两行的字段值是无效的,例如 name:John\n Smith 应该出错)
还有案例类
case class Record(name:String, age:Int)
我想返回一个 Seq 类型比如 Stream:
val records: Stream records
我正在使用但到目前为止尚未实施的几个想法是:
删除所有新行并将整个文件视为一个长字符串。然后 grep 匹配字符串 "((?!name).)+((?!age).)+age:([\s\d]+)" 并为每个匹配项创建我的案例类的新对象,但是到目前为止,我的正则表达式 foo 很低,无法与 cmets 匹配。
递归思路:遍历每一行,找到匹配记录的第一行,然后递归调用函数匹配name,然后age。在
name之后点击下一个record时,尾部递归返回Some(new Record(cumulativeMap.get(name), cumulativeMap.get(age))或None(即从未遇到过age)??更好的主意?
感谢阅读!该文件比上面更复杂,但所有规则都是平等的。对于好奇:我正在尝试解析自定义 M3U 播放列表文件格式。
【问题讨论】:
标签: regex scala recursion case-class fileparsing