我們有一個文件,其中包含我們想要與案例類匹配的數據。我知道足夠的力量,但在斯卡拉尋找一種慣用的方式。將文件中的字符串與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