2010-04-26 38 views
0

我目前正試圖弄清楚如何將索引範圍作爲一個字符串傳遞,但到目前爲止一直沒有任何運氣。這裏是什麼,我試圖做一個例子:傳遞指數範圍

pos = %w{1 2..4} 
values = %{x cat} 
test_string = "This is a test with a string." 

test_string[pos[1]] = values[1] 

我知道我可以只把它分解與拆分或類似的東西,但我真的想知道如何直接通過這個值。我認爲我可以用eval來完成它,但到目前爲止,我一直沒有運氣。任何幫助將不勝感激,謝謝!

+0

如果您需要的語法工作,您的示例中預期的輸出是什麼? – 2010-04-26 18:19:28

+0

如果你解決了這個問題,那麼刪除這個問題或者至少在說明中記下這個問題。 – Tom 2011-03-20 05:23:56

回答

0

不知道爲什麼你會想這樣做,這樣一來,但是你可以這樣做:

%Q{1 #{(2..4).to_a.join(' ')}}.split 

注意:如果your're試圖操縱你想pos[0].chr測試字符串(數組從0開始和.chr將得到ASCII值)。

編輯:必須有更好的方法來實現你想要做的事情,給我們一些你需要的信息。像下面這樣可能就足夠了:

[1] + (2..4).to_a 

EDIT2:隨着信息你給試試下面的出

pos = [15..22, 165..172] #array of ranges 
dates = %w{20100426 20100430} 
pos.each_with_index {|range, i| 
    test_string[range] = dates[i] 
} 
+0

我正在使用固定寬度的文件。每個職位所包含的信息都有一些固定的特徵。我從配置文件中提取位置,並將它們對齊到同一索引位置的數組中,並將其替換爲需要替換的位置。 – 2010-04-26 18:31:04

+0

你可以給我們一個瘦身的例子來處理,就像一個示例配置文件和替換文件,我想一堆gsubs可能會更好這個 – MatthewFord 2010-04-26 18:34:44

+0

不幸的是,配置文件包含我不能給出的信息。但是一個例子是,在固定寬度文件的每一行上都有許多年,總是處於相同的位置。我會做什麼來更新配置文件的年份是將它們放入兩個數組中,並用這種方式替換值。 例如。 position =%w {15..22 165..172} dates =%w {20100426 20100430} 我想這樣做,所以我可以在不更改代碼的情況下輕鬆更改配置文件中的特徵。 – 2010-04-26 18:41:01

0

這裏的問題是什麼%被W¯¯轉換爲字符串原樣是。在控制檯中試一試,你會看到:

>> %w{1 2..4} 
=> ["1", "2..4"] 

它在轉換它之前不擴展範圍。

0

你在做什麼,在這裏?您嘗試使用的索引是字符串,不是整數,因此無效。
如果你可以解釋你打算去的地方,可能我們可以建議一條替代路線?