Скопируйте файл с подставленными переменными - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть файл, содержащий замещенные переменные (#{...}), и я хотел бы скопировать его в другой файл с заменой переменных на их значения.

Вот что у меня есть

file = File.open(@batch_file_name, "w+")
script=File.open("/runBatch.script","r")
script.each do |line|
  file.puts(line)
end

Но, видимо, это не правильный способ сделать это.Любое предложение?

Ответы [ 3 ]

3 голосов
/ 03 апреля 2012

Вместо #{...} в вашем файле используйте файлы ERB.

1 голос
/ 03 апреля 2012

Хорошо, допустим, у вас есть файл с именем tmp.file, который имеет следующий текст:

This is #{foobar}!

Тогда вы можете легко сделать следующее:

str = ""
File.open("tmp.file", "r") do |f|
  str = f.read
end
abc = "Sparta"
puts eval('"' + str + '"')

И ваш результат будет This is Sparta!

Но, как уже предлагалось, вы должны использовать реальное шаблонное решение, такое как ERB. Тогда вы будете использовать ваши файлы как представления в Rails. Вместо This is #{foobar}. вы получите This is <%= foobar %>.

1 голос
/ 03 апреля 2012

Нет, это не правильный способ сделать это.Вы не можете ожидать, что Ruby будет магически интерпретировать любую #{}, с которой он встречается где-либо в ваших данных, как переменную интерполяцию.Это (среди других ужасных побочных эффектов) приведет к массовым проблемам с безопасностью повсюду.

Если вы хотите интерполировать данные в строку, вам нужно eval, которая имеет свою собственнуюриски безопасности:

str = 'The value of x is #{x}'

puts str # The value of x is #{x}

x = "123"

puts eval "\"#{str}\"" # Thje value of x is 123

Непонятно , какие переменные вы пытаетесь вставить в свои данные.Это почти наверняка неправильный способ делать то, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...