Порядок полей в виде для FileHelpers - PullRequest
2 голосов
/ 28 мая 2011

Я читаю простой CSV-файл с помощью Filehelpers - файл является просто парой ключ-значение.(string, int64)

Я написал для этого тип f #:

type MapVal (key:string, value:int64) =
    new()= MapVal("",0L)
    member x.Key = key
    member x.Value = value

Я здесь упускаю что-то элементарное, но FileHelpers всегда предполагает, что порядок полей являетсяобратное тому, что я указал - как в Value, Key.

let dfe = new DelimitedFileEngine(typeof<MapVal>)
let recs = dfe.ReadFile(@"D:\e.dat")
recs |> Seq.length

Что мне здесь не хватает?

Ответы [ 2 ]

4 голосов
/ 28 мая 2011

Порядок параметров первичного конструктора не обязательно определяет порядок, в котором поля встречаются внутри типа (фактически, в зависимости от того, как используются параметры, они могут даже не приводить к созданию поля). На мой взгляд, тот факт, что FileHelpers не предоставляет возможности использовать свойства вместо полей, является неудачным. Если вы хотите лучше контролировать физическое расположение класса, вам нужно объявить поля явно:

type MapVal = 
    val mutable key : string
    val mutable value : int64
    new() = { key = ""; value = 0L }
    new(k, v) = { key = k; value = v }
    member x.Key = x.key
    member x.Value = x.value
3 голосов
/ 30 мая 2011

Библиотека использует порядок полей в объявлении, но выглядит так, что слова F # отличаются, в последней последней стабильной версии библиотеки вы можете использовать атрибут [FieldOrder (1)], чтобы обеспечить порядок поля.

http://teamcity.codebetter.com/viewLog.html?buildId=lastSuccessful&buildTypeId=bt66&tab=artifacts&guest=1

Приветствия

...