F# 如何从F中的文件读取浮点数据#

F# 如何从F中的文件读取浮点数据#,f#,c#-to-f#,F#,C# To F#,我有一个带有浮点数的文件,我想读取它并将值保存在数组中以进行一些数学运算。然后我需要在另一个文件中打印新数组。我找到的所有方法都将文件作为字符串读取,我也不知道如何将字符串转换为浮点数组 如果我们可以假设文件中的每个浮点数都在自己的行上,那么您可以执行如下操作: open System open System.IO let readFloats filePath = let strs = File.ReadLines(filePath) // Read file line b

我有一个带有浮点数的文件,我想读取它并将值保存在数组中以进行一些数学运算。然后我需要在另一个文件中打印新数组。我找到的所有方法都将文件作为字符串读取,我也不知道如何将字符串转换为浮点数组

如果我们可以假设文件中的每个浮点数都在自己的行上,那么您可以执行如下操作:

open System
open System.IO    

let readFloats filePath = 
    let strs = File.ReadLines(filePath) // Read file line by line
    strs |> Seq.map (fun str -> System.Double.TryParse(str)) // TryParse returns pair (Boolean * float value). Boolean is true if string parsed correctly 
         |> Seq.filter (fun (success, _) -> success) // filters out wrong  (not parsed strings)
         |> Seq.map snd // transforms sequence of pairs (bool * float) into float only

如果字符串未被解析,则从
string
float
进行的转换将引发异常。如果您想变得非常可爱(并且没有错误处理),您可以将其归结为简单的
让readFloats=System.IO.File.ReadAllLines>>(Array.map float)
,@Petr本可以编写
let readFloats=System.IO.File.ReadLines>>Seq.map System.Double.TryParse>>Seq.filter fst>>Seq.map snd
感谢everybode的帮助,但它没有正确地将字符串更改为float。序列如下
seq[-1.998750;-0.048750;0.884451;2.482136;…]
输出如下
seq[-1998750.0;-48750.0;884451.0;2482136.0;…]
可能是当地文化特有的。TryParse方法有一个重载,它包含两个额外的参数: