Hi,

It depends on what you mean by "doesn't parse". From your message is assume
the CSV is valid, but some of the actual values fails to convert (using
FromField). There are a couple of things you could try:

 1. Define a newtype for your field that calls runParser using e.g. the Int
parser and if it fails, return some other value. I should probably add an
Either instance that covers this case, but there's none there now.

newtype MaybeInt = JustI !Int | ParseFailed

instance FromField MaybeInt where
    parseField s = case runParser (parseField s) of
        Left err -> pure ParseFailed
        Right (n :: Int) -> JustI <$> n

(This is from memory, so I might have gotten some of the details wrong.)

 2. Use the Streaming module, which lets you skip whole records that fails
to parse (see the docs for the Cons constructor).

-- Johan



On Tue, Sep 17, 2013 at 6:43 PM, Andrew Cowie <
and...@operationaldynamics.com> wrote:

> I'm happily using Cassava to parse CSV, only to discover that
> non-conforming lines in the input data are causing the parser to error
> out.
>
>     let e = decodeByName y' :: Either String (Header, Vector Person)
>
> chugs along fine until line 461 of the input when
>
>         "parse error (endOfInput) at ..."
>
> Ironically when my Person (ha) data type was all fields of :: Text it
> just worked, but now that I've specified one or two of the fields as Int
> or Float or whatever, it's mis-parsing.
>
> Is there a way to tell it to just ignore lines that don't parse, rather
> than it killing the whole run? Cassava understands skipping the *header*
> line (and indeed using it to do the -by-name field mapping).
>
> Otherwise the only thing I can see is going back to all the fields
> being :: Text, and then running over that as an intermediate structure
> and validating whether or not things parse to i.e. float.
>
> AfC
> Sydney
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to