2013-08-26 44 views
-1

我從一個CSV文件中提取下面的字符串,從單元格A1,並把它作爲一個變量:閱讀字符串變量RUBY

#{collector_id} 

因此,單元格A1讀取#{collector_id},和我的代碼基本上做到這一點:

test = #excel_cell_A1 

但是,如果我再這樣做:

puts test 

我得到這個:

#{collector_id} 

我需要#{collector_id}改爲實際變量collector_id,而不是代碼,我使用調用變量。那可能嗎?

感謝您的幫助。我正在使用紅寶石1.9.3。

+1

這沒什麼意義。我們需要看到至少被Ruby解釋器接受的實際代碼。請參閱http://sscce.org/ –

回答

1

進行評估,您可以使用subgsub以替換預期輸入值:

collector_id = "foo" 
test = '#{collector_id}' 
test.sub("\#{collector_id}", "#{collector_id}") #=> "foo" 

我會避免使用eval(或至少理智地檢查您正在運行的程序)以降低運行從CSV文件接收的任意代碼的風險。

+0

很好的建議。我認爲這足夠了,我可以避免使用'eval'作爲最佳實踐。 – Luigi

0

試試這個:

test_to_s = eval("\"#{ test }\"") 
puts test_to_s 

%q["#{ test }"]將建成串"#{collector_id}"(雙引號是字符串的一部分,"#{collector_id}".length == 17),然後將作爲Ruby代碼通過eval

+1

永遠不要在用戶提供的數據上使用'eval'。您剛剛創建了一個很好的遠程代碼執行漏洞(這是最糟糕的安全問題之一)。 –

+0

我同意安全問題 - 幸運的是,對於我的特殊情況,我的團隊將創建我從中提取的csv文件。它基本上是電子郵件的內容文件。 – Luigi