[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

string into array

Josselin

1/28/2007 10:13:00 AM

I have the following string
id = "(48.88689971942316, 2.3380279541015625)"
is there any method to transform directly into an array
[48.88689971942316, 2.3380279541015625] or should extract both parts
and create the array (what I did.. but not very DRY)

tfyl

joss

4 Answers

Robert Klemme

1/28/2007 10:20:00 AM

0

On 28.01.2007 11:13, Josselin wrote:
> I have the following string
> id = "(48.88689971942316, 2.3380279541015625)"
> is there any method to transform directly into an array
> [48.88689971942316, 2.3380279541015625] or should extract both parts and
> create the array (what I did.. but not very DRY)

In this simple case you can do:

>> id = "(48.88689971942316, 2.3380279541015625)"
=> "(48.88689971942316, 2.3380279541015625)"
>> id.scan /\d+\.\d+/
=> ["48.88689971942316", "2.3380279541015625"]
>> id.scan(/\d+\.\d+/).map! {|x| x.to_f}
=> [48.8868997194232, 2.33802795410156]

It depends on the values that can occur in the string if this is
sufficient (for example, the piece above does not take care of signs
also does not recognize numbers without decimals). You can find plenty
solutions for matching floating point numbers in the archives of this
list / newsgroup.

Generally, if you get this string from some piece of external code, you
want to parse it in some way to make sure it matches your expectations.

Kind regards

robert

Julian 'Julik' Tarkhanov

1/28/2007 10:25:00 AM

0


On Jan 28, 2007, at 11:15 AM, Josselin wrote:

> I have the following string
> id = "(48.88689971942316, 2.3380279541015625)"
> is there any method to transform directly into an array
> [48.88689971942316, 2.3380279541015625] or should extract both
> parts and create the array (what I did.. but not very DRY)
>
> tfyl

id[1..-2].split(',').map {|e| e.to_f }
--
Julian 'Julik' Tarkhanov
please send all personal mail to
me at julik.nl



hemant

1/28/2007 10:32:00 AM

0

On Sun, 2007-01-28 at 19:15 +0900, Josselin wrote:
> I have the following string
> id = "(48.88689971942316, 2.3380279541015625)"
> is there any method to transform directly into an array
> [48.88689971942316, 2.3380279541015625] or should extract both parts
> and create the array (what I did.. but not very DRY)
>
> tfyl
>
> joss
>
>

Since, I dunno abt really DRY way of doing that, I would go with this:


class String
def to_farray
self.split(',').map {|part| part.gsub(/[()]/,"").to_f}
end
end
a = "(48.88689971942316, 2.3380279541015625)"
a.to_farray #=> [48.88689971942316, 2.3380279541015625]






Josselin

1/29/2007 6:58:00 AM

0

On 2007-01-28 11:20:27 +0100, Robert Klemme <shortcutter@googlemail.com> said:

> On 28.01.2007 11:13, Josselin wrote:
>> I have the following string
>> id = "(48.88689971942316, 2.3380279541015625)"
>> is there any method to transform directly into an array
>> [48.88689971942316, 2.3380279541015625] or should extract both parts
>> and create the array (what I did.. but not very DRY)
>
> In this simple case you can do:
>
> >> id = "(48.88689971942316, 2.3380279541015625)"
> => "(48.88689971942316, 2.3380279541015625)"
> >> id.scan /\d+\.\d+/
> => ["48.88689971942316", "2.3380279541015625"]
> >> id.scan(/\d+\.\d+/).map! {|x| x.to_f}
> => [48.8868997194232, 2.33802795410156]
>
> It depends on the values that can occur in the string if this is
> sufficient (for example, the piece above does not take care of signs
> also does not recognize numbers without decimals). You can find plenty
> solutions for matching floating point numbers in the archives of this
> list / newsgroup.
>
> Generally, if you get this string from some piece of external code, you
> want to parse it in some way to make sure it matches your expectations.
>
> Kind regards
>
> robert

thanks Robert, better that what I originally wrote : (suppressing
parenthesis then split on comma)

@point = id.tr('()', ' ').split(',')