我需要在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);
答案 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)