我正在流式传输字符串并将它们从.dat解析为浮点数/整数。一切顺利,直到我使用字符串中的最后一项,这将返回错误。
示例数据:
x = "15505052|B|Other|2.22|250022|2776|09/2019|01/2004|"
y = split(x, "|") # <-- one inner loop of the loop
if isblank(y[9]) == false
floater = parse(Float64, y[9])
end
这是我收到的错误:
ArgumentError("float64(String): invalid number format")
while loading In[42], in expression starting on line 56
in float64 at string.jl:1613
in parse at /Users/laptop/.julia/v0.3/Compat/src/Compat.jl:217
in loan_aqsn at In[42]:36
我已经在视觉上检查了上面数据字符串中的最后一列,并确定数据应该可以解析为Float64,实际上每个其他列都可以正常工作。
我发现我可以单独解析.dat中的行(用于测试目的),但是当我转移到流文件时,Julia会抛出错误。我唯一可以弄清楚这个错误的是它必须处理字符串y [9]中的最终记录,这对我来说没有意义。
非常感谢任何有关这个令人沮丧的问题的帮助。
答案 0 :(得分:3)
您正在测试y
是否为空,当它实际上是空字符串时:
x = "15505052|B|Other|2.22|250022|2776|09/2019|01/2004|"
y = split(x)
y[9] # ""
isblank(y[9]) # false, since we have an empty string
float(y[9]) # ERROR: ArgumentError("float64(String): invalid number format")
您应修改代码以使用isempty()
代替
using Compat # for parse(Float, String)
if !isempty(y[9])
floater = parse(Float64, y[9])
end
# do stuff
答案 1 :(得分:0)
你使用哪个julia版本?我无法将parse(fmt,str)
识别为有效命令(v 0.3.10)。
尝试解析数字,而不仅仅是转换它们。这样就可以正确执行分割(如第二个{{1}}中的01/2004)。
x
这在我的julia REPL中工作正常,返回strs = ["12", "12.1", "12/3"]
for i in strs
a::Float64 = eval(parse(i))
println(a)
end
,12.0
和12.1
。
请注意,我正在“执行”这些数字,如果我将此代码用于除快速脚本之外的其他内容,则会引发安全问题。