Octave GNU倍频程:使用textscan(…)读取NA值的数据

Octave GNU倍频程:使用textscan(…)读取NA值的数据,octave,textscan,Octave,Textscan,我需要从一个ASCII文件中读取数据,其中缺少的值被指定为NA。使用textscan(…)似乎不起作用,因为textscan(…)似乎会在第一次出现NA时停止读取/解析 下面是这个问题的简单演示: x = textscan ( "1 ; 2 ; 3\n4 ; NA ; 6" , '%d %d %d' , 'Delimiter' , ';' , 'ReturnOnError' , false ) error: textscan: Read error in field 2 of row 2 我还

我需要从一个ASCII文件中读取数据,其中缺少的值被指定为NA。使用textscan(…)似乎不起作用,因为textscan(…)似乎会在第一次出现NA时停止读取/解析

下面是这个问题的简单演示:

x = textscan ( "1 ; 2 ; 3\n4 ; NA ; 6" , '%d %d %d' , 'Delimiter' , ';' , 'ReturnOnError' , false )
error: textscan: Read error in field 2 of row 2
我还尝试告诉textscan(…)将NA解释为“空值”,但没有成功:

x = textscan ( "1 ; 2 ; 3\n4 ; NA ; 6" , '%d %d %d' , 'Delimiter' , ';' , 'TreatAsEmpty' , 'NA' , 'ReturnOnError' , false )
error: textscan: Read error in field 2 of row 2
有人能解释一下发生了什么事,或者怎么做吗

请注意,这只是一个简单的例子来说明这个问题。我的文件中的数据格式有点复杂,我真的依靠textscan(…)来解析它;我认为如果没有文本扫描(…),我很难做到这一点


(我正在运行Octave 4.2.1。)

NA
是为浮点数定义的,因此您应该使用
'%f'
转换说明符,而不是
'%d'

x = textscan ( "1 ; 2 ; 3\n4 ; NA ; 6" , '%f %f %f' ,
    'Delimiter' , ';' , 'ReturnOnError' , false )

但这与MATLAB不一致。:/在MATLAB和倍频程下进行测试。SardarUsama以八度音阶工作。@SardarUsama谢谢,我认为应该使用
NaN
而不是
NA
你能测试它吗?@SardarUsama如果使用
%d
,NA将转换为
0
而不是
NaN
。在MATLAB中,问题是由
\n
引起的。看这里:和