ATrade-QUIK connector
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

39 lines
923 B

module QuoteSource.XlParser (
XlData(..),
xlParser
) where
import Control.Applicative
import Control.Monad
import Data.Binary.Get
import Data.ByteString
data XlData = XlInt Int | XlDouble Double | XlString String | XlEmpty
data XlPosition = XlPosition { width :: Int, height :: Int, xPos :: Int, yPos :: Int }
btTable = 16
btFloat = 1
btString = 2
btBlank = 5
btInt = 6
btSkip = 7
incrementPosition :: XlPosition -> Maybe XlPosition
incrementPosition pos = do
if 1 + xPos pos < width pos
then Just pos { xPos = 1 + xPos pos }
else if 1 + yPos pos < height pos
then Just pos { xPos = 0, yPos = 1 + yPos pos }
else Nothing
xlParser :: Get (Int, Int, [XlData])
xlParser = do
datatype <- getWord16le
when (datatype /= btTable) $ fail "First entry should be table"
blocksize <- fromEnum <$> getWord16le
when (blocksize /= 4) $ fail "Table entry should have size 4"
return (0, 0, [])