Strange Ruby String Selection

Posted by Daniel on Stack Overflow See other posts from Stack Overflow or by Daniel
Published on 2010-04-05T11:18:14Z Indexed on 2010/04/05 11:23 UTC
Read the original article Hit count: 375

Filed under:
|
|
|
|

The string in question (read from a file):

if (true) then
{
  _this = createVehicle ["Land_hut10", [6226.8901, 986.091, 4.5776367e-005], [], 0, "CAN_COLLIDE"];
  _vehicle_10 = _this;
  _this setDir -2.109278;
};

Retrieved from a large list of similar (all same file) strings via the following:

get_stringR(string,"if","};")

And the function code:

def get_stringR(a,b,c)
    b = a.index(b)
    b ||= 0
    c = a.rindex(c)
    c ||= b
    r = a[b,c]
    return r
end

As so far, this works fine, but what I wanted to do is select the array after "createVehicle", the following (I thought) should work.

newstring = get_string(myString,"\[","\];")

Note get_string is the same as get_stringR, except it uses the first occurrence of the pattern both times, rather then the first and last occurrence.

The output should have been:

["Land_hut10", [6226.8901, 986.091, 4.5776367e-005], [], 0, "CAN_COLLIDE"];

Instead it was the below, given via 'puts':

["Land_hut10", [6226.8901, 986.091, 4.5776367e-005], [], 0, "CAN_COLLIDE"];
  _vehicle_10 = _this;
  _this setDir

Some 40 characters past the point it should have retrieve, which was very strange... Second note, using both get_string and get_stringR produced the exact same result with the parameters given.

I then decided to add the following to my get_string code:

   b = a.index(b)
    b ||= 0
    c = a.index(c)
    c ||= b
    if c > 40 then
        c -= 40
    end
    r = a[b,c]
    return r

And it works as expected (for every 'block' in the file, even though the strings after that array are not identical in any way), but something obviously isn't right :).

© Stack Overflow or respective owner

Related posts about ruby

Related posts about strings