Запись в файл из строки и массива - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь написать CSV-файл, в котором некоторые значения взяты из массивов.

    let handle = "thetitle"
    let title  = "The Title"
    let body = "ipsum lorem"
    let mutable variantPrice = [|1000,2000,3000,4000|]
    let mutable variantComparePrice = [|2000,4000,6000,8000|]
    let mutable storlek = ["50x50","50x60","50x70","50x80"]

    let Header = [|
                  (handle, title, body,variantPrice, variantComparePrice, storlek)
                 |]

    let lines = Header |> Array.map (fun (h, t, vp,vcp,b,s) -> sprintf "Handle\tTitle\tStorlek\tVariantPrice\tVariantComparePrice\tBody\n %s\t%s\t%s\t%s"h t s vp vcp b)

File.WriteAllLines( "data\\test.csv", lines, Encoding.UTF8) 

Но проблема в том, что выражение в строках является ожидаемой строкой, но я отправляю в строке []

Ideal would be that the csv file looked something like this

|handle|title|body|variantPrice|variantComparePrice|storlek|
|thetitle|The Title|ipsum lorem|1000|2000|50x50|
|thetitle|         |           |2000|4000|50x60|
|thetitle|         |           |3000|6000|50x70|
|thetitle|         |           |4000|8000|50x80|

1 Ответ

1 голос
/ 18 июня 2020

Первая проблема заключается в том, что ваши переменные, хранящие данные типа variantPrice, в настоящее время представляют собой массивы, содержащие только один элемент, который является кортежем - это потому, что вы разделили элементы, используя ,, а не ;. Скорее всего, вам понадобится что-то вроде:

let variantPrice = [|1000;2000;3000;4000|]
let variantComparePrice = [|2000;4000;6000;8000|]
let storlek = [|"50x50";"50x60";"50x70";"50x80"|]

С этим вы можете затем использовать Array.zip3, чтобы получить единый массив со всеми данными (по одному элементу в строке).

let data = Array.zip3 variantPrice variantComparePrice storlek

Теперь вы можете использовать Array.map для форматирования отдельных строк. Следующее мое предположение основано на вашем примере:

let lines = data |> Array.map (fun (vp, vcp, s) ->
  sprintf "|%s| | |%d|%d|%s" handle vp vcp s)

Это массив строк, представленных в виде строк. Наконец, вы можете добавить заголовок к строкам и записать это в файл:

let header = "|handle|title|body|variantPrice|variantComparePrice|storlek|"
System.IO.File.WriteAllLines("c:/temp/test.csv", 
  Array.append [| header |] lines, Encoding.UTF8) 
...