Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:如何搜索子字符串,并在其中增加一个值?_Ruby - Fatal编程技术网

Ruby:如何搜索子字符串,并在其中增加一个值?

Ruby:如何搜索子字符串,并在其中增加一个值?,ruby,Ruby,我试图通过查找以下字符串来更改文件: <aspect name=\"lineNumber\"><![CDATA[{CLONEINCR}]]> 但这似乎永远都在继续——我是否在某处有一个无限循环 注意:我的文本文件长度为533952行。如果您想用行号替换CLONEINCR,这就是上面代码的目的,那么这将起作用。否则,请参见Borodin的答案 output = File.readlines('input3400.txt').map.with_index do |line,

我试图通过查找以下字符串来更改文件:

<aspect name=\"lineNumber\"><![CDATA[{CLONEINCR}]]>
但这似乎永远都在继续——我是否在某处有一个无限循环


注意:我的文本文件长度为533952行。

如果您想用行号替换CLONEINCR,这就是上面代码的目的,那么这将起作用。否则,请参见Borodin的答案

output = File.readlines('input3400.txt').map.with_index do |line, i|
  line.gsub "<aspect name=\"lineNumber\"><![CDATA[{CLONEINCR}]]></aspect>",
    "<aspect name=\"lineNumber\"><![CDATA[#{i}]]></aspect>"
end
File.write('input3400.txt', output.join(''))
output=File.readlines('input3400.txt').map.with_index do | line,i|
第.gsub行“,
""
结束
File.write('input3400.txt',output.join(“”))

另外,您应该注意,当您将这些行读入
目录
时,您正在创建一个与文件不同的
字符串
。您不能直接对该文件进行操作。相反,您必须创建一个包含所需内容的新
字符串,然后覆盖原始文件。

您重复连接
内容的所有元素,进行替换,并丢弃结果。每行只发生一次,难怪要花很长时间

最简单的解决方案是将整个文件读入一个字符串中,并在该字符串上使用
gsub
修改内容。在您的示例中,您正在将(基于零的)文件行号插入CDATA。我怀疑这是个错误

此代码将所有出现的
替换为
等,并为找到的每个匹配CDATA增加数字。修改后的文件将发送到STDOUT。希望这就是你需要的

File.open('input3400.txt' , 'r') do |f|
  i = 0
  contents = f.read.gsub('<![CDATA[{CLONEINCR}]]>') { |m|
    m.sub('{CLONEINCR}', (i += 1).to_s)
  }
  puts contents
end
File.open('input3400.txt','r')do|f|
i=0
contents=f.read.gsub(''){m|
m、 sub({CLONEINCR}',(i+=1.to_s)
}
放置内容
结束

不清楚您试图执行的操作,但循环将在533952次迭代后完成。我正在尝试搜索字符串
,并用递增的数字替换
{CLONEINCR}
。@ctote是否尝试更改文件?或者将结果存储在变量中?你发布的代码也不行。稍微解释一下就好了。谢谢你的回答,它很有效。我想知道为什么我的没有(除了我没有把数据保存在任何地方之外)?@CTOT:嗯,就是这样。这还不够吗?你一次又一次地创建一个字符串,修改它,然后扔掉它。这没什么用处。“如果这个答案对你最有帮助,请考虑把它给你。”这将有助于找到你的问题的其他人快速看到你认为最好的答案。