在 File.write 中使用变量

Use variable in File.write

我一直在使用以下方法将内容附加到文件。

File.write(file, 'something', mode: 'a')  # In case of plain text
File.write(file, myvar, mode: 'a')        # In case of variables

我有以下三个要求。

  1. 同时使用纯文本和变量

    File.write(file, mytext1=var1, mode: 'a') 
    
  2. 使用纯文本和变量的组合

    File.write(file, mytext1=var1, mytext2=var2, mode: 'a')
    
  3. 同时使用多个变量

    File.write(file, var1, var2, var3, mode: 'a')
    

这些代码无效。

以上3点中,mytext1和mytext2是明文,可以是DNS1和DNS2。 var1、var2 和 var3 是变量,比如 192.168.1.10、192.168.1.11 和 192.168.1.12。

我可以通过删除行、添加字符串并用 gsub 替换字符串(其中变量有效)来实现此目的,但我想知道是否有更短的方法来使用 File.write.

您可以使用 IO#puts 作为

File.open(file_path, 'a') do |file|
  file.puts [var1, "your text", var2] # or puts var1, "your text", var2
end

#puts 的文档是:

Writes the given objects to ios as with IO#print. Writes a record separator (typically a newline) after any that do not already end with a newline sequence. If called with an array argument, writes each element on a new line. If called without arguments, outputs a single record separator.

或者,您可以使用 File::write:

content = [var1, var2, var3].join("\n")
File.write(file, content, mode: 'a')
content = ["mytext1=#{var1}", "mytext2=#{var2}"].join("\n")
File.write(file, content, mode: 'a')

在 Arup Rakshit 的帮助下,我找到了两个简单的解决方案。

# using puts
File.open(file, 'a') do |j|
  j.puts "DNS1=\"#{ip}\""; 
end

# Using File.write
content = ("#{var1}\t#{var2}\t#{var3}\n")
File.write(file, content, mode: 'a')