首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么io:写()写入输出文件呢?

为什么io:写()写入输出文件呢?
EN

Stack Overflow用户
提问于 2013-03-06 20:39:36
回答 1查看 3.9K关注 0票数 0

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

所有的事情似乎都在做它应该做的事情,除了文件实际上不是写到的。我的Lua解释器(由我在Pelles-C中编译)不会抛出任何错误或异常退出;脚本完成时就像它工作一样。

起初,我没有i:flush(),但是我在阅读之后添加了它,它应该将任何书面数据保存到文件中(请参阅LUA博士)。它没有改变任何东西,而且文件仍然没有被写入。

我认为这可能与我打开文件来编辑它的方式有关,因为"w“选项可以工作(但是覆盖了测试文件中的所有内容)。

资料来源:

代码语言:javascript
复制
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循环中尝试这样做:

代码语言:javascript
复制
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)。我不知道会有什么问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-06 20:54:23

我想,一个人不能一边写一边遍历它的行

代码语言:javascript
复制
for y in i:lines() do
   i:write(p)
   i:flush()
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15257527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档