将 MATLAB 文本扫描输出分解为 table
Breaking MATLAB Text Scan Output into a table
我正在编写一些将 .csv 文件解析为 table 的 MATLAB 代码。 CVS 文件有七列,用逗号分隔,还包含数千行。
现在解析代码如下所示:
fid = fopen('data.csv', 'r');
parsed = textscan(fid, '%s %f %f %f %f %f %f', 'Delimiter',',', 'HeaderLines', 1);
但是 disp(parsed);
returns 包含只有一列的数组的对象。此数据看起来像这样:
[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
如何将此数据分解为 table。我希望能够通过以下数据进行交互: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
您可以使用 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]
我正在编写一些将 .csv 文件解析为 table 的 MATLAB 代码。 CVS 文件有七列,用逗号分隔,还包含数千行。
现在解析代码如下所示:
fid = fopen('data.csv', 'r');
parsed = textscan(fid, '%s %f %f %f %f %f %f', 'Delimiter',',', 'HeaderLines', 1);
但是 disp(parsed);
returns 包含只有一列的数组的对象。此数据看起来像这样:
[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
如何将此数据分解为 table。我希望能够通过以下数据进行交互: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
您可以使用 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]