views:

119

answers:

3

Reading lines in a foreach loop, a function looks for a value by a key in a CSV-like structured text file. After a specific line is found, it is senseless to continue reading lines looking for something there. How to stop as there is no break statement in Scala?

+7  A: 

Scala's Source class is lazy. You can read chars or lines using takeWhile or dropWhile and the iteration over the input need not proceed farther than required.

Randall Schulz
+4  A: 

To expand on Randall's answer. For instance if the key is in the first column:

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()
huynhjl
Watch for exceptions on empty lines!
Elazar Leibovich
Good example for me, but it raises one more question: how do I skip first line, which is a table header?
Ivan
`val iter = src.getLines().drop(1).map(_.split(":"))`
huynhjl
+1  A: 

Previous answers assumed that you want to read lines from a file, I assume that you want a way to break for-loop by demand. Here is solution You can do like this:

breakable {
   for (...) {
     if (...) break
   }
 }
Jeriho