Функция crunch читает текстовый файл в формате, который вы описали, и преобразует его в последовательность Array3D.
open System
open System.IO
// if .Net 4.0 use this:
// let isEmpty (s:string) = String.IsNullOrWhiteSpace(s)
let isEmpty (s:string) = String.IsNullOrEmpty(s) || s.Trim().Length = 0
let readNonEmptyLine (reader:StreamReader) =
let mutable line = ""
while (not reader.EndOfStream) && isEmpty line do
line <- reader.ReadLine()
if (isEmpty line && reader.EndOfStream) then None else Some(line)
let crunch (path:string) = seq {
use reader = new StreamReader(path)
while not reader.EndOfStream do
match readNonEmptyLine reader with
| Some line ->
let [|blocks;rows;cols|] = line.Split() |> Array.map int
let array3D = Array3D.zeroCreate blocks rows cols
for b in 0..blocks-1 do
for r in 0..rows-1 do
let row = readNonEmptyLine reader
for c in 0..cols-1 do
array3D.[b,r,c] <- row.Value.[c]
yield array3D
| None -> ()
}