2011-10-06 78 views
2

这是类同我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 
+0

空白行是用来分隔记录还是不记录? – BLUEPIXY

回答

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和数组实现它)。

2

这个怎么样:

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

相关问题