ぶろぐ

日記です

ふん!


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")