MATLAB中的textscan:将NULL值读为NaN

时间:2011-07-11 23:35:22

标签: matlab file-io nan tsv textscan

我有一个包含以下数据的.txt文件:

sampleF.txt - > (制表符分隔)

MSFT    200    100
APPL    10    NULL
AMZN    20    40

我需要使用textscan读取此数据。我在阅读NULL数据时遇到问题。使用treatasempty param,我可以将其读作0.但我想将其读作NaN。请帮忙!谢谢!

fName = '.....\sampleF.txt'
[fid, message] = fopen(fName) ;
if fid < 0, disp(message), else
    datatxt = textscan(fid, '%q %d %d', 'Delimiter', '\t','treatAsEmpty','NULL');
    datatxt = [ datatxt {1} num2cell(datatxt {2}) num2cell(datatxt {3})] ;
    fclose(fid) ; 
end

%datatxt = { 'MSFT' [200] [100] ; 'AAPL' [10] [NaN] ; 'AMZN' [20] [40] } 

1 个答案:

答案 0 :(得分:6)

问题在于int32类型不支持NaN值。而是将数字读作双打。即:

data = textscan(fid, '%s %f %f', 'Delimiter','\t', ...
           'treatAsEmpty','NULL', 'EmptyValue',NaN);