在Matlab中读取CSV文件到矩阵

时间:2013-06-26 16:22:38

标签: matlab csv matrix nan

我需要在Matlab中读取CSV文件。该文件主要是数字(第一列除外,它实际上有178列),并且缺少值,用NA表示。这是两行,例如:

  

2005年3月24日,2.145202,2.192237,2.238725,2.284657,2.3330028,2.374829,2.419056,......

     

2005年3月25日,NA,NA,NA,NA,NA,NA,NA,......

我想将这些NA作为NaN读取并将整体转换为矩阵,但我无法正确完成。

另一方面,我并不需要日期(第一列)。

这是我尝试过的:

filename = 'foo.csv';
fid = fopen(filename,'rt');
[data]=textscan(fid, '%s %f' , 178,'delimiter',',',...
                                   'TreatAsEmpty','NA',...
                                   'EmptyValue', NaN);

2 个答案:

答案 0 :(得分:1)

我会提供这个,但它并不多

% read in the entire file
fid = fopen('tmp.csv');
A = fread(fid);
% convert to a character array
B = char(A)';
% create a cell array with one element for every line in the file
lineData = regexp(B,'\n','split');
% for every line in the data, parse out all the data into a
% cell array
data = cell(1,length(lineData));
for ii=1:length(lineData)
  pData = textscan(lineData{ii},'%s','Delimiter',',');
  % remove any spaces from the elements
  data{ii} = cellfun(@(x) strrep(x,' ',''), pData{1},'UniformOutput',false);
end

答案 1 :(得分:1)

您可以使用%*s跳过日期,但需要指定178 %f和分隔符:

textscan(fid, ['%*s' repmat('%f',1,178)],'Delimiter',',','CollectOutput',true)