【问题标题】:importing a CSV file in MATLAB在 MATLAB 中导入 CSV 文件
【发布时间】:2012-01-22 07:29:40
【问题描述】:

如何将 CSV 文件导入 MATLAB?我正在使用的文件中的一行如下所示:

SUNW,2-Jan-98,1998,5,40.125,41.5

共有 36 列和 10107 行。第一行包含列标题。看来 MATLAB 不支持导入此类 CSV 文件。使用以下textscan函数将整个数据读入一个元胞数组。

data = textscan(fid, '%s %s %d %d %f %f', ...
    'HeaderLines',1, 'Delimiter',',', 'CollectOutput',1);

有没有办法可以将数据读入每列的不同变量中?

【问题讨论】:

    标签: matlab file-io csv import textscan


    【解决方案1】:

    textscan documentation 中的示例 6 似乎涵盖了您感兴趣的用例:

    使用文本编辑器,创建一个以逗号分隔的文件 data2.csv 包含行

        abc, 2, NA, 3, 4
        // Comment Here
        def, na, 5, 6, 7
    

    指定 textscan 应该将其视为 cmets 或空的输入 价值观:

        fid = fopen('data2.csv');
        C = textscan(fid, '%s %n %n %n %n', 'delimiter', ',', ...
                     'treatAsEmpty', {'NA', 'na'}, ...
                     'commentStyle', '//');
        fclose(fid);
    

    textscan 返回一个 1×5 元胞数组 C,其中包含以下元胞:

        C{1} = {'abc'; 'def'}
        C{2} = [2; NaN]
        C{3} = [NaN; 5]
        C{4} = [3; 6]
        C{5} = [4; 7]
    

    虽然它没有明确地将每一列分配给单独的变量,但您可以轻松地执行col1 = C{1}; 之类的操作。

    【讨论】:

      【解决方案2】:

      如果您有 MATLAB 2011b,那么您可以使用spreadsheet import tool

      【讨论】: