我们有一个文件,其中包含我们想要与案例类匹配的数据。我知道足够的力量,但在斯卡拉寻找一种惯用的方式。将文件中的字符串与Scala中的case类匹配的最佳方式是什么?
给定的文件:
#record
name:John Doe
age: 34
#record
name: Smith Holy
age: 33
# some comment
#record
# another comment
name: Martin Fowler
age: 99
(两行字段值是无效的,例如姓名:约翰\ n史密斯应该出错)
和案件类
case class Record(name:String, age:Int)
我想返回Stream之类的Seq类型:
val records: Stream records
这对夫妻的想法我的工作,但到目前为止还没有实现的是:
删除所有新生产线和治疗的整个文件当作一个很长的字符串。然后grep匹配字符串“((?!name)。)+((?! age)。)+ age:([\ s \ d] +)”并为每个匹配创建一个我的case类的新对象,但到目前为止,我的正则表达式foo很低,无法匹配评论。
递归思想:遍历每一行以找到匹配记录的第一行,然后递归地调用该函数以匹配名称,然后是年龄。打
name
之后的下一个record
(即age
从来没有遇到过)当尾递归返回
Some(new Record(cumulativeMap.get(name), cumulativeMap.get(age))
或None
?更好的主意?
感谢您的阅读!该文件比上面更复杂,但所有规则都是相同的。对于好奇:我试图解析一个自定义的M3U播放列表文件格式。
我认为这里最好的Scala选项。在我的实际工作中,我有太多的领域坐在这里,并匹配每个人的正则表达式。还有标题字段。我认为这将是一条路。我会检查一下。 – dlite922