我来自c#和python背景,觉得必须有更好的方法来读取文件并填充经典的F#列表。但后来我知道f#list是不可变的。必须有一个使用List<string>
对象并调用其Add
方法的替代方法。
到目前为止,我手头有了:
let ptr = new StreamReader("stop-words.txt")
let lst = new List<string>()
let ProcessLine line =
match line with
| null -> false
| s ->
lst.Add(s)
true
while ProcessLine (ptr.ReadLine()) do ()
如果我在python中编写类似的东西,我会做类似的事情:
[x[:-1] for x in open('stop-words.txt')]
答案 0 :(得分:2)
如果要阅读文件中的所有行,可以使用ReadAllLines
。该方法将数据作为数组返回,但您可以使用List.ofArray
轻松将其转换为F#列表,或使用Seq
模块中的函数处理它:
open System.IO
File.ReadAllLines("stop-words.txt")
或者,如果您不想将所有内容都读入内存,则可以使用File.ReadLines
来懒散地读取这些行。
答案 1 :(得分:2)
简单的解决方案
System.IO.File.ReadAllLines(filename) |> List.ofArray
虽然你可以写一个递归函数
let processline fname =
let file = new System.IO.StreamReader("stop-words.txt")
let rec dowork() =
match file.ReadLine() with
|null -> []
|t -> t::(dowork())
dowork()