2010-04-05 70 views
0

問題(從文件中讀取):奇怪的紅寶石串選擇

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

通過以下相似(全部爲同一文件)字符串的大名單檢索:

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

而且功能代碼:

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

如到目前爲止,這工作得很好,但瓦特我想要做的是在「createVehicle」之後選擇數組,下面的(我認爲)應該可以工作。

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

get_string相同get_stringR,除了它使用的圖案的第一次出現兩次,而然後將第一和最後出現。

輸出應該是:

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

通過「放」給出相反,它是以下,:

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

有的40個字符過去的點上,應該有檢索,這是很奇怪的。 .. 第二個注意事項,使用都get_stringget_stringR產生的完全相同的結果與給定的參數。

我再決定下面的添加到我的get_string代碼:

 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

它按預期工作(對於文件中的每一「塊」,即使該陣列後的字符串不以任何相同方式),但顯然是不正確的:)。

回答

2

你想要r = a [b..c]而不是r = a [b,c]。

不同之處在於:b..c =從b開始,轉到c,而b,c =從b開始,向右移動c個字符。

編輯:你不必/也不應該逃避[和],因爲你使用的是字符串而不是正則表達式。另外,你必須考慮結尾的長度(「];」),否則你會截斷末尾的一部分。

​​
+0

謝謝隊友!爲什麼c.size?它不應該是一個大小?如果是這樣......爲什麼? – dcousens 2010-04-05 11:58:22

+0

如果我們有字符串「abcde」和分隔符「a」和「德」,那麼字符串#指數調用會導致以下範圍: ABCDE ^ -^ 這是因爲字符串#指數收益率比賽的起始位置。 所以我們必須在最後加上結束分隔符的長度(減1)來得到整個子串。 編輯:meh,在評論中沒有新行/格式化?我希望你明白我的意思 – 2010-04-05 12:16:04

+0

是的,我做了,感謝您的幫助! – dcousens 2010-04-05 14:10:03