Ruby:n`[] =':字符串不匹配(IndexError)

时间:2013-10-21 12:28:15

标签: ruby

我正在尝试逐行遍历文件,替换子字符串。我有一个工作脚本 - 但如果有人可以帮助我理解为什么这个(我原来的)脚本不起作用,我会很感激

File.open('input3400.txt', 'rb') do |f|
  f.each_line do |i|
    File.write('input3400.txt', i["<aspect name="] = "hi")
  end
end

基本上,我想在此文件中搜索<aspect name=的所有实例,并将其替换为hi。我跑的时候收到这个输出:

  

`[] =':字符串不匹配(IndexError)

     

`{top(required)}'

中的阻止(2级)      

`each_line'

     

`阻止{top(required)}'

3 个答案:

答案 0 :(得分:3)

它不起作用,因为如果其中一行与i["<aspect name="] = "hi"模式不匹配,IndexError将引发<aspect name=例外。

答案 1 :(得分:1)

首先,你有错误: i["<aspect name="] = "hi" 这会尝试将"<aspect name="替换为"hi" ,但是当"<aspect name="不是所需字符串的子字符串时,会引发错误。

然后,你必须仔细看看这一行: File.write('input3400.txt', i["<aspect name="] = "hi")

为什么赋值作为第二个参数传递? Ruby上的赋值的返回值是它的右侧,这是正确的,但为什么在这里使用赋值呢?

最后,File.write('input3400.txt', i["<aspect name="] = "hi") - 它对你的current_line(i)一无所知。您想在哪里File.write

希望有所帮助!

答案 2 :(得分:0)

您有几个错误,第一个错误是变量 i 是一个字符串,其中方法 [] 正在尝试访问索引{{1} }它不存在,第二个错误是您无法更新为打开而打开的文件,您必须将数据放在临时位置,然后覆盖原始文件。

尝试使用此代码:

<aspect name=