Подтвердить что ты не робот

В Scala, как читать простой CSV файл с заголовком в его первой строке?

Задача состоит в том, чтобы искать значение определенного поля (по его числу в строке) значением поля ключа в простом файле CSV (просто запятыми как разделители, без кавычек, закрывающих поле, никогда не запятой внутри поля) имея заголовок в своей первой строке.

Пользователь uynhjl дал пример (но с другим символом в качестве разделителя):


val src = Source.fromFile("/etc/passwd")
val iter = src.getLines().map(_.split(":"))
// print the uid for Guest
iter.find(_(0) == "Guest") foreach (a => println(a(2)))
// the rest of iter is not processed
src.close()

Вопрос в этом случае заключается в том, как пропустить строку заголовка от разбора?

4b9b3361

Ответ 1

Вы можете просто использовать drop:

val iter = src.getLines().drop(1).map(_.split(":"))

В документации :

def drop (n: Int) : Iterator[A]: Увеличивает этот итератор за первый n элементов или длины итератор, в зависимости от того, что меньше.

Ответ 2

Здесь CSV-ридер в Scala. Хлоп.

В качестве альтернативы вы можете найти CSV-ридер в Java и вызвать это из Scala.

Анализ файлов CSV должным образом не является тривиальным вопросом. Исключение кавычек, для начала.

Ответ 3

Сначала я прочитал строку заголовка, используя take(1), а остальные строки уже находятся в src итераторе. Это отлично работает для меня.

val src = Source.fromFile(f).getLines

// assuming first line is a header
val headerLine = src.take(1).next

// processing remaining lines
for(l <- src) {
  // split line by comma and process them
  l.split(",").map { c => 
      // your logic here
  }
}