2011-10-06 112 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) 

相關問題