将具有特定列(无标题)的数据从csv文件导入MATLAB

时间:2016-12-30 15:47:44

标签: matlab csv import

给出一个csv文件,看起来像(来自MATLAB中的Import Tool

enter image description here

可以使用Import Tool将其导入MATLAB。假设一个有30个这样的文件具有相同的列数但可能有不同的行数。

问题: 如何在MATLAB中实现以下功能?

  

对于每个文件,将列2,3,5(全部从第2行开始)作为单元格数组加载。

之前已经提出了很多关于将数据从csv文件导入MATLAB的问题。但是那些相关问题的答案(我发现的最接近的问题是here)似乎对于实现我的具体目标并不是很有帮助。

2 个答案:

答案 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

上面的文本扫描说:

  1. 浏览文件fid
  2. 跳过第1栏
  3. 将第2列视为字符串
  4. 将第3列视为双重
  5. 略过第4栏
  6. 将第5列视为字符串
  7. 跳过剩下的列
  8. 使用逗号分隔符
  9. 忽略第一行
  10. 如果您加载n个文件,变量data将是一个nx30单元格数组,其中包含包含每个文件数据的单元格矩阵。

    我希望这有帮助。如果还有什么我能做的,请告诉我。