簡體   English   中英

如何在F#中編寫csv?

[英]How to write a csv in F#?

如何將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 

EDITED

這是我試過的,但我得到的錯誤是(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()

您的代碼幾乎就在那里,除了myCsvBuildRow函數需要使用正確的名稱訪問Family類型的成員。 在您的版本中,您正在訪問AB等名稱,但這些名稱是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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM