-1

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

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

2005 年 3 月 25 日,不适用,不适用,不适用,不适用,不适用,不适用,不适用,...

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

附带说明一下,我真的不需要日期(即第一列)。

这是我尝试过的:

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

2 回答 2

1

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

textscan(fid, ['%*s' repmat('%f',1,178)],'Delimiter',',','CollectOutput',true)
于 2013-06-26T20:01:03.317 回答
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
于 2013-06-26T17:00:43.023 回答