2017-07-29 52 views
2

我正在从控制台输入中读取数据,并想将我读取的字符串转换为自定义类型。我分裂我读的字符串然后试图实例化我的自定义类型有一个编译错误,我不明白。输入的F#从列表中创建类型

实施例I将读取(在一行中):

1;美美德拉预防桑特; 6芸香马格劳那340000蒙彼利埃;; 3,87952263361082; 43,6071285339217

代码示例:

let input() = Console.In.ReadLine() 

type Coordinate = {Longitude:float; Latitude:float} 
type Defibrillator = {Name:string; Coordinate:Coordinate} // I only need name and coordinate 

let readDefribillator = 
    input().Split(';') 
    |> {Name=""; Coordinate={Longitude=1.0; Latitude=2.0}} // Don't know how to do this 

误差(上线|> {名称= ...)

此表达预期具有类型“串[] - > '一个',但这里的类型为 '除颤'

感谢您的帮助

回答

3

我建议

open System 

type Coordinate = {Longitude:float; Latitude:float} 
type Defibrillator = {Name:string; Coordinate:Coordinate} 

[<EntryPoint>] 
let main argv = 
    let input = Console.ReadLine() 
    let readDefribillator = 
     input.Split(';') 
     |> fun x -> {Name=""; Coordinate = { 
     Longitude = float (x.[4].Replace(",",".")) 
     Latitude =float (x.[5].Replace(",",".")) 
     }} 
    printfn "%A" readDefribillator 
    Console.ReadLine |> ignore 
    0 

其中

  1. fun x ->正在输入字符串数组的护理
  2. x.[4]x.[5]被选择的坐标
  3. .Replace(",",".")被格式化数量预计由float
+0

谢谢,我喜欢你解释和代码是真正写入功能的方式与使用|>。我还有很长的路要走。 –

3

您可以这样做,如果您将逗号更改为输入数字中的点。

let readDefribillator = 
    let values = input().Split(';') 
    { Name = values.[1]; Coordinate = { Longitude = float values.[4]; Latitude = float values.[5] } } 

如果您的号码将包含逗号,你可以转换使用本地或特定的文化,功能Single.Parse,Double.Parse,Convert.ToSingle或Convert.ToDouble。这些函数具有带额外参数的版本。如果您不使用额外的参数,则显示将使用本地文化,以便您可以简单地执行以下操作。逗号而不是点可能会用于您的语言环境,但对于美国语言环境,如果输入逗号,则会失败。换句话说,这里使用的函数是locale敏感的。

let readDefribillator = 
    let values = input().Split(';') 
    let x = Convert.ToDouble values.[4] 
    let y = Convert.ToDouble values.[5] 
    { Name = values.[1]; Coordinate = { Longitude = x; Latitude = y } } 

如果您的意见,总是要么逗号或者点,然后使用这些功能的额外的参数指定一个特定的文化。有预定义的文化。我不会在这里谈论所有这些。

看起来你正在开始学习F#。 StackOverflow不是一个提问这样的问题的好地方。我建议,相反,你加入我们https://fsharp.slack.com几乎任何类型的问题是值得欢迎的。

+0

感谢您的回答,我确实开始学习F#。我正在努力处理语法,并且还不知道框架中可用的内容。很难找到,但我到了那里。我不认为我可以在这个懒散的频道找到帮助。我一定会看看并寻求帮助。再次感谢提示。 –

+0

以防万一你还没有发现它,有这个辉煌的网站,这相当于一本书:http://fsharpforfunandprofit.com –

+0

我有它真的很好的网站。很多信息,我需要仔细阅读它才能消化所写的所有内容。 –