以下代码是xml文件中的一行:
我该如何使用Ruby替换2个标签之间的数字为另一个数字?
<appId>455360226</appId>
我该如何使用Ruby替换2个标签之间的数字为另一个数字?
没有办法一步修改文件内容(至少我不知道有这种方法,因为这样会改变文件的大小)。 你需要读取文件,将修改后的文本存储在另一个文件中。
replace="100"
infile = "xmlfile_in"
outfile = "xmlfile_out"
File.open(outfile, 'w') do |out|
out << File.open(infile).read.gsub(/<appId>\d+<\/appId>/, "<appId>#{replace}</appId>")
end
或者您可以将文件内容读取到内存中,然后用修改后的内容覆盖文件:
replace="100"
filename = "xmlfile_in"
outdata = File.read(filename).gsub(/<appId>\d+<\/appId>/, "<appId>#{replace}</appId>")
File.open(filename, 'w') do |out|
out << outdata
end
(希望它能够运行,代码未经测试)
IO.write(filepath, File.open(filepath) {|f| f.read.gsub(//<appId>\d+<\/appId>/, "<appId>42</appId>"/)})
IO.write
默认情况下会截断给定的文件,因此如果您先读取文本,执行正则表达式 String.gsub
并使用块模式的 File.open
返回结果字符串,它将一举替换文件内容。
我喜欢这种写法,但当然也可以分多行写:
IO.write(filepath, File.open(filepath) do |f|
f.read.gsub(//<appId>\d+<\/appId>/, "<appId>42</appId>"/)
end
)
replace="100"
File.open("xmlfile").each do |line|
if line[/<appId>/ ]
line.sub!(/<appId>\d+<\/appId>/, "<appId>#{replace}</appId>")
end
puts line
end
>
将其保存到另一个文件中。 - ghostdog74