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方法有一个重载,它包含两个额外的参数: