Если вы хотите что-то более идиоматичное и более безопасное для типов, могу я предложить kantan.csv ?
Позволяет превратить любой источник данных CSV в коллекцию хорошо типизированных значений. Чтобы переписать CSV-часть вашего примера (и иметь дело с датами в виде строк, потому что я не знаю, в каком формате вы их получаете), вы должны написать:
import kantan.csv.ops._
type Row = (String, String, Double, Double, Double, Double, Double)
// Do whatever it is you need to do with each row
def sqliteMagic(row: Row): Unit = ???
new File(filename).asUnsafeCsvRows[Row](',', false).foreach(sqliteMagic)
Обратите внимание, что я не особенно люблю использовать кортежи, когда вы можете использовать более конкретные типы. Используя shapeless модуль kantan.csv, вы можете написать его немного более красиво:
import kantan.csv.ops._
import kantan.csv.generic.codecs._
case class Symbol(name: String, date: String, open: Double, high: Double, low: Double, close: Double, vol: Double)
def sqliteMagic(symbol: Symbol): Unit = ???
new File(filename).asUnsafeCsvRows[Symbol](',', false).foreach(sqliteMagic)
Обратите внимание, что вам не пришлось выполнять какую-либо работу для поддержки класса case Symbol
, который довольно приятен и все еще безопасен при использовании типа благодаря бесформенному.
Полное раскрытие: я автор kantan.csv.