2016-07-28 20 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パッケージを調べましたか?これを使用して、型を含む完全なJuliaオブジェクトを格納できます。 –

+2

また、必要なものによっては、それは必要ではないかもしれません。たとえば、 'Float64'オブジェクトの配列を持っている場合、' writedlm'を使って.txtファイルに書き込んだり、 'readdlm'を使って読み込んだりするだけです。' readdlm'はオプションです引数を使用してデータを読み込むときの型を指定します。 –

+0

Michaelありがとうございました:)私はJLDとHDF5パッケージを見ます。 writedlmはテキストを書きますが、私はバイナリを書きます。 – pasto

答えて

0

私の最善の方法:

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

を多くのコメンターが持っているように、JLDパッケージを使用することが最善の方法である、あなたのファイルのフォーマットについての強力な要件があるようには思えないので、と述べた。それはあなたがそこに保存するすべてのもののタイプを自動的に追跡するので、値を直接読むことができます。

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

関連する問題