包含NaN的填充序列

时间:2019-03-22 22:33:48

标签: sequence nan nim

此处是尼姆语问题。我想从stdin中读取一系列浮点数(此示例:7、1、4、4,nan,4)并将其存储为seq[float]类型。输入内容可能包含NaN。但是我无法整合这些异常值。

我的代码:

var
  line: TaintedString
  timeSeries: seq[float]

while readline(stdin, line) != false:
  echo timeSeries
  timeSeries.add(parseFloat(line))

输出:

@[]
@[7.0]
@[7.0, 1.0]
@[7.0, 1.0, 4.0]
@[7.0, 1.0, 4.0, 4.0]
@[7.0, 1.0, 4.0, 4.0, nan]
@[nan, nan, nan, nan, nan, nan]

面对第一个NaN,Nim将所有输入呈现为NaN。但是我想要这个(输出的最后一行):

@[7.0, 1.0, 4.0, 4.0, nan, 4.0]

如何在Nim中正确解决它? Documentation说支持NaN…

1 个答案:

答案 0 :(得分:1)

由于您在添加下一个数字之前先回声timeSeries,因此在输入4的最后一行时会引起@[7.0, 1.0, 4.0, 4.0, nan],这是您的猜测在那之后做了最后的输出线。尽管我怀疑是否有任何理由将序列中的每个值都设置为NaN,但这可能是您的输入触发了错误的原因。

我无法复制您的输出 输入您的代码时添加代码(添加所需的import strutils),然后输入另一个4nan或空行(后者在无效浮点数时出错)。

为了便于测试,我将您的输入内容放在文件input.txt中:

7
1  
4
4
nan
4

并在最新的稳定nim(Nim Compiler版本0.19.4 [Linux:amd64])上运行以下命令作为最新的devel nim(Nim Compiler版本0.19.9 [Linux:amd64]):

import strutils

var
  line: TaintedString
  timeSeries: seq[float]

echo timeSeries
for line in "input.txt".lines:
  timeSeries.add(parseFloat(line.strip))
  echo timeSeries

.strip只能处理剪切和粘贴以及草率编辑的结果中的输入尾随空格)

两个编译器的输出:

@[]
@[7.0]
@[7.0, 1.0]
@[7.0, 1.0, 4.0]
@[7.0, 1.0, 4.0, 4.0]
@[7.0, 1.0, 4.0, 4.0, nan]
@[7.0, 1.0, 4.0, 4.0, nan, 4.0]

使用-d:release进行编译也不会引起任何错误。