2012-04-03 8 views
0

Ich habe eine Datei mit substituierten Variablen (#{...}) und ich möchte es in eine andere Datei kopieren, mit den Variablen durch ihre Werte ersetzt.Kopieren Sie eine Datei mit den Variablen

Hier ist, was ich habe

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

Aber das ist offenbar nicht der richtige Weg, das zu tun. Irgendein Vorschlag ?

Antwort

3

Anstelle von #{...} in Ihrer Datei verwenden Sie ERB-Dateien.

+1

Ist das wirklich notwendig? Scheint ein Overkill zu sein ... –

+0

IMHO ist es eine bessere Option, als jede Zeile mit '# {}' zu bewerten. – Hauleth

1

Nein, das ist nicht der richtige Weg. Sie können nicht erwarten, dass Ruby irgendwelche #{} magischen Daten irgendwo in Ihren Daten als variable Interpolation interpretiert. Dies würde (neben anderen schrecklichen Nebenwirkungen) massive Sicherheitsprobleme überall ergeben.

Wenn Sie Daten zu interpolieren, in einen String möchten, müssen Sie zu eval es brauchen, die ihre eigenen Sicherheitsrisiken hat:

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 

Es ist nicht klar, welche Variablen, die Sie in die Interpolation sind versuchen, Ihre Daten. Dies ist mit ziemlicher Sicherheit der falsche Weg, um das zu tun, was immer Sie tun.

+0

OK. Ich werde dann mit ERB gehen. –

1

Ok, Sie haben eine Datei tmp.file das hat den folgenden Text genannt haben:

This is #{foobar}! 

Dann können Sie einfach wie folgt vor:

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

Und würde Ihr Ergebnis sein This is Sparta!

Aber wie bereits vorgeschlagen, sollten Sie mit einer echten Vorlagenlösung wie ERB gehen. Dann würden Sie Ihre Dateien wie Ansichten in Rails verwenden. Anstatt This is #{foobar}. hätten Sie This is <%= foobar %>.

Verwandte Themen