[Haskell-cafe] ByteString comparison question (was: another Newbie
performance question)
Philip Müller
mail at philip.in-aachen.net
Sun May 18 13:29:40 EDT 2008
Hi,
I'm changing my CSV program to use ByteStrings, but I have problems with
this:
readCSVLine :: String -- line as String
-> [String] -- line broken down into the value Strings
readCSVLine = unfoldr builder
where
builder [] = Nothing
builder xs = Just $ readField xs
readField [] = ([],[])
readField (',':xs) = ([],xs)
readField ('"':xs) = (field,rest)
where
(field,'"':rest) = break (== '"') xs
So far, I have something like this - doesn't look too good to me, and
doesn't compile:
import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C8
type CSV = [[B.ByteString]]
readCSVLine :: B.ByteString -- line as String
-> [B.ByteString] -- line broken down into the value Strings
readCSVLine = unfoldr builder
where
builder xs | xs == B.empty = Nothing
| otherwise = Just $ readField xs
readField xs | xs == B.empty = ([],[])
| B.head xs == ',' = ([], B.tail xs)
| B.head xs == '"' = (field, B.tail rest)
where
field,rest) = B.break (== '"') xs
I do not know how to compare a Word8 to a Char. Or maybe I don't need to?
Regards
Philip
More information about the Haskell-Cafe
mailing list