diff options
author | Burak Emir <emir@epfl.ch> | 2007-01-24 17:41:48 +0000 |
---|---|---|
committer | Burak Emir <emir@epfl.ch> | 2007-01-24 17:41:48 +0000 |
commit | ea6777a4ea66672003b59b83c431d8d7bf70865f (patch) | |
tree | 5d0272aa67cd9258d8caad179f21d6c03bece779 | |
parent | f8a6425c9cb5f00cc90e6a2e79db125da31d39bc (diff) | |
download | scala-ea6777a4ea66672003b59b83c431d8d7bf70865f.tar.gz scala-ea6777a4ea66672003b59b83c431d8d7bf70865f.tar.bz2 scala-ea6777a4ea66672003b59b83c431d8d7bf70865f.zip |
method Source::getLines
-rw-r--r-- | src/library/scala/io/Source.scala | 23 | ||||
-rw-r--r-- | test/files/run/unittest_io.scala | 30 |
2 files changed, 51 insertions, 2 deletions
diff --git a/src/library/scala/io/Source.scala b/src/library/scala/io/Source.scala index cef8fd25a8..ff72873f86 100644 --- a/src/library/scala/io/Source.scala +++ b/src/library/scala/io/Source.scala @@ -244,7 +244,7 @@ abstract class Source extends Iterator[Char] { * @return the character string of the specified line. * @throws scala.compat.Platform.IllegalArgumentException */ - def getLine(line: Int): String = { + def getLine(line: Int): String = { // faster than getLines.drop(line).next val buf = new StringBuilder() val it = reset var i = 0 @@ -264,9 +264,28 @@ abstract class Source extends Iterator[Char] { ch = it.next } val res = buf.toString() - buf.setLength(0) + buf.setLength(0) // hopefully help collector to deallocate StringBuilder res } + + /** returns an iterator who returns lines (including newline character). + * a line ends in \n. + */ + def getLines: Iterator[String] = new Iterator[String] { + val buf = new StringBuilder + def next = { + var ch = iter.next + while(ch != '\n' && iter.hasNext) { + buf.append(ch) + ch = iter.next + } + buf.append(ch) + val res = buf.toString() + buf.setLength(0) // clean things up for next call of "next" + res + } + def hasNext = iter.hasNext + } /** Returns <code>true</code> if this source has more characters. */ def hasNext = iter.hasNext diff --git a/test/files/run/unittest_io.scala b/test/files/run/unittest_io.scala new file mode 100644 index 0000000000..59b82ff57e --- /dev/null +++ b/test/files/run/unittest_io.scala @@ -0,0 +1,30 @@ +object Test { + + import scala.testing.SUnit._ + import scala.io.Source + + class ReadlinesTest extends TestCase("scala.io.Source method getLines") { + + val src = Source.fromString(""" +This is a file +it is split on several lines. + +isn't it? +""") + assertEquals("wrong number of lines",src.getLines.toList.length,5) // five new lines in there + //for(val line <- src.getLines) { + // Console.print(line) + //} + } + def main(args:Array[String]) = { + val ts = new TestSuite( + new ReadlinesTest + ) + val tr = new TestResult() + ts.run(tr) + for(val failure <- tr.failures) { + Console.println(failure) + } + } + +} |