* Converting Integer / Float to String @ 2008-07-17 7:49 Alexander Camek 2008-07-17 8:05 ` anon ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Alexander Camek @ 2008-07-17 7:49 UTC (permalink / raw) Hi List, is there another way to convert a given String to an Integer or Float type? I am currently using some code like this: begin Value :=Float'Value(Float_String); exception when Constraint_Error => Value := 0.0; end; For me this is very ugly and a big hack. Thanks for any idea. Greetings Alexander ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Converting Integer / Float to String 2008-07-17 7:49 Converting Integer / Float to String Alexander Camek @ 2008-07-17 8:05 ` anon 2008-07-17 8:15 ` Dmitry A. Kazakov 2008-07-20 0:28 ` JPWoodruff 2 siblings, 0 replies; 6+ messages in thread From: anon @ 2008-07-17 8:05 UTC (permalink / raw) Another way is to use the "Ada.Float_Text_IO" package. Especially when you may normally need the Float_Text_IO package in the program. Read a integer from a string (buffer) using the "Get" routine: procedure Get ( From : in String ; Item : out Num ; Last : out Positive ) ; but it require an extra variable. String_Position : Positive ; ... Get ( Value, Float_String, String_Position ) ; ... In <newscache$sc454k$rp5$1@pleione.3soft.de>, "Alexander Camek" <Alexander.Camek@Elektrobit.com> writes: >Hi List, > >is there another way to convert a given String to an Integer or Float type? > >I am currently using some code like this: > >begin >Value :=Float'Value(Float_String); >exception >when Constraint_Error => Value := 0.0; >end; > >For me this is very ugly and a big hack. >Thanks for any idea. > >Greetings > >Alexander > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Converting Integer / Float to String 2008-07-17 7:49 Converting Integer / Float to String Alexander Camek 2008-07-17 8:05 ` anon @ 2008-07-17 8:15 ` Dmitry A. Kazakov 2008-07-17 8:32 ` Alexander Camek 2008-07-20 0:28 ` JPWoodruff 2 siblings, 1 reply; 6+ messages in thread From: Dmitry A. Kazakov @ 2008-07-17 8:15 UTC (permalink / raw) On Thu, 17 Jul 2008 09:49:16 +0200, Alexander Camek wrote: > is there another way to convert a given String to an Integer or Float type? Yes, there are many ways. > I am currently using some code like this: > > begin > Value :=Float'Value(Float_String); > exception > when Constraint_Error => Value := 0.0; > end; > > For me this is very ugly and a big hack. Certainly it is ugly, because it is not clear why an improperly spelt or a too large number should magically become 0.0. The first question is why do you want to convert string to float. This makes no sense in most cases. (Parsing text is not about string conversions.) The second question is about the format of the number in the string, which includes treatment of blank characters, based numbers, signed numbers and so on. The third question is about error handling, what happens upon syntax, overflow, underflow, no number, etc errors. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Converting Integer / Float to String 2008-07-17 8:15 ` Dmitry A. Kazakov @ 2008-07-17 8:32 ` Alexander Camek 2008-07-17 9:24 ` Dmitry A. Kazakov 0 siblings, 1 reply; 6+ messages in thread From: Alexander Camek @ 2008-07-17 8:32 UTC (permalink / raw) Hi Dimitry, "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message news:62haf1069b85$.tb768rmm6vib.dlg@40tude.net... > On Thu, 17 Jul 2008 09:49:16 +0200, Alexander Camek wrote: >> I am currently using some code like this: >> >> begin >> Value :=Float'Value(Float_String); >> exception >> when Constraint_Error => Value := 0.0; >> end; >> >> For me this is very ugly and a big hack. > > Certainly it is ugly, because it is not clear why an improperly spelt or a > too large number should magically become 0.0. > The first question is why do you want to convert string to float. This > makes no sense in most cases. (Parsing text is not about string > conversions.) The second question is about the format of the number in the > string, which includes treatment of blank characters, based numbers, > signed > numbers and so on. The third question is about error handling, what > happens > upon syntax, overflow, underflow, no number, etc errors. First of all, this was only a base to start discussion on it and at that point I need some value to initial my float or integer value to get a proper value if the string is malformed. As far as I can tell, the background of the code snipplet is that the string is given from an xml file which is parsed by glib xml and there I get all as a string. To your second question. The whitespaces are trimmed and I can only rely on the point that there is a correct value in it, if not then the default value will be set or at the beginning for initilisation 0.0 is used. To your third question. That is reason why I posted here. I want to get a idea what I have missed in doing my parsing or how to do it a better way. It is clear that there is no silver bullet to do that. But what I want is a good feeling about how to deal with it, what I have to think about and how to deal with it. Greetings Alexander ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Converting Integer / Float to String 2008-07-17 8:32 ` Alexander Camek @ 2008-07-17 9:24 ` Dmitry A. Kazakov 0 siblings, 0 replies; 6+ messages in thread From: Dmitry A. Kazakov @ 2008-07-17 9:24 UTC (permalink / raw) On Thu, 17 Jul 2008 10:32:59 +0200, Alexander Camek wrote: > First of all, this was only a base to start discussion on it and at that > point I need some value to initial my float or integer value to get a proper > value if the string is malformed. I don't think it is a good idea. Malformed document should be reported, instead of being silently parsed. > As far as I can tell, the background of the code snipplet is that the string > is given from an xml file which is parsed by glib xml and there I get all as > a string. I see. Doesn't Glib's XML parser have a support for numeric parsing? I mean, if you already use a parser then it is better to use it at full, instead of adding other code. > To your second question. The whitespaces are trimmed and I can only rely on > the point that there is a correct value in it, But it can be like this: <rubbish> 1.0 2 4 </rubbish> Then what about encoded Unicode characters? Like "ሴ". Does the parser translate them? If it does, how does it this for non-Latin-1 characters? I don't know it, but the parser could produce UTF-8 octets stored in Ada String, which then would be OK to parse as if it were Latin-1... (:-)) > if not then the default value > will be set or at the beginning for initilisation 0.0 is used. Well, the cases "there is no any number" and "the file contains rubbish" are different to me. I would not use the default in the second case. I have a library for parsing: http://www.dmitry-kazakov.de/ada/strings_edit.htm Your sample code could look like: begin Value := Strings_Edit.Floats.Value (Float_String); exception when End_Error => -- No number Value := Default; when Data_Error => -- Wrong number, XML file is corrupt ... when Constraint_Error => -- Out of range ... end; If saturation of the input is OK, then Value (Float_String, ToFirst => True, ToLast => True); that would saturate the input to the nearest bound instead of Constraint_Error propagation. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Converting Integer / Float to String 2008-07-17 7:49 Converting Integer / Float to String Alexander Camek 2008-07-17 8:05 ` anon 2008-07-17 8:15 ` Dmitry A. Kazakov @ 2008-07-20 0:28 ` JPWoodruff 2 siblings, 0 replies; 6+ messages in thread From: JPWoodruff @ 2008-07-20 0:28 UTC (permalink / raw) On Jul 17, 1:49 am, "Alexander Camek" <Alexander.Ca...@Elektrobit.com> wrote: > Hi List, > > is there another way to convert a given String to an Integer or Float type? > Perhaps you could use some part of the numeric IO packages I constructed some years back: http://www.dmitry-kazakov.de/ada/Numeric-Name-IO.htm (Dmitry has kindly hosted the distribution of my contribution) The packages Numeric_IO and Name_IO, together with their children and support, assist a program to read a user’s input. The packages are intended to support numerical computation by providing “Get” and “Put” procedures for floating numbers and for vectors and matrices of floating numbers. The procedures ease an end-user’s burden in preparing inputs for computational programs. The rules for input of floating numbers are relaxed so that program inputs need not conform to the strict Ada syntax for floating numbers. Facilities allow input either from files or interactively. Consistent policies throughout all the services allow programs to address input errors, to prompt the end-user interactively or to specify optional default values. Name-directed input can be used to read a file of input data, even including physical units as defined by Dmitry's Measures_Edit. Here are example lines from an input file that could be read by your program that employs these packages: Vect := 1.414, 1.732, 2.0 ; P := 14.9 psi ; -- one standard atmosphere -- John ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-07-20 0:28 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2008-07-17 7:49 Converting Integer / Float to String Alexander Camek 2008-07-17 8:05 ` anon 2008-07-17 8:15 ` Dmitry A. Kazakov 2008-07-17 8:32 ` Alexander Camek 2008-07-17 9:24 ` Dmitry A. Kazakov 2008-07-20 0:28 ` JPWoodruff
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox