簡體   English   中英

記錄中的字符串列表以CSV格式顯示?

[英]List of string in a record to CSV?

如何將記錄中的字符串列表寫入CSV而不被截斷?

CSV編寫器:

let toSepFile sep header (fileName:string) (s:'record seq)=

    let schemaType=typeof<'record>
    let fields = Reflection.FSharpType.GetRecordFields(schemaType) 

    let toStr fields = 
        fields
        |> Seq.fold(fun res field-> res+field+sep) ""

    use w = new System.IO.StreamWriter(fileName)

    if header then 
        let header_str= fields
                    |> Seq.map(fun field -> field.Name)
                    |> toStr

        w.WriteLine(header_str)

    let elemToStr (elem:'record) = 
        //for each field get value 
        fields
        |> Seq.map(fun field -> string (FSharpValue.GetRecordField(elem,field)))
        |> toStr

    s
    |>Seq.map(elemToStr)
    |>Seq.iter(fun elem -> w.WriteLine(elem))

測試數據(Deedle測試集):

let peopleRecds = 
 [ { Name = "Joe"; Age = 51; Countries = [ "UK"; "US"; "UK"] }
 { Name = "Tomas"; Age = 28; Countries = [ "CZ"; "UK"; "US"; "CZ" ] }
 { Name = "Suzanne"; Age = 15; Countries = [ "US" ] } ]

當前的CSV輸出:

Name    Age Countries   
"Joe    51  [CZ; UK; US; ... ]  "
"Tomas  28  [CZ; UK; US; ... ]  "
"Suzanne    15  [US]    "

那么是否可以從CSV輸出中看到字符串的完整列表,而不是“ ...”?

編輯:所需的輸出:

    Name    Age Countries   
    "Joe      51    [CZ; UK; US]    "
    "Tomas    28    [CZ; UK; US; CZ]    "
    "Suzanne  15    [US]    "

您遇到的麻煩是對於ListToString()方法會截斷輸出。 解決方法是不使用ToString() ,而是使用sprint "%A" *list here*

暫無
暫無

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

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