为什么不用io:write()写入输出文件?

时间:2013-03-06 20:39:37

标签: file-io lua

我正在Lua编写一个简短的脚本来复制搜索/替换功能。目标是输入搜索词和替换词,它将梳理给定扩展名的所有文件(尚未输入确定),并将“搜索词”替换为“替换词”。

除了文件实际上没有写入之外,其他所有内容似乎都按照预期执行。我的Lua翻译(由我自己在Pelles-C编译)不会抛出任何错误或退出异常;脚本完成就像它工作一样。

起初我没有i:flush(),但我在阅读之后添加了它,它应该将任何写入的数据保存到文件中(参见LUA docs)。它没有改变任何东西,文件仍未写入。

认为它可能与我打开文件进行编辑有关,因为“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

这是我得到的输出(这是我想要发生的事情),但实际上并没有写入文件:

Misleading output

有一段时间它将输出写入文件,但它只输出到一个文件,然后编写我的脚本崩溃的消息:No error。行号位于for y in i:lines() do行,但我不知道为什么它会在那里打破。我注意到file:lines()如果文件本身没有任何内容就会中断并发出奇怪/乱码错误,但我的文本文件中有些内容。

EDIT1

我尝试在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)。我不知道问题是什么。

1 个答案:

答案 0 :(得分:2)

我猜,在遍历其行时,无法写入文件

for y in i:lines() do
   i:write(p)
   i:flush()
end