四 07
我的第一个scala脚本完成的功能就是为文本文件添加行号,不过那个脚本中使用了变量,不太符合scala编程的思想。现在把这个脚本改造了一下,去掉var变量的使用,完全使用val值。另外,把脚本改成了需编译的程序。
LineNumber.scala程序如下:
import scala.io.Source
object LineNumber {
def main(args: Array[String]) {
for (file <- args) {
println("File: " + file)
println("-" * 32)
for (line <- addLineNumber(file))
print(line)
}
}
def addLineNumber(fileName: String): List[String] = {
def padding(m: Int, i: Int) = " " * (m - i.toString.length)
val lines = Source.fromFile(fileName).getLines.toList
val maxWidth = lines.length.toString.length
for {
(l, i) <- lines.zipWithIndex
j = i + 1
line = padding(maxWidth, j) + j + " " + l
} yield line
}
}
这个程序会从命令行获取要添加行号的文件名,把加了行号的文本打印到屏幕上。
用下面的命令编译该程序:
fsc LineNumber.scala
然后可以用下面的命令执行该程序,输出如下:
$ scala -cp . LineNumber LineNumber.scala
File: LineNumber.scala
--------------------------------
1 import scala.io.Source
2
3 object LineNumber {
4 def main(args: Array[String]) {
5 for (file <- args) {
6 println("File: " + file)
7 println("-" * 32)
8 for (line <- addLineNumber(file))
9 print(line)
10 }
11 }
12
13 def addLineNumber(fileName: String): List[String] = {
14 def padding(m: Int, i: Int) = " " * (m - i.toString.length)
15
16 val lines = Source.fromFile(fileName).getLines.toList
17 val maxWidth = lines.length.toString.length
18
19 for {
20 (l, i) <- lines.zipWithIndex
21 j = i + 1
22 line = padding(maxWidth, j) + j + " " + l
23 } yield line
24 }
25 }
学习scala有大半个月了,越来越感受到了scala的简洁与强大。
更多内容,请阅读易水博客上的其它文章。
原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]
本文链接地址: http://easwy.com/blog/archives/scala-learning-add-line-number/
文章的脚注信息由WordPress的wp-posturl插件自动生成
开发编程
1条评论 添加评论
不错。比上一个强多了。