Julia从文件解析浮点:类型woes

Julia从文件解析浮点:类型woes,julia,Julia,这是我的文件中我想读给Julia的一行: o1o 0.00351(19)0.66716(19)-0.36485(16) 我想替换括号,并将其作为浮点数读取。我认为这应该行得通,但行不通 lines = readlines(open("myfile")) line = lines[1] frac_coords = split(line)[3:end] i = 1 frac_coords[i] = replace(frac_coords[i], "(", "") frac_coords[i]

这是我的文件中我想读给Julia的一行:

o1o 0.00351(19)0.66716(19)-0.36485(16)

我想替换括号,并将其作为浮点数读取。我认为这应该行得通,但行不通

lines = readlines(open("myfile"))
line = lines[1]

frac_coords = split(line)[3:end]
i = 1
frac_coords[i] = replace(frac_coords[i], "(", "")

frac_coords[i] = replace(frac_coords[i], ")", "")

frac_coords[i] = parse(Float64, frac_coords[i])
我得到一个错误:

LoadError: MethodError: `convert` has no method matching convert(::Type{SubString{ASCIIString}}, ::Float64)
This may have arisen from a call to the constructor SubString{ASCIIString}(...),
since type constructors fall back to convert methods.
Closest candidates are:
  call{T}(::Type{T}, ::Any)
  convert{T<:AbstractString}(::Type{SubString{T<:AbstractString}}, !Matched::T<:AbstractString)
  convert{T<:AbstractString,S<:Union{Char,Int32,UInt32}}(::Type{T<:AbstractString}, !Matched::AbstractArray{S<:Union{Char,Int32,UInt32},1})
  ...

 while loading In[53], in expression starting on line 14

 in setindex! at array.jl:313
LoadError:MethodError:`convert`没有与convert匹配的方法(::Type{SubString{ascistring}},::Float64)
这可能是由于调用构造函数子字符串{ascistring}(…),
因为类型构造函数会退回到转换方法。
最接近的候选人是:
调用{T}(::类型{T},::任意)

convert{Tsplit
函数返回一个
ascistring
数组,因此,
frac\u coords
将成为该类型的变量:

frac_coords = split(line)[3:end]
typeof(frac_coords) # =>  Array{SubString{ASCIIString},1}
任何更改其元素类型的尝试都会导致异常:

frac_coords[1]=0#=>错误

那么,为什么不简单地使用正确类型的不同变量呢

floats=Array(Float64,length(frac_coords))
floats[i] = parse(Float64, frac_coords[i])
编辑或使用
向量{Any}()
作为两种类型的容器:

frac_coords=Vector{Any}()
push!(frac_coords,split(line)[3:end]...)
for i=1:length(frac_coords)
   frac_coords[i]=replace(replace(frac_coords[i], "(", ""),")", "")
   frac_coords[i]=parse(Float64,frac_coords[i])
end

谢谢。我仍然不认为这是直观的。
x=1.0
然后
x=1
将Float64转换为Int。我想这可能会涉及数组中的混合类型。不过,它可能会更改为数组{t}其中T是两种类型的并集,对吗?@Cokes,肯定是的,存在许多可能的解决方案,例如,正如您已经提到的,可以使用更通用的容器,例如
并集的向量
s或
任意
的向量,类型。