[Haskell-beginners] Parse string with optional entries [Parsec]
Stefan.Lukasser-EE at infineon.com
Stefan.Lukasser-EE at infineon.com
Mon Aug 8 16:44:44 CEST 2011
Ah, thanks. The next step would then be to replace empty strings with Nothing, and the others with
Just Value
I forgot to mention that the values are Double.
I tried the following:
numberP :: Parser Double -- From RWH
numberP = do
s <- getInput
case readSigned readFloat s of
[(n, s')] -> n <$ setInput s'
_ -> empty
<?> "number"
valueP :: Parser [Double]
valueP = do
(many numberP) `sepBy` (char '\t')
<?> "value list"
It type checks, but raises an exception:
Main> parseTest valueP "1\t\t3.3"
*** Exception: Text.ParserCombinators.Parsec.Prim.many: combinator 'many' is applied to a parser that accepts an empty string.
Is there another way to parse Double values?
Thanks a lot so far.
-----Original Message-----
From: toad3k at gmail.com [mailto:toad3k at gmail.com] On Behalf Of David McBride
Sent: Monday, August 08, 2011 3:53 PM
To: Lukasser Stefan (IFAT IMM PSD D TEC / EE)
Cc: aslatter at gmail.com; beginners at haskell.org
Subject: Re: [Haskell-beginners] Parse string with optional entries [Parsec]
Read up on the sepBy combinator.
parse (sepBy (many digit) (char ',')) "" "123,321,,2321"
Right ["123","321","","2321"]
On Mon, Aug 8, 2011 at 7:53 AM, <Stefan.Lukasser-EE at infineon.com> wrote:
> Hi,
>
> I have something similar to the CSV-Parser in RWH, chapter 16.
> The problem are the possible empty cells, i.e. consecutive '\t'-Characters.
>
>
> -----Original Message-----
> From: Antoine Latter [mailto:aslatter at gmail.com]
> Sent: Monday, August 08, 2011 1:44 PM
> To: Lukasser Stefan (IFAT IMM PSD D TEC / EE)
> Cc: beginners at haskell.org
> Subject: Re: [Haskell-beginners] Parse string with optional entries [Parsec]
>
> On Mon, Aug 8, 2011 at 6:39 AM, <Stefan.Lukasser-EE at infineon.com> wrote:
>> Hi all,
>>
>> I'm trying to parse a string in one of the following forms using Parsec:
>>
>> "1\t1\t123\t456" -> desired output: [Just 1, Just 1, Just 123, Just 456]
>>
>> or
>>
>> "1\t\1\t\t456" -> desired output: [Just 1, Just 1, Nothing, Just 456]
>>
>> i.e., the input is a list of numbers, separated by '\t' characters, with the possibility of missing entries.
>> I'm having troubles with the backtracking in case of missing numbers. Can anybody give me a hint?
>>
>
> What do you have so far?
>
>> Thanks in advance,
>> Stefan
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://www.haskell.org/mailman/listinfo/beginners
>>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
More information about the Beginners
mailing list