我正在 Lua 中编写一个简短的脚本来复制搜索/替换功能。目标是输入搜索词和替换词,它将梳理给定扩展名的所有文件(尚未输入确定)并将搜索词替换为替换词。
一切似乎都在做它应该做的事情,除了文件实际上并没有被写入。我的 Lua 解释器(我自己在 Pelles-C 中编译)不会抛出任何错误或异常退出;脚本完成就像它工作一样。
起初我没有 i:flush(),但我在读到它应该将任何写入的数据保存到文件后添加它(请参阅LUA 文档)。它没有改变任何东西,文件仍然没有被写入。
我认为这可能与我打开文件进行编辑的方式有关,因为“w”选项有效(但会覆盖我的测试文件中的所有内容)。
资源:
io.write("Enter your search term:")
term = io.read()
io.write("Enter your replace term:")
replacement = io.read()
io.stdin:read()
t = {}
for z in io.popen('dir /b /a-d'):lines() do
if string.match(string.lower(z), "%.txt$") then
print(z)
table.insert(t, z)
end
end
print("Second loop")
for _, w in pairs(t) do
print(w)
i = io.open(w, "r+")
print(i)
--i:seek("set", 6)
--i:write("cheese")
--i:flush()
for y in i:lines() do
print(y)
p, count = string.gsub(y, term, replacement, 1)
print(p)
i:write(p)
i:flush()
io.stdin:read()
end
i:close()
end
这是我得到的输出(这是我想要发生的),但实际上并没有被写入文件:
有一次它将输出写入文件,但它只输出到一个文件,然后写入我的脚本崩溃并显示以下消息:No error
. 行号在该for y in i:lines() do
行,但我不知道为什么它会在那里中断。我注意到file:lines()
如果文件本身没有任何内容并给出奇怪/乱码错误,则会中断,但我的文本文件中有东西。
编辑1
我尝试在我的 for 循环中这样做:
for y in i:lines() do
print(y)
p, count = string.gsub(y, term, replacement, 1)
print(p)
i:write(p)
i:seek("set", 3) --New
i:write("TESTESTTEST") --New
i:flush()
io.stdin:read()
end
为了看看我是否可以强制它写常规文本。它确实如此,但随后它崩溃No error
并且仍然不写入替换字符串(只是 TESTESTTEST)。我不知道问题可能是什么。