2016-07-28 3 views
1

줄리아 (Julia)에서 나중에 파일을 다시 사용하기 위해 변수와 유형을 파일에 쓰고 싶습니다. 이처럼 :julia를 사용하여 파일에 데이터 유형을 쓰는 방법

var = Float64(15) 
stream = open("foo.dat", "w") 
write(stream, typeof(var)) 
write(stream, var) 
close(stream) 

stream = open("foo.dat", "r") 
typevar = read(stream, DataType) 
var = read(stream, typevar) 
close(stream) 

는 세 번째 줄은 작동하지 않습니다

ERROR: LoadError: MethodError: `write` has no method matching write(::IOStream, ::Type{Float64}) 
Closest candidates are: 
write(::IO, ::Any) 

나는이 어떻게 할 수

? 당신에게 :) 감사

+4

JLD 패키지를 들여다 보았습니까? 이를 사용하여 해당 유형을 포함하는 완전한 줄리아 객체를 저장할 수 있습니다. –

+2

또한 원하는 것에 따라 필요하지 않을 수도 있습니다. 예를 들어'Float64' 객체의 배열을 가지고 있다면'writedlm'을 사용하여 그것을 .txt 파일에 쓰고'readdlm'을 써서 다시 읽어 들일 수 있습니다.'readdlm'은 선택적입니다 인수를 사용하여 데이터를 다시 읽을 때 유형을 지정하십시오. –

+0

Michael :) 감사합니다. JLD 및 HDF5 패키지를 봅니다. writedlm은 텍스트를 작성하지만 바이너리를 작성합니다. – pasto

답변

0

내 가장 좋은 방법 : 많은 댓글이 가진 가장 좋은 방법을 JLD 패키지되어 사용, 파일의 형식에 대한 강력한 요구가있을 것 같지 않기 때문에

var = Float64(89) 
typevar = string(typeof(var), "\n") 

s = open("var.dat", "w") 
write(s, typevar, var) # Float64\[email protected]@ 
close(s) 

s = open("var.dat", "r") 
typevar = chomp(readline(s)) # delete "\n" 
var = read(s, eval(parse(typevar))) 
close(s) 
2

라고 말했다. 그것은 자동으로 당신이 그것에 저장하는 모든 유형을 추적하고, 그래서 당신은 직접 값을 읽을 수 있습니다.

Pkg.add("JLD")과 함께 패키지를 설치해야합니다. 그 일을 사용하는 데 그것은 간단하다

julia> using JLD 
INFO: Precompiling module JLD... 
INFO: Recompiling stale cache file /Users/aviks/.julia/lib/v0.4/FileIO.ji for module FileIO. 

julia> a=10 
10 

julia> b="A String" 
"A String" 

julia> c=[1,2] 
2-element Array{Int64,1}: 
1 
2 

julia> file = jldopen("/tmp/mydata.jld", "w") 
Julia data file version 0.1.1: /tmp/mydata.jld 

julia> write(file, "a", a) 

julia> write(file, "b", b) 

julia> write(file, "c", c) 

julia> close(file) 

그런 다음 변수를 읽고 싶을 때, 새로운 REPL 세션에서

julia> using JLD 

julia> d=load("/tmp/mydata.jld") 
Dict{ByteString,Any} with 3 entries: 
    "c" => [1,2] 
    "b" => "A String" 
    "a" => 10 

julia> d["a"] 
10 

julia> d["b"] 
"A String" 

julia> d["c"] 
2-element Array{Int64,1}: 
1 
2 
JLD 패키지에 대한

자세한 내용은에서 볼 수 있습니다 https://github.com/JuliaIO/JLD.jl

관련 문제