Как прочитать и изменить положение строк в файле, используя Scala - PullRequest
2 голосов
/ 05 ноября 2019

У меня есть файл, скажем, file1:

A
B
C
D
E

Я должен прочитать этот файл и хочу переместить 1-ю и 2-ю строку из файла в 3-ю и 4-ю строку в файле, например:

C
D
A
B
E

Функция Getlines может получить строки и, возможно, распечатать их. Но как изменить положение строк в файле, используя Scala?

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Допустим, вы не можете или просто не хотите читать весь файл в память. Или, с другой стороны, что если файл имеет менее 4 строк? Можно ли по-прежнему безопасно выполнять обмен?

import java.nio.file.{Files, Paths}

util.Using.Manager { use =>  //Scala 2.13
  val input  = use(io.Source.fromFile("inFile.txt"))
  val output = use(Files.newBufferedWriter(Paths.get("outFile.txt")))

  val itr = input.getLines()
  val linesAB = Seq.fill(2)(util.Try(itr.next()))
  val linesCD = Seq.fill(2)(util.Try(itr.next()))
  linesCD.foreach(_.foreach(s => output.write(s + "\n")))
  linesAB.foreach(_.foreach(s => output.write(s + "\n")))
  while (itr.hasNext) output.write(itr.next() + "\n")

}.fold(println,identity)  //report failure

результат:

~> head *File.txt  # a 3-line file
==> inFile.txt <==
A
B
C

==> outFile.txt <==
C
A
B
0 голосов
/ 05 ноября 2019

Вот прагматичное решение:

  val newList =Source.fromFile("file.txt").getLines().toList match {
    case a::b::c::d::rest => c::d::a::b::rest // reorganize your list
    case other => other // don't do anything if the List has not at least 4 elements
  }
  // persist newList

Используйте Pattern Matching типа List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...