From: Joe Date: 2007-12-15T09:44:01+09:00 Subject: Re: String splitting problem hey, I didn't test this too well, but it works for your string. I doubt it's the most clever way to do it, but it should get the job done. stack = Array.new input = "z.methodx(z.methody(),z.methodz(z.methodx))" last = 0 count = 0 while last < input.length cur = input.index(/[\)\(,]/, last) if cur then b = input[cur,1] if (/[\(,]/.match(input[last-1,1]) && /[\),]/.match(b)) && cur-last > 1 then count += 1 puts count.to_s + " " + input[last, cur-last] stack[-1] += count.to_s end case b when '(' stack.push(input[last, cur-last] + "(") when ')' count += 1 puts count.to_s + " " + stack.pop + ")" stack[-1] += count.to_s when ',' stack[-1] += ',' end last = cur+1 end end Joe On Dec 14, 2007 9:03 AM, Saladin Mundi wrote: > hey guys > > I'm trying to split an string (which contains various method calls). > The result of the splitting of the string should be an array (or > something like that) which contains a sequence which an interpreter > would have called the methods. > Example > > class X > def test(input) > ... > end > end > > x.new.test("z.methodx(z.methody(),z.methodz(z.methodx))") > > > If I pass "z.methodx(z.methody(),z.methodz(z.methodx))" there should be > afterwards an arry like this: > > [0] -> var1 = z.methody() > [1] -> var2 = z.methodx > [2] -> var3 = z.methodz(var2) > [3] -> z.methodx(var1,var3) > > so the call(s on different methods) given by an input string shall be > extracted into the real execution sequence like an interpreter would > excecute this string it. > > I hope you can help me with my problem. > -- > Posted via http://www.ruby-forum.com/. > >