2013-08-26 3 views
-1

Я вытягивать следующую строку из файла CSV, из ячейки A1 и сохранение его в качестве переменной:Читать струна как переменная RUBY

#{collector_id} 

Таким образом, ячейка A1 читает #{collector_id}, и мой код по существу делает это :

test = #excel_cell_A1 

Однако, если я тогда сделать это:

puts test 

я получаю это:

#{collector_id} 

мне нужно #{collector_id} читать как фактические переменную collector_id, а не код, который я использую для вызова переменных. Это возможно?

Спасибо за помощь. Я использую ruby ​​1.9.3.

+1

Это не имеет большого смысла. Нам нужно увидеть фактический код, который, по крайней мере, будет принят интерпретатором Ruby. См. Http://sscce.org/ –

ответ

1

Вы можете использовать sub или gsub для замены ожидаемых входных значений:

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), который затем будет оцениваться как транскрипция кода eval

+1

НИКОГДА НЕ ОБЯЗАТЕЛЬНО использовать 'eval' для предоставленных пользователем данных. Вы только что создали хорошую уязвимость удаленного выполнения кода (что относится к числу наихудших проблем безопасности). –

+0

Я согласен с проблемой безопасности. К счастью, для моего конкретного случая моя команда будет создавать файл csv, из которого я выхожу. Это, в основном, файл содержимого для электронных писем. – Luigi

Смежные вопросы