by shigemk2

当面は技術的なことしか書かない

Scalaでdiffコマンドを使ってみたい

なんか色々調べましたが、ソースコードを見るのが早かったような気がしました。

scala/ProcessBuilder.scala at 27da46343cd545534819300235bc64ab74958c92 · scala/scala · GitHub

冒頭のコメントにはこんなことが書いてありました。

  * import scala.sys.process._
  *
  * // Executes "ls" and sends output to stdout
  * "ls".!
  *
  * // Execute "ls" and assign a `Stream[String]` of its output to "contents".
  * val contents = Process("ls").lineStream
  • !は実行して、結果を標準出力に送る。戻り値は、ステータスコード。
  • 実行結果を変数に格納したいときは、 lineStreamを使う。

で、本題。diffコマンドであれこれしてみる。

scala> import sys.process._
import sys.process._

scala> val st = "diff a.txt b.txt" lineStream_!
warning: there was one feature warning; re-run with -feature for details
st: Stream[String] = Stream(1c1, ?)

scala> st
res0: Stream[String] = Stream(1c1, ?)

scala> println(st.mkString("\n"))
1c1
< aaa
---
> bbb

scala> st.toList
res2: List[String] = List(1c1, < aaa, ---, > bbb)

普通に色々できそうですね。

alvinalexander.com

stackoverflow.com