ふん!
import scala.io.Source // 桁数取得 def widthOfLength(s: String) = s.length.toString.length if (args.length > 0) { // ファイル読み込み val lines = Source.fromFile(args(0)).getLines().toList // 配列の先頭2つを取り出して処理。その結果と次の要素で処理繰り返す。 // ex. // 1: List(aa,b,ccc,d) // 2: aa b -> aa // 3: aa ccc -> ccc // 4: ccc d -> ccc // 結果は ccc 的な感じ。 val longestLine = lines.reduceLeft( (a, b) => if (a.length > b.length) a else b ) // 最も長い文字数の桁数 val maxWidth = widthOfLength(longestLine) // 表示!! lines.foreach(line => { // 最大桁数 - 今表示する桁数 val numSpaces = maxWidth - widthOfLength(line) val padding = " " * numSpaces // スペース + 文字数 | 文字 println(padding + line.length + " | "+ line) }) } else Console.err.println("Please enter filename")
結果
% scala readfile2.scala readfile.scala 22 | import scala.io.Source 0 | 22 | if (args.length > 0) { 50 | for (line <- Source.fromFile(args(0)).getLines()) 33 | println(line.length +" "+ line) 1 | } 5 | else 45 | Console.err.println("Please enter filename")