Parse the data in an array index in ruby

Hi,

I have a array in a class. And i want to parse the data in the array’s
index.
I tried split method but it said private method ‘split’…

For example

class AA

@data...
........

end
@data[0]=" ABC HGD KKK 111…" sth like that i need the datas seperately
like ABC
How can i do this?

I don’t know what exactly is in @data so I may be wrong, but you could
try something like this :
class MyClass
def initialize(data)
@data = data
end

def split(regexp = /\s+/)
@data.collect { |e| e.split(regexp) }
end
end

arr = [‘ABC DEF GHI J KLMN OPQRS’, ‘TUV WX Y Z’]
c = MyClass.new(arr)
c.split

returns : [[“ABC”, “DEF”, “GHI”, “J”, “KLMN”, “OPQRS”], [“TUV”, “WX”,

“Y”, “Z”]]

Le 06/04/2010 18:32, Brk A. a écrit :

“Brk A.” [email protected] wrote in message
news:[email protected]

@data

end
@data[0]=" ABC HGD KKK 111…" sth like that i need the datas seperately
like ABC
How can i do this?

Posted via http://www.ruby-forum.com/.

Try the folloving snippet:
@data = []
@data[0] = “ABC HGD KKK 111”
m = @data[0].split(’ ')
puts m.inspect.to_s # => [“ABC”, “HGD”, “KKK”, “111”]
hth gfb

Actually i try to fill a table

class Sorm_Table

def initialize # define table structure and array for data
@template =
Struct.new(:nofcall,:obj,:rpn,:rac,:cg1,:cgpn,:cd1,:cdpn,:stt)
@data=Array.new(1000){Array.new()}
@obj=[‘10000’,‘10016’]
end # initialize

def add_row(_nofcall,_obj, _rpn,_rac,_cg1,_cgpn,_cd1,_cdpn,_stt)
[email protected](_nofcall,_obj, _rpn,_rac,_cg1,_cgpn,_cd1,_cdpn,_stt)
@data[$indx] << s
$indx=$indx+1
end

after i call add row func
tbl.add_row($callno,tbl.obj[$index2],final_data[Enum::PN2],final_data[Enum::AC2],final_data[Enum::PN1],final_data[Enum::AC1],final_data[Enum::PN2],final_data[Enum::AC2],‘nACT’)

i try to add these datas like @data[0][0]=$callno
@data[0][1]=tbl.obj[$index2]
so i can reach the $callno of the fist row of the table easily but now
@data[0] carries all of the data i can not seperate. Cause of this i am
trying to split.
How can i do it?

Brk A. wrote:

Hi,

I have a array in a class. And i want to parse the data in the array’s
index.
I tried split method but it said private method ‘split’…

Best to show your code, so we don’t have to guess.

The error suggests you did something like:

foo = bar.split

where bar is not a String. Unfortunately, all objects inherit
Kernel#split, which is only there for legacy reasons (a nasty perlism
which splits $_)

But you should treat the ‘private method’ error as meaning ‘no such
method’

2010/4/7 Brk A. [email protected]:

Actually i try to fill a table

class Sorm_Table

def initialize # define table structure and array for data
@template =
Struct.new(:nofcall,:obj,:rpn,:rac,:cg1,:cgpn,:cd1,:cdpn,:stt)

There is no point in recreating this class over and over again. Rather
do

class Sorm_Table
Template =
Struct.new(:nofcall,:obj,:rpn,:rac,:cg1,:cgpn,:cd1,:cdpn,:stt)

@data=Array.new(1000){Array.new()}

There is an inconsistency in the way you fill @data: you initialize it
with a certain size and stuff Array instances in there and later you
stuff a single @data (or Template with my modification) instances in
every nested Array. At the moment your nested Arrays look completely
superfluous.

Note also that pre allocation of an Array is not necessary in Ruby -
Arrays can grow.

@obj=[‘10000’,‘10016’]

No idea what that is used for. As far as I can see there is no usage
of this variable. The fact though that you put strings in there that
look like integers is suspicious. If these are to be treated as ints
then make them ints.

end # initialize

def add_row(_nofcall,_obj, _rpn,_rac,_cg1,_cgpn,_cd1,_cdpn,_stt)
[email protected](_nofcall,_obj, _rpn,_rac,_cg1,_cgpn,_cd1,_cdpn,_stt)
@data[$indx] << s
$indx=$indx+1
end

Modifying a global variable from inside a class instance is a very bad
idea. Remember that you define a class in order to have multiple
instances of it. So your $indx should rather be @indx but more likely
it’s completely superfluous. You can simply append to the array.
Your #add_row could then look like this:

def add_row(*args)
@data << Template.new(*args)
self
end

after i call add row func
tbl.add_row($callno,tbl.obj[$index2],final_data[Enum::PN2],final_data[Enum::AC2],final_data[Enum::PN1],final_data[Enum::AC1],final_data[Enum::PN2],final_data[Enum::AC2],‘nACT’)

i try to add these datas like @data[0][0]=$callno
@data[0][1]=tbl.obj[$index2]

A global variable name with a number in there looks suspicious as
well. It is most likely that you want to store the index in
Sorm_Table instances or even just use @data.size.

so i can reach the $callno of the fist row of the table easily but now
@data[0] carries all of the data i can not seperate. Cause of this i am
trying to split.
How can i do it?

Frankly, the logic of your application is not fully clear to me. It
seems though that some more changes are in order. Can you provide a
description of what you want to do? You should at least provide an
explanation what $callno and all the other variables mean and what
types you stuff in there.

Kind regards

robert

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs