Skip to content

Instantly share code, notes, and snippets.

@seratch
Created June 1, 2012 01:59
Show Gist options
  • Save seratch/2848053 to your computer and use it in GitHub Desktop.
Save seratch/2848053 to your computer and use it in GitHub Desktop.
Iris data set reader example
import util.control.Exception._
def using[R <: { def close() }, A](resource: R)(f: R => A): A = ultimately {
ignoring(classOf[Throwable]) apply resource.close()
} apply f(resource)
case class Sepal(length: Double, width: Double)
case class Petal(length: Double, width: Double)
case class Species(name: String)
case class Iris(sepal: Sepal, petal: Petal, species: Species)
def extract(line: String): Option[Iris] = line.split(",") match {
case Array(sl, sw, pl, pw, s) =>
Some(Iris(Sepal(sl.toDouble, sw.toDouble), Petal(pl.toDouble, pw.toDouble), Species(s)))
case _ => None
}
import java.io._
println("---(while)---")
using(new FileReader("iris.csv")) { fr =>
using(new BufferedReader(fr)) { br =>
var line: String = null
while ({line = br.readLine(); line != null}) { println(line) }
}
}
println("---(foreach)---")
using(new FileReader("iris.csv")) { fr =>
using(new BufferedReader(fr)) { br =>
Iterator.continually(br.readLine()).takeWhile(_ != null).foreach { line => println(line) }
}
}
println("---(map)---")
try {
using(new FileReader("iris.csv")) { fr =>
using(new BufferedReader(fr)) { br =>
Iterator.continually(br.readLine()).takeWhile(_ != null).map { line => extract(line) }
}.toSeq.flatten
}.foreach(iris => println(iris))
} catch { case e => e.printStackTrace()
/* java.io.IOException: Stream closed
at java.io.BufferedReader.ensureOpen(BufferedReader.java:97)
at java.io.BufferedReader.readLine(BufferedReader.java:292)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at Main$$anon$1$$anonfun$2$$anonfun$apply$5$$anonfun$apply$6.apply(reader.scala:32) */
}
println("---(foldLeft)---")
using(new FileReader("iris.csv")) { fr =>
using(new BufferedReader(fr)) { br =>
Iterator.continually(br.readLine()).takeWhile(_ != null)
.foldLeft(List[Option[Iris]]()) { case (seq, line) => extract(line) :: seq }
}.flatten
}.foreach(iris => println(iris))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment