Как написать CSV в F #? - PullRequest
0 голосов
/ 30 июня 2018

Как бы я записал запись в F # в CSV? Было бы оптимальным иметь одну строку для каждого экземпляра определенной переменной. Моя запись и окончательный вывод - карта, подобная приведенной ниже.

type Family =
    { Month : int
      Year : int
      Income : float
      Family : int
      Dogs : int
      Cats : int
    }

let monthly =
    timeMap
    |> Seq.ofList
    |> Seq.map(fun ((month,year), rows) ->
        { Month = month
          Year = year
          Income = rows.Inc
          Family = familyMap.[(month,year)].Children
          Dogs = familyMap.[(month,year)].Dogs
          Cats = familyMap.[(month,year)].Cats
        })
    |> List.ofSeq

let map = 
    monthly
    |> List.map (fun x -> (x.Year,x.Month),x)
    |> Map.ofList 

ИЗД.

Это то, что я пробовал, но я получаю сообщение об ошибке (A,B,C,D,E,F) are not defined и it is recommended that I use the syntax new (type) args. Эта последняя ошибка отображается под >> MyCsvType

type MyCsvType = CsvProvider<Schema = "A (int), B (int), C (float), D (int), E (int), F (int)", HasHeaders = false>
let myCsvBuildRow (x:Family) = MyCsvType.Row(x.A,x.B,x.C,x.D,x.E,x.F)
let myCsvBuildTable = (Seq.map myCsvBuildRow) >> Seq.toList >> MyCsvType
let myCsv = monthly|> myCsvBuildTable
myCsv.SaveToString()

1 Ответ

0 голосов
/ 02 июля 2018

Ваш код почти готов, за исключением того, что функция myCsvBuildRow должна обращаться к членам типа Family, используя их правильные имена. В вашей версии вы обращаетесь к именам, таким как A, B и т. Д., Но это имена столбцов в вашем CSV-файле, а не имена членов записи F #. Следующее помогает мне:

type MyCsvType = CsvProvider<Schema = "A (int), B (int), C (float), D (int), E (int), F (int)", HasHeaders = false>

let myCsvBuildRow (x:Family) = 
  MyCsvType.Row(x.Month,x.Year,x.Income,x.Family,x.Dogs,x.Cats)
let myCsvBuildTable data = 
  new MyCsvType(Seq.map myCsvBuildRow data)

let myCsv = family |> myCsvBuildTable
myCsv.SaveToString()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...