[英]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] "
您遇到的麻煩是對於List
, ToString()
方法會截斷輸出。 解決方法是不使用ToString()
,而是使用sprint "%A" *list here*
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.