2010-06-03 33 views
9

Tôi có ví dụ sau:làm thế nào để sử dụng ERB đến tập tin đầu ra sau khi ràng buộc

require 'erb' 

names = [] 
names.push({ 'first' => "Jack", 'last' => "Herrington" }) 
names.push({ 'first' => "LoriLi", 'last' => "Herrington" }) 
names.push({ 'first' => "Megan", 'last' => "Herrington" }) 

myname = "John Smith" 

File.open(ARGV[0]) { |fh| 

erb = ERB.new(fh.read) 
print erb.result(binding) 

kèm theo

text.txt 
<% name = "Jack" %> 
Hello <%= name %> 


<% names.each { |name| %> 
Hello <%= name[ 'first' ] %> <%= name[ 'last' ] %> 
<% } %> 

hi, my name is <%= myname %> 

} 

nó in độc đáo vào màn hình.

cách đơn giản nhất để xuất sang tệp khác: "text2.txt" thay vì màn hình là gì?

Tôi biết điều này thực sự là một miếng bánh cho hầu hết các bạn có kinh nghiệm ruby ​​thạc sĩ, nhưng đối với tôi, những người vừa mới bắt đầu một Ruby từ Novice ... nó là thách thức bây giờ ... nhưng tôi muốn sử dụng mã cho mục đích cuộc sống thực ...

cảm ơn bạn !!!

Trả lời

20

Lưu ý rằng ERB không in ấn này - bạn đang có.

print erb.result(binding) 

Hãy thay đổi điều đó. Chúng ta sẽ mở trình xử lý tệp, trong chế độ w để viết và ghi kết quả ERB vào tệp.

File.open('text2.txt', 'w') do |f| 
    f.write erb.result(binding) 
end 

File.open('text2.txt', 'w') mở file text2.txt trong w chế độ nghi thức, và vượt qua đối tượng tập tin vào khối. f.write xuất kết quả đối số của nó vào tệp. Trong một số trường hợp, bạn có thể cần phải gọi f.close để cho phép các quy trình khác trên máy tính của bạn truy cập tệp, nhưng vì chúng tôi đã sử dụng ký hiệu khối ở đây thay vào đó, tệp sẽ tự động bị đóng ở cuối khối.

Mã chưa được kiểm tra - hãy cho tôi biết nếu bạn gặp lỗi. Chúc may mắn trên hành trình mã hóa của bạn!

+0

thực sự là giải thích chi tiết, tốt đẹp! cảm ơn bạn! – john

Các vấn đề liên quan