как прочитать файл и пропустить некоторые пробелы - PullRequest
2 голосов
/ 06 октября 2011

это похоже на мой предыдущий вопрос,

но есть другая импровизация, как код, если я хочу пропустить некоторые пробелы, для этого случая "enter", например:

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 ]

3 голосов
/ 06 октября 2011

Другой способ написать вашу функцию 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 голосов
/ 06 октября 2011

А как же это:

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

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...