Scala を使い始める

Programming Scala は9割程度読んだので、簡単な作業に使い始めてみる。簡単なテキスト処理をやってみた。データのパースやら、正規表現を使った置き換えなど、基本的な物。

この手の物で、すこしならして、次は昔書いたアプリの移植かな。

import scala.io.Source
import scala.util.matching

def getId2CustMap: Map[String,String] = {
  // 空の mutable map の生成
  val map1 = scala.collection.mutable.Map.empty[String,String]
  /* , で区切られた id と関連情報をマップにロード。
   * この Source の用法はよく使いそう。行を分割した結果を
   * Pattern match で変数に入れてみる。とりあえず使ってみたかっただけ。
   */
  for (line <- Source.fromFile("ids.txt").getLines) {
    line.split(",") match {
      case Array(id, cu) =>
        map1 += (id -> cu)
      case _ =>
        println("match failed.")
    }
  }
  // 空の immutable map に上記の mutable map を加える事で、
  // 上記で作った物の immutable map を作る。
  Map.empty[String,String] ++ map1
}

val mp = getId2CustMap

def cuAdder(mtch: scala.util.matching.Regex.Match): String = 
  mtch.matched + "/" + mp(mtch.matched)

/* 別ファイルから1行ずつ読み、マップの key に対応する部分を
 * key/value に置き換える。
 * replaceAllIn の関数の引数はリテラルでかけた。上に定義した
 * 関数をそのまま渡すと、文法エラー。また、文法があやふやに
 * なってる。
 */
for (line <- Source.fromFile("data.txt").getLines) {
  val r = """(4\d{7})""".r.replaceAllIn(line, 
      m => m.matched + "/" + mp(m.matched))
  println(r)
}