module Data.Array.Repa.IO.Vector
( readVectorFromTextFile
, writeVectorToTextFile)
where
import Data.Array.Repa as A
import Data.Array.Repa.Repr.Unboxed as A
import Data.Array.Repa.IO.Internals.Text
import Data.List as L
import Prelude as P
import System.IO
import Control.Monad
import Data.Char
readVectorFromTextFile
:: (Num e, Read e, Unbox e)
=> FilePath
-> IO (Array U DIM1 e)
readVectorFromTextFile fileName
= do handle <- openFile fileName ReadMode
"VECTOR" <- hGetLine handle
[len] <- liftM (P.map readInt . words) $ hGetLine handle
str <- hGetContents handle
let vals = readValues str
let dims = Z :. len
return $ fromListUnboxed dims vals
readInt :: String -> Int
readInt str
| and $ P.map isDigit str
= read str
| otherwise
= error "Data.Array.Repa.IO.Vector.readVectorFromTextFile parse error when reading data"
writeVectorToTextFile
:: (Show e, Source r e)
=> Array r DIM1 e
-> FilePath
-> IO ()
writeVectorToTextFile arr fileName
= do file <- openFile fileName WriteMode
hPutStrLn file "VECTOR"
let Z :. len
= extent arr
hPutStrLn file $ show len
hWriteValues file $ toList arr
hClose file
hFlush file