ti-enxame.com

No Scala, como ler um arquivo CSV simples com um cabeçalho na primeira linha?

A tarefa é procurar um valor de campo específico (por seu número em linha) por um valor de campo-chave em um arquivo CSV simples (vírgulas como separadores, sem aspas entre campos, nunca vírgula dentro de um campo), com um cabeçalho na sua primeira linha.

O usuário uynhjl deu um exemplo (mas com um caractere diferente como separador):


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()

a questão neste caso é como pular uma linha de cabeçalho da análise?

32
Ivan

Você pode simplesmente usar drop:

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

Do documentação :

def drop (n: Int) : Iterator[A]: Avança este iterador após os primeiros n elementos ou o comprimento do iterador, o que for menor.

32
Travis Brown

Aqui está um leitor de CSV no Scala . Caramba.

Como alternativa, você pode procurar por leitor de CSV em Java e chamar isso de Scala.

A análise adequada de arquivos CSV não é uma questão trivial. Citações de escape, para iniciantes.

14
Robert Harvey

Primeiro, li a linha do cabeçalho usando take(1) e, em seguida, as linhas restantes já estão no iterador src. Este trabalho é bom para mim.

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
  }
}
2
tuxdna