在Julia中流式传输数据时从文本文件中解析最后位置值时出错

时间:2015-08-21 12:35:27

标签: julia

我正在流式传输字符串并将它们从.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]中的最终记录,这对我来说没有意义。

非常感谢任何有关这个令人沮丧的问题的帮助。

2 个答案:

答案 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

Relevant manual section (for v0.3)

答案 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.012.1。 请注意,我正在“执行”这些数字,如果我将此代码用于除快速脚本之外的其他内容,则会引发安全问题。