我有一个文件,例如:
// file_1.txt
10 2 3
20 5 6
30 8 9
我需要在每行之前写一个带空格的字母,该字母符合关于行中第一个值/数字的标准,例如,如果我给出值20,那么文件应如下所示:
// file_1.txt
10 2 3
c 20 5 6
30 8 9
我如何在Scala中实现这一目标?
这是我正在尝试的,直到现在:
import java.io._
import scala.io.Source
object Example_01_IO {
val s = Source.fromFile("example_01_txt")
val source = s.getLines()
val destination = new PrintWriter(new File("des_example_01.txt"))
val toComment = Array(-10, 20, -30)
def main(args: Array[String]): Unit = {
for (line <- source) {
//if(line_begins_with_any_value_from_toComments_then_write_a_"c"_infront_of_that_line){
println(line)
destination.write("c" + line)
destination.write("\n")
//}
}
s.close()
destination.close()
}
}
我可以写入另一个文件,让我们说,但我需要在同一个文件中写入,并且只有当一行符合这样的条件时才会写。
我将不胜感激。
答案 0 :(得分:0)
从您拥有的内容开始,您真正需要添加的是检查当前行是否以Array
中的数字开头的方式。
这样做的一种方法是在每个空格上分割线,以便获得该线上所有数字的列表。然后只获取该列表中的第一个并将其转换为Int
。然后,您只需检查Int
允许的数字中是否存在Array
。
import java.io._
import scala.io.Source
object Example_01_IO {
val s = Source.fromFile("example_01_txt")
val source = s.getLines()
val destination = new PrintWriter(new File("des_example_01.txt"))
val toComment = Array(-10, 20, -30)
def main(args: Array[String]): Unit = {
def startsWithOneOf(line: String, list: Array[Int]) =
list.contains(line.split(" ").head.toInt)
for (line <- source) {
val lineOut = if (startsWithOneOf(line, toComment)) s"c $line" else line
destination.write(lineOut)
destination.write("\n")
}
s.close()
destination.close()
}
}