У нас есть файл, содержащий данные, которые мы хотим сопоставить с классом case. Я знаю достаточно, чтобы переборщить его, но ищет идиоматический способ в scala.Каков наилучший способ сопоставления строк в файле с классом case в Scala?
Учитывая Файл:
#record
name:John Doe
age: 34
#record
name: Smith Holy
age: 33
# some comment
#record
# another comment
name: Martin Fowler
age: 99
(значения поля на две строки являются недопустимыми, например, имя: Джон \ п Смит должен ошибка)
И дело класс
case class Record(name:String, age:Int)
I Want для возврата типа Seq, такого как поток:
val records: Stream records
Пара идей я работаю, но до сих пор не реализованы является:
Удалить все новые линии и обработать весь файл как одну длинную строку. Тогда grep соответствует строке "((?! Name).) + ((?! age).) + Age: ([\ s \ d] +)" и создайте новый объект класса case для каждого совпадения, но пока мое регулярное выражение foo низкое и не может сравниться с комментариями.
Рекурсивная идея: Итерации по каждой строке, чтобы найти первую строку, которая соответствует записи, а затем рекурсивно вызывать функцию для соответствия имени, а затем возрасту. Хвост рекурсивно вернуть
Some(new Record(cumulativeMap.get(name), cumulativeMap.get(age))
илиNone
при ударе следующейrecord
послеname
(т.е.age
никогда не встречается)?? Лучшая идея?
Спасибо за чтение! Файл сложнее, чем выше, но все правила равны. Для любопытных: я пытаюсь разобрать пользовательский формат файла плейлиста M3U.
Я думаю, что лучший вариант Scala здесь. В моей реальной работе у меня слишком много полей, чтобы сидеть здесь и соответствовать регулярному выражению для каждого из них. Также есть поля заголовка. Я думаю, что это будет путь. Я проверю это. – dlite922