给出一个csv文件,看起来像(来自MATLAB中的Import Tool
)
可以使用Import Tool
将其导入MATLAB。假设一个有30个这样的文件具有相同的列数但可能有不同的行数。
问题: 如何在MATLAB中实现以下功能?
对于每个文件,将列2,3,5(全部从第2行开始)作为单元格数组加载。
之前已经提出了很多关于将数据从csv文件导入MATLAB的问题。但是那些相关问题的答案(我发现的最接近的问题是here)似乎对于实现我的具体目标并不是很有帮助。
答案 0 :(得分:1)
假设您有text.csv
文件,如下所示:
var1 var2 var3 var4
dummy 1 London 0.5
dummy 2 Edinburgh 1.5
dummy 3 Cardiff 2
dummy 4 Belfast 2.5
这可能不是计算效率最高的解决方案,但它非常有效(这应该复制到Matlab脚本并运行):
% Read the data as a table (without reading the column label, otherwise add
% 'ReadVariableNames',false before the right bracket:
T = readtable('text.csv','Delimiter',',');
% Convert the table to a cell:
C = table2cell(T);
% Store, say, the 2nd and 3rd columns to another cell. Otherwise you can
% also convert numeric values to vectors/matrices:
C2 = C(:,2:3);
我希望这会有所帮助。如果您有其他问题,请告诉我。如果您需要执行操作,我建议将数据转换为矩阵。
答案 1 :(得分:1)
这是我的建议:
% Load files with multiselect
[file,dir,filterIndex] = uigetfile( ...
{'*.csv', '*.csv';
'*.*', 'All Files (*.*)'}, ...
'Pick files',...
'Multiselect', 'on');
% 'file' will be a cell array of file names if you read more than one file, but
% it will be a char array if you only read one file. If only one file is
% chosen, put it into a cell.
if ischar(file)
file = {file};
end
% Loop through all files and use textscan
n = length(file);
data = cell(n,1);
for k = 1:n
fid = fopen([dir,file{k}]);
data{k} = textscan(fid,'%*s %s %f %*s %s %*[^\n]',...
'delimiter',',','HeaderLines',1);
fclose(fid);
end
上面的文本扫描说:
fid
如果您加载n
个文件,变量data
将是一个nx30
单元格数组,其中包含包含每个文件数据的单元格矩阵。
我希望这有帮助。如果还有什么我能做的,请告诉我。