Как использовать IOBuffer с чтением файла в julia1.1.0? - PullRequest
0 голосов
/ 24 апреля 2019

Я новичок в Юлии!Извините, если это тривиально или глупо!Я пытаюсь прочитать файл со следующим кодом в 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 Ответ

1 голос
/ 24 апреля 2019

Проблема в вашем коде в том, что вы не возвращаете io из функции.Вот исправление с некоторой очисткой кода (в частности, отметим, что в Base определена функция readlines, поэтому лучше использовать другое имя функции):

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])

для получения идентичного результата (это, вероятно, немного медленнее, но проще).

...