2016-09-06 5 views
1

Я хотел бы передать строку, содержащую разделитель, например ",", функции F #, но вызывающая сторона получает сообщение об ошибке, поскольку "," не является string[].Как преобразовать «,» в строку []

[<EntryPoint>] 
let main argv = 
    let csv_fileH = initCsvLib "test1.csv" "," 

Код библиотека ниже написано, чтобы создать свой собственный разделитель, но было бы неплохо пройти разделитель так труба и другие разграниченные файлы могут быть прочитаны.

namespace Toa.csv_lib 
. 
. 
. 
(* Contains various necessary open statements *) 

[<AutoOpen>] 
module csv_lib = 

    let initCsvLib fn = 
     let csv_delim = "," 
     let csv_fileH = new TextFieldParser(fn:string) 
     csv_fileH.TextFieldType = FieldType.Delimited |> ignore 
     csv_fileH.SetDelimiters(csv_delim) |> ignore 
     csv_fileH 

Каков наилучший способ преобразования строкового типа в строку []? Я также смотрел сайт Microsoft и другие места.

+2

Обратите внимание, что '... Свойство = Значение |> ignore' линия, вероятно, не делать то, что вы хотите. Попробуйте '... Property <- Value' (установить свойство vs. сравнить его значение и отменить true/false). – CaringDev

ответ

6

Если метод SetDelimiters ожидает массив из множества разделителей (как следует из названия), вы можете пройти [|","|], и он должен работать.

Вероятно, они сделали так, потому что один может в конечном счете, необходимо пройти несколько разделителей, т.е.

[|","; "|"|] 
+0

Есть ли причина - и запятые не работают, потому что я пытался - чтобы список был заключен в скобки вертикальными полосками? – octopusgrabbus

+0

@octopusgrabbus '[||]' является синтаксисом для массива https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays – Ringil

+1

Да, потому что без скобок это будет список F #, а не массив. – Gustavo

Смежные вопросы