如何在Scala中的文件的行开头添加元素

时间:2017-01-27 11:56:15

标签: scala file writefile

我有一个文件,例如:

// 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()

  }
}

我可以写入另一个文件,让我们说,但我需要在同一个文件中写入,并且只有当一行符合这样的条件时才会写。

我将不胜感激。

1 个答案:

答案 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()

  }
}