views:

112

answers:

2

The task is to look for a specific field (by it's number in line) value by a key field value in a simple CSV file (just commas as separators, no field-enclosing quotes, never a comma inside a field), having a header in it's first line.

User uynhjl has given an example (but with a different character as a separator):


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

the question in this case is how to skip a header line from parsing?

+3  A: 

Here's a CSV reader in Scala. Yikes.

Alternatively, you can look for a CSV reader in Java, and call that from Scala.

Parsing CSV files properly is not a trivial matter. Escaping quotes, for starters.

Robert Harvey
I've seen this, but looks too complex for my simple case. I don't need all those regexps as my files are very simple.
Ivan
+5  A: 

You can just use drop:

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

From the documentation:

def drop (n: Int) : Iterator[A]: Advances this iterator past the first n elements, or the length of the iterator, whichever is smaller.

Travis Brown