2

我在 Julia 中打开了一个文件:

output_file = open(path_to_file, "a")

我想砍掉文件的最后六个字符。我以为我可以用chopie 做到这一点,chop(output_file; tail = 6)但它似乎只适用于Stringtype 而不是IOStream. 我应该怎么做?

julia> rbothpoly(0, 1, [5], 2, 30, "html")
ERROR: MethodError: no method matching chop(::IOStream; tail=6)
Closest candidates are:
  chop(::AbstractString; head, tail) at strings/util.jl:164
Stacktrace:
 [1]
 [...] ERROR STACKTRACE [...]
 [3] top-level scope at REPL[37]:1

我是 IOStream 的新手,今天才发现它们。

4

2 回答 2

2

我在这里找到了我想要的东西,它适用于我的问题:

            (tmppath, tmpio) = mktemp()
            open(output_filename, "r") do io
                for line in eachline(io, keep=true) # keep so the new line isn't chomped
                    if line == "</pre>\n"
                        line = "\n"
                    end
                    write(tmpio, line)
                end
            end
            close(tmpio)
            mv(tmppath, output_filename, force=true)
            chmod(output_filename, 0o777)
            close(output_file)

也许我的问题可以被标记为重复!

于 2021-12-14T18:31:36.830 回答
2

在您的情况下,因为您正在对文件末尾进行一次写入而不进行任何进一步的读取或其他操作,您也可以像这样就地编辑文件:

function choppre(fname = "data/endinpre.html")
  linetodelete = "</pre>\n"
  linelength = length(linetodelete)
  open(fname, "r+") do f
    readuntil(f, linetodelete)
    seek(f, position(f) - linelength)
    write(f, " "^linelength)
  end
end

这会用等长的空格字符覆盖我们希望截断的文本。我不确定是否有办法简单地删除该行(而不是用 覆盖它' ')。

于 2021-12-14T19:40:01.593 回答