2017-07-29 93 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

我有它真的很好的網站。很多信息,我需要仔細閱讀它才能消化所寫的所有內容。 –