将MATLAB文本扫描输出分解为表格

时间:2015-04-07 14:43:18

标签: matlab textscan

我正在研究一些将.csv文件解析成表格的MATLAB代码。 CVS文件有七列,以逗号分隔,还包含数千行。

现在解析代码如下所示:

fid = fopen('data.csv', 'r');
parsed = textscan(fid, '%s %f %f %f %f %f %f', 'Delimiter',',', 'HeaderLines', 1);

但是disp(parsed);返回一个包含只有一列的数组的对象。这些数据看起来像这样:

[209,1] = 3/8/2015 16:12:00
[210,1] = 8.09
[211,1] = 952
[212,1] = 603
[213,1] = 100.8
[214,1] = 20.8
[215,1] = 11.3
[216,1] = 10.66
[217,1] = 3/8/2015 16:47:00
[218,1] = 8.1
[219,1] = 950
[220,1] = 604
[221,1] = 100
[222,1] = 15.8
[223,1] = 11.18
[224,1] = 10.71
[225,1] = 3/8/2015 17:22:00
[226,1] = 8.07
[227,1] = 981

如何将此数据分解为表格。我希望能够通过以下数据进行交互:parsed[1][3]。我想我只是缺少一个明显的参数来传递给textscan()函数,但是我找不到任何关于它的文档。

非常感谢您提供的任何帮助!

更新

以下是我正在使用的CSV文件的一小部分示例:

dt,temp,ldo,turbidity,ldo.per,orp,conductivity,ph
3/8/2015 00:02:00,7.99,11.52,3.8,96.3,612,1038,8.01
3/8/2015 00:07:00,7.98,11.52,3.5,96.3,612,1038,8.01
3/8/2015 00:12:00,7.96,11.52,3.4,96.3,612,1038,8.01
3/8/2015 00:17:00,7.97,11.54,3.7,96.5,612,1038,8.01

我希望输出看起来像:

A =
   3/8/2015 00:02:00   7.99   11.52   3.8   96.3   612   1038   8.01
   3/8/2015 00:07:00   7.98   11.52   3.5   96.3   612   1038   8.01
   3/8/2015 00:12:00   7.96   11.52   3.4   96.3   612   1038   8.01
   3/8/2015 00:17:00   7.97   11.54   3.7   96.5   612   1038   8.01

1 个答案:

答案 0 :(得分:2)

您可以使用importdata

d = importdata('filename.csv');

这为结构d提供了字段data(数字)和textdata(字符串的单元格数组):

>> d.data
ans =
  1.0e+003 *
    0.0080    0.0115    0.0038    0.0963    0.6120    1.0380    0.0080
    0.0080    0.0115    0.0035    0.0963    0.6120    1.0380    0.0080
    0.0080    0.0115    0.0034    0.0963    0.6120    1.0380    0.0080
    0.0080    0.0115    0.0037    0.0965    0.6120    1.0380    0.0080

>> d.textdata
ans = 
    'dt'                   'temp'    'ldo'    'turbidity'    'ldo.per'    'orp'    'conductivity'    'ph'
    '3/8/2015 00:02:00'    ''        ''       ''             ''           ''       ''                ''  
    '3/8/2015 00:07:00'    ''        ''       ''             ''           ''       ''                ''  
    '3/8/2015 00:12:00'    ''        ''       ''             ''           ''       ''                ''  
    '3/8/2015 00:17:00'    ''        ''       ''             ''           ''       ''                ''  

要合并它们,您需要一个单元格数组:

result = [d.textdata(2:end,1) num2cell(d.data)];

给出了

result = 
    '3/8/2015 00:02:00'    [7.9900]    [11.5200]    [3.8000]    [96.3000]    [612]    [1038]    [8.0100]
    '3/8/2015 00:07:00'    [7.9800]    [11.5200]    [3.5000]    [96.3000]    [612]    [1038]    [8.0100]
    '3/8/2015 00:12:00'    [7.9600]    [11.5200]    [3.4000]    [96.3000]    [612]    [1038]    [8.0100]
    '3/8/2015 00:17:00'    [7.9700]    [11.5400]    [3.7000]    [96.5000]    [612]    [1038]    [8.0100]