検索/置換機能を複製するために、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
これは私が取得する出力です(これは私がやりたいことです)が、実際にはファイルに書き込まれていません:
ファイルに出力を書き込んだことが1回ありましたが、1つのファイルにしか出力されなかったため、スクリプトを書き込むと次のメッセージが表示されてクラッシュしました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のみ)。何が問題なのかわかりません。