Как я могу преобразовать файл CSV в список в Scala, когда строки данных имеют дату и целое число и разделены разными строками. Речь идет о фондовом рынке.

Приведенная ниже функция принимает в качестве аргументов символ акции и год. Он должен прочитать соответствующий CSV-файл, а затем извлечь данные января за данный год. Данные должны быть собраны в список строк (по одной записи на каждую строку в CSV-файле).

def get_january_data(symbol: String, year: Int) : List[String] = {
}

Файл csv выглядит так:

Data          AJD  
12/01/1998    0.32232  
14/01/1998    0.32232  

01.12.1998,0,32232,01.14.1998,0,32232

0
John.smith 20 Ноя 2019 в 21:15
2
Предоставьте несколько строк примера входных данных (содержимое файла) и желаемые результаты.
 – 
jwvh
20 Ноя 2019 в 21:17
Дата Adj Close 01.02.1981 0,49263 01.05.1981 0,481921 01.06.1981 0,460502 01.07.1981 0,440868 01.08.1981 0,431944
 – 
John.smith
20 Ноя 2019 в 21:18
И желаемый результат будет List[String] (одна запись для каждой строки в CSV-файле).
 – 
John.smith
20 Ноя 2019 в 21:19
Извините, вопрос отредактирован
 – 
John.smith
20 Ноя 2019 в 21:21
Нет ли простого способа получить информацию из CSV?
 – 
John.smith
20 Ноя 2019 в 21:28

1 ответ

Если я понимаю ваш вопрос, вы можете начать со следующего фрагмента кода:

    val data =
        """Data          AJD
          |12/01/1998    0.32232
          |14/01/1998    0.32232
          |14/02/1998    0.12333
          |01/01/1999    0.12333""".stripMargin


      def getJanuaryData(symbol: String, year: Int): List[String] = {
        val dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy")
        val xs: Vector[(LocalDateTime, Double)] = fromString(data, dtf)
        xs.filter(x => (x._1.getMonthValue == 1) && x._1.getYear == year)
          .map(x => s"${x._1.format(dtf)}  ${x._2}").toList
      }

      def fromString(str: String, dateFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy")): Vector[(LocalDateTime, Double)] = {
        str.split("\n").tail.map { line =>
          val tokens = line.split("    ") // consider different separator
          (LocalDate.parse(tokens(0), dateFormatter).atStartOfDay()
            , tokens.tail.head.toDouble)
        }.toVector
      }
      getJanuaryData("", 1998)

getJanuaryData() возвращает строки за январь и требуемый год. Пожалуйста, добавьте больше информации о биржевом символе, чтобы получить точный ответ.

0
Kuba Wenta 20 Ноя 2019 в 22:38