我在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
這是輸出我得到的(這是我想向發生),但在現實中沒有被寫入文件:
有一次它將輸出寫入文件,但它只輸出到一個文件,然後編寫我的腳本與消息崩潰:No error
。行號在for y in i:lines() do
行,但我不知道爲什麼它打破了那裏。我注意到file:lines()
會中斷,如果文件本身沒有任何內容,並給出奇怪/亂碼錯誤,但我的文本文件中有東西。
EDIT1
我想在我的for循環做到這一點:爲了看看我是否能迫使它寫普通的文本
。它確實但它然後與No error
崩潰,仍然不寫入替換字符串(只是TESTESTTEST)。我不知道問題可能是什麼。
我認爲你是對到文件。將i:write(p)行移出循環似乎讓它寫入文件。除非發生其他事情,否則我會將其標記爲正確。謝謝。 – Hydronium 2013-03-06 21:27:50