将CSV导入双倍



我希望在数据导入方面提供一些帮助。对于背景,我已经测试了30种产品,每个产品总共提供了90个独特的文件(分为三个(。

我的每个原始数据文件都有不同数量的行,并包含一个带有9列的标头行(我对标题不感兴趣(。在这种情况下,我只对获得列1,3&感兴趣。4。

我已经将所有.CSV的内容都移至一个文件夹中,并且我使用了一个文件抓取器(从Stackoverflow获得(将CSV数据带入工作空间,例如:

[file,dir,filterIndex] =  uigetfile( ...
{'*.csv', '*.csv';
'*.*',  'All Files (*.*)'}, ...
'Select files',...
'Multiselect', 'on');
if ischar(file)
    file = {file};
end
n = length(file);
d = cell(n,1);

这带来了A< 90x1>单元格。以下是我用来导入数据并将其从单元转换为双打的方法 - 您可以看到它相当密集...有人是否有一种减少我正在做的拷贝性量的方法?

for k = 1:n
fid = fopen([dir,file{k}]);
d{k} = textscan(fid,'%f %f %f %f %*[^n]',...
       'delimiter',',','HeaderLines',1);
fclose(fid);
end
A = vertcat(d{:});
Q = cell2mat(A(:,[1,3,4]));
s1 = cell2mat(A(1,[1,3,4]));
s2 = cell2mat(A(2,[1,3,4]));
s3 = cell2mat(A(3,[1,3,4]));
ss1 = (s1(1,2)+s2(1,2)+s3(1,2))/3;
s4 = cell2mat(A(4,[1,3,4]));
s5 = cell2mat(A(5,[1,3,4]));
s6 = cell2mat(A(6,[1,3,4]));
ss2 = (s4(1,2)+s5(1,2)+s6(1,2))/3;
.
.
.
s88 = cell2mat(A(88,[1,3,4]));
s89 = cell2mat(A(89,[1,3,4]));
s90 = cell2mat(A(90,[1,3,4]));
ss30 = (s88(1,2)+s89(1,2)+s90(1,2))/3;

如果可能的话,我很乐意将一个单个矩阵中的连续列中的数据(尽管,正如我之前提到的,这些文件是不同的长度(。矩阵" Q"只是一个测试 - 它带来了所有数据,但在三个非常长的列中,这不是我想要的。

我正在按要求添加CSV中的一些数据:

's1 = Time,Voltage_0,Med_PSense,FC_Flow_Meter,Voltage_3,Voltage_4,Voltage_5,Voltage_6,Voltage_7
0.0000,0.2431,-0.1334,-0.2381,1.4003,1.3917,1.3986,1.4045,1.4047
0.0100,0.2119,-0.1120,-0.1878,1.4029,1.3968,1.3910,1.3994,1.3996
0.0200,0.2119,-0.1120,-0.2130,1.4080,1.3917,1.3961,1.3994,1.4022
0.0300,0.2119,-0.1120,-0.2297,1.4003,1.3993,1.3961,1.3994,1.4047
0.0400,0.2015,-0.0905,-0.2297,1.3978,1.3968,1.3935,1.3994,1.3996`
's2 = Time,Voltage_0,Med_PSense,FC_Flow_Meter,Voltage_3,Voltage_4,Voltage_5,Voltage_6,Voltage_7
0.0000,0.2639,-0.1334,-0.2381,1.4003,1.3993,1.4037,1.3994,1.3920
0.0100,0.2431,-0.0905,-0.2381,1.4003,1.4019,1.4037,1.3994,1.3945
0.0200,0.2535,-0.1762,-0.2465,1.4029,1.4044,1.3986,1.3994,1.3996
0.0300,0.2119,-0.1548,-0.2130,1.4029,1.3993,1.3935,1.3994,1.3996
0.0400,0.2223,-0.1334,-0.2046,1.4003,1.3917,1.3910,1.3994,1.4022'
's3 = Time,Voltage_0,Med_PSense,FC_Flow_Meter,Voltage_3,Voltage_4,Voltage_5,Voltage_6,Voltage_7
0.0000,0.2223,-0.1762,-0.2465,1.4003,1.3993,1.4011,1.3918,1.3920
0.0100,0.2015,-0.1548,-0.2130,1.4054,1.3968,1.3910,1.3994,1.3996
0.0200,0.2535,-0.0691,-0.2465,1.3927,1.3993,1.4062,1.4020,1.4022
0.0300,0.2535,-0.1334,-0.2465,1.4003,1.3993,1.3986,1.3994,1.3920
0.0400,0.2119,-0.1120,-0.2381,1.4003,1.3993,1.4011,1.3994,1.4022'

给定的CSV的长度为:

s1 = 9330 elements long
s2 = 9210 elements long
s3 = 6180 elements long

希望这会有所帮助!

输入文件:S1.CSV,S2.CSV,S3.CSV

names = {'s1','s2','s3'};
delimiterIn = ',';
headerlinesIn = 1;
% make a structure with all data
for i = 1:length(names)
    all.data(i) = importdata([char(names(i)),'.csv'],delimiterIn ,headerlinesIn)
end
% take columns 1,3,4 (from s1)
all.data(1).data(:,[1,3,4])
% take columns 1,3,4 (from s2)
all.data(2).data(:,[1,3,4])
% ...

此选择可以在循环中实现...而且,需要进一步做什么呢?

最新更新