Scala Файловые линии на карту - PullRequest
0 голосов
/ 15 февраля 2019

Я в настоящее время открываю свои файлы и использую .getLines для извлечения каждой строки из файла со словом и его фонетическим произношением, разделенными двумя пробелами, я не понимаю, как мне поступить с отображением слова и егопроизношение в Scala, так как я довольно новичок в языке.Раньше я хотя и использовал разделение и разделение слов и их звуков на разные строки, но я потерян

В настоящее время я начал с

  def words(filename: String, word: String): Unit = {
    val file = Source.fromFile(filename).getLines().drop(56)
    for(x <- file){
      
    }

 }

EX:

ARTI  AA1 R T IY2
AASE  AA1 S
ABAIR  AH0 B EH1 R
AB  AE1 B

Результат:

Map("AARTI -> "AA1 R T IY2","AASE" -> "AA1 S", "ABAIR" -> " AH0 B EH1 R")

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Если ваши строки в file, то это создаст Map от первого слова до остальной части строки:

val res: Map[String, String] = file.map(_.span(_.isLetter))(collection.breakOut)

Значения в Map будут содержать начальный пробелсимволов, поэтому вы можете вызвать их на trim перед их использованием.

  1. Вызов map обрабатывает каждую строку по очереди.

  2. Метод span разбивает строку на кортеж, где первое значение - это ваше слово, а второе - остальная часть строки.

  3. Использование collection.breakOut говорит map поместить результаты непосредственно в Map, а не проходить через промежуточный массив или список.

0 голосов
/ 15 февраля 2019
  • итерация каждой строки
  • разделение на 2 пробела " "
  • создание кортежа (a -> b)
  • преобразование Array[Tuple[A, B]] => Map[A, B]

пример,

    val data =
      """
ARTI  AA1 R T IY2
AASE  AA1 S
ABAIR  AH0 B EH1 R
AB  AE1 B
      """.stripMargin

    val lines: Array[String] = data.split("\n").filter(_.trim.nonEmpty)
    // if you are reading from file
    // val lines = Source.fromFile("src/test/resources/my_filename.txt").getLines()

    val res: Array[Tuple2[String, String]] = lines.map { line =>
      line.split("  ") match { case Array(a, b) => a -> b }
    }

    println(res.toMap)

вывод:

Map(ARTI -> AA1 R T IY2, AASE -> AA1 S, ABAIR -> AH0 B EH1 R, AB -> AE1 B)

Рабочий пример - https://scastie.scala -lang.org / praagagupd / jBCnEhUPQJCMPKP9TXlgWA

Как прочитать весь файл в Scala?

...