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