[erlang-questions] fread() for numbers - beginner question

andrew mmc andrewmmc@REDACTED
Mon Apr 20 22:13:29 CEST 2009


Hello,
Where's the data from?  I recently had a similar problem, which was solved
by ensuring the data was in floating point format.  I was using data in .csv
files.  I opened the file in excel, formatted the columns as a number with a
decimal point, and re-saved as a csv... all the formatting was intact and it
solved the problem.

Altering the data source might be your best option...if you can!


On Mon, Apr 20, 2009 at 6:02 PM, BranchingFactor
<branchingfactor@REDACTED>wrote:

> Thanks for the quick reply,   Robbi.    I was hoping to avoid the
> try-and-try-again approach b/c it doesn't extend so nicely to scanning
> multiple items from a string.  Does Erlang provide any way to read what many
> other programming languages consider to be the printed representation of a
> number?
>
> --- On *Mon, 4/20/09, Robert Raschke <rtrlists@REDACTED>* wrote:
>
> From: Robert Raschke <rtrlists@REDACTED>
> Subject: Re: [erlang-questions] fread() for numbers - beginner question
> To: branchingfactor@REDACTED
> Cc: erlang-questions@REDACTED
> Date: Monday, April 20, 2009, 6:57 AM
>
>
> On Mon, Apr 20, 2009 at 10:43 AM, BranchingFactor
> <branchingfactor@REDACTED>
>  wrote:
> > I'd like to io_lib:fread() a number from a string.  Unfortunately, if
> I use
> > "~f" for floating point number, then fread rejects numbers that
> don't have
> > fractional parts:
> >
> >> io_lib:fread("~f", "1").
> > {error,{fread,float}}
> >> io_lib:fread("~f", "1.").
> > {error,{fread,float}}
> >
> > (I find this very strange, since both 1 and 1. can be represented in a
> > floating point number.)
> > And if I use "~d" for decimal integers, then fread won't
> read past the
> > decimal point:
> >
> >> io_lib:fread("~d", "1.0").
> > {ok,[1],".0"}
> >
> > What is the easiest way to scan a number from a string in erlang?
> Ideally
> > it would scan any number in any input format and return an Erlang object
> > that satisfied the is_number() predicate.
>
> scan_number(S) ->
>     case io_lib:fread("~f", S) of
>         {error, _}
>  -> io_lib:fread("~d", S);
>         Result -> Result
>     end.
>
> This doesn't handle 16#ffff and friends though. but you can extend it
> according to you needs.
>
> And "1." is not a valid Erlang number.
>
> Robby
>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090420/e58fc4cf/attachment.htm>


More information about the erlang-questions mailing list