如何在julia1.1.0中读取文件时使用IOBuffer?

时间:2019-04-24 02:50:20

标签: file io julia

我是Julia的新人!请问,如果事情是琐碎的或愚蠢的! 我正在尝试在readlines.jl中使用以下代码读取文件:

#! /opt/julia/julia-1.1.0/bin/Julia
function readlines(file_path::String)
    io = IOBuffer()
    global file
    try
        file = open(file_path)
        l0 = readline(file)
        for line in eachline(file)
           println(io, line)
        end
    catch err
        println("Error: $err")
    finally
        close(file)
    end
end
readlines("/opt/julia/julia-1.1.0/LICENSE.md")

正在执行,$ / home / julia / readlines.jl不会打印文件的内容。

请帮助我在文件读取中使用IOBuffer!

1 个答案:

答案 0 :(得分:1)

代码中的问题是您没有从函数返回io。这是一些代码清除的修复程序(特别注意,readlines函数是在Base中定义的,因此最好使用另一个函数名):

function readlines2(file_path::String)
    io = IOBuffer()
    open(file_path) do file
        l0 = readline(file)
        for line in eachline(file)
            println(io, line)
        end
    end
    io
end

现在,您可以运行它来获取IOBuffer作为返回值。请注意,通常您会希望将此IOBuffer的内容转换为字符串,可以使用take!String这样的函数来实现:

io = readlines2("your_file.ext")
str = String(take!(io))

现在str包含读入的数据作为字符串。

最后,您可能更喜欢使用内置的readlines函数,只删除返回向量的第一项,然后join保留其余值,如下所示:

join(readlines("your_file.ext", keep=true)[2:end])

以获得相同的结果(这可能会慢一些,但是更简单)。