2013-03-06 110 views
0

我在Lua中编写了一个简短的脚本来复制搜索/替换功能。目标是输入搜索词和替换词,它将梳理给定扩展的所有文件(而不是输入确定的),并用替换词替换搜索词。为什么io:write()写入输出文件?

一切似乎都应该做它应该做的,除了文件没有实际写入。我的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循环做到这一点:为了看看我是否能迫使它写普通的文本

。它确实但它然后与No error崩溃,仍然不写入替换字符串(只是TESTESTTEST)。我不知道问题可能是什么。

回答

2

我想,一个人不能写在遍历其线条

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

我认为你是对到文件。将i:write(p)行移出循环似乎让它写入文件。除非发生其他事情,否则我会将其标记为正确。谢谢。 – Hydronium 2013-03-06 21:27:50