#file #io #julia
#файл #io #джулия
Вопрос:
Я новичок в 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:
Проблема в вашем коде в том, что вы не возвращаете 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])
чтобы получить идентичный результат (это, вероятно, немного медленнее, но проще).