Ruby:如何替换文件中的文本?

Ruby:如何替换文件中的文本?,ruby,regex,replace,Ruby,Regex,Replace,以下代码是xml文件中的一行: <appId>455360226</appId> 455360226 如何使用ruby将两个标记之间的数字替换为另一个数字?正确的方法是使用XML解析工具,例如 你确实用正则表达式标记了你的问题。如果你真的要用正则表达式来做的话 s = "Blah blah <appId>455360226</appId> blah" s.sub(/<appId>\d+<\/appId>/, "<a

以下代码是xml文件中的一行:

<appId>455360226</appId>
455360226

如何使用ruby将两个标记之间的数字替换为另一个数字?

正确的方法是使用XML解析工具,例如

你确实用正则表达式标记了你的问题。如果你真的要用正则表达式来做的话

s = "Blah blah <appId>455360226</appId> blah"
s.sub(/<appId>\d+<\/appId>/, "<appId>42</appId>")
s=“诸如此类。

replace=“100”
File.open(“xmlfile”)。每个do |行|
如果行[//]
行.sub!(/\d+/,“#{replace}”)
结束
放线
结束

不可能在一个步骤中修改文件内容(至少我不知道,当文件大小改变时)。 您必须读取该文件并将修改后的文本存储在另一个文件中

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”
infle=“xmlfile\u in”
outfile=“xmlfile\u out”
文件打开(输出文件,'w')执行|输出|

out您可以这样在一行中完成:

IO.write(filepath, File.open(filepath) {|f| f.read.gsub(//<appId>\d+<\/appId>/, "<appId>42</appId>"/)})

这看起来像是在irb中工作,但是如果我打开实际的文件,它看起来没有任何变化。这是它的全部代码吗?还是我必须保存一些东西?当你执行脚本时,使用重定向操作符
保存到另一个文件。嘿,如果新数据比旧数据短,旧数据的结尾将被删除“我将在您的文件中留下一个损坏的文件。@medmonds No.我的解决方案重写了整个文件。您描述的问题是,为什么我至少写了一个我知道的文件,而文件大小会更改。如果文件大小更改,则文件会损坏。这就是为什么一步都没有解决方案。”。
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(filepath, File.open(filepath) do |f|
    f.read.gsub(//<appId>\d+<\/appId>/, "<appId>42</appId>"/)
  end
)