Я пытаюсь улучшить процедуру синтаксического анализа CSV и считаю, что экстракторы могут быть полезны здесь, но не могут понять их. Предположим, что существует файл с пользовательскими идентификаторами и электронной почты:Использование экстракторов для разбора текстовых файлов
1,[email protected]
2,[email protected]
3,[email protected]
Если User
класс определяется как case class User(id: Int, email: String)
все довольно просто с чем-то вроде
lines map { line =>
line split "," match {
case Array(id, email) => User(id.toInt, email)
}
}
То, что я не понимаю, как иметь дело с случай, когда User
класс может иметь сложные свойства, например
case class Email(username: String, host: string)
case class User(id: Int, email: Email)
Это не выглядит очень гибким для меня. Со всеми новыми доменами верхнего уровня, которые попадают в ближайшее время, я не думаю, что вы захотите сопоставить «.com» или любой другой TLD, если на то пошло. –
@James: Очевидно, вы хотели бы заменить свое собственное регулярное выражение для адресов электронной почты.Они сложны, и вы можете легко найти один с быстрым поиском в Интернете. – dhg