2013-03-06 112 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