如何读取文件并跳过一些空格

时间:2011-10-06 16:11:40

标签: f#

这与我的previous问题类似,

但还有另一种即兴创作,如果我想跳过一些空格,代码怎么样,因为这种情况是“输入”,例如:

5 5 10
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
               <- this white space
3 4 4
1 2 3 4
1 2 3 4
1 2 3 4

我尽我所能但却找不到如何跳过白色空间 谢谢你的帮助:)

这是答案,感谢拉蒙:

let readMap (path:string) =
    let lines = File.ReadAllLines path
    let [|x; y; n|] = lines.[0].Split() |> Array.map int
    let data = 
        [| 
            for l in (lines |> Array.toSeq |> Seq.skip 1 |> Seq.filter(System.String.IsNullOrEmpty >> not)) do
                yield l.Split()
        |]
    x,y,n,data

2 个答案:

答案 0 :(得分:3)

编写readMap函数的另一种方法是在列表推导中使用if表达式。我认为如果你使用理解,这实际上更具可读性(因为你不必结合两种写东西的方式):

let readMap (path:string) =
    let lines = File.ReadAllLines path
    let [|x; y; n|] = lines.[0].Split() |> Array.map int
    let data = 
        [| 
            for l in lines |> Seq.skip 1 do
                if not (System.String.IsNullOrEmpty(l)) then
                    yield l.Split()
        |]
    x,y,n,data

我还删除了对Array.toSeq的调用,因为F#允许你在没有显式转换的情况下在seq所在的地方使用数组(seq实际上是IEnumerable而数组实现了它)。

答案 1 :(得分:2)

这个怎么样:

val items : string list
items
|> List.filter (System.String.IsNullOrEmpty >> not)