Formatting Console Output in Scala
So it's midnight and I'm programming Scala (heh). I'm actually starting to be able to write little scripts in Scala. Here's a quick one that I put together, inspired by Chapter 3 of "Programming Scala" which reads a source code file and formats the file to the screen with line numbers.
I tried to be as functional as possible. The "formatSourceLine" I felt was getting close to the concept, using recursion, immutable values, and always returning a value (avoiding the side effect of printing from within the function).
The actual output from this script is:
D:\Development\Scala>scala file.scala file.scala 1 | import scala.io.Source 2 | 3 | if (args.length > 0) { 4 | 5 | def formatSourcePrefix(line: Int, suffix: String, max: Int = 5): 6 | var prefix: String = "" 7 | for (i <- 1 to (max - line.toString.length)) 8 | prefix += " " 9 | prefix + line.toString + suffix 10 | } 11 | 12 | def formatSourceLine(lines: List[String], line: Int = 1, 13 | val out = output + formatSourcePrefix(line, " | ") 14 | if (lines.length > 1) 15 | formatSourceLine(lines.tail, line + 1, out) 16 | else 17 | out 18 | } 19 | 20 | // Read file from disk 21 | val lines = Source.fromPath(args(0)).getLines().toList 22 | 23 | // Print results to screen 24 | println 25 | print(formatSourceLine(lines)) 26 | 27 | } 28 | else { 29 | // Print out proper syntax 30 | Console.err.println 31 | Console.err.println("scala file.scala [filename]") 32 | }