如何使用julia

时间:2016-07-28 21:33:53

标签: 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)

我该怎么做?谢谢:))

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我最好的方式:

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

s = open("var.dat", "w")
write(s, typevar, var) # Float64\n@V@
close(s)

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