好的,所以我有多个文件,我正在尝试导入进行分析,我正在使用uiimport()在目前的脚本中执行此操作,但我必须手动切换每个文件的标题行,因为它们每次都会更改时间。我想做这样的事情:
DELIMITER = ',';
HEADERLINES = 50;
data_imported = importdata(file_to_get, DELIMITER, HEADERLINES);
但问题是我的300~文件中只有1或2的标题行数为50.另一个非常重要的注意事项是,每个文件的默认标题行数只需要添加2个。因此,如果使用uiimport()时的默认标题行数为50,那么我需要将其更改为52。
是否有办法用if语句改变这个?注意:defaultheader用作示例,而不是实际变量。
例如:
if defaultheader = 30
header = 32
end
.celV文件在excel中的外观示例
*Title
*
*Description (1.7) Tue 03/20/12 09:59:09
*
* file name
*
* TestNames:
* _Test 1 (ein: 10)
* _Test 2 (ein: 15)
* _Test 3 (ein: 20)
* _Test 4 (ein: 25)
* _test 5 (ein: 30)
* _test 6 (ein: 35)
* _test 7 (ein: 40)
* _test 8 (ein: 45)
* _test 9 (ein: 50)
* _test 10 (ein: 55)
* _test 11 (ein: 60)
* _test 12 (ein: 65)
* _test 13 (ein: 70)
* _test 14 (ein: 75)
* _test 15 (ein: 80)
* _test 16 (ein: 85)
*
* Info1: ...
* Info2: ...
* info3: ...
* info4: ...
* info5: ...
* info6: ...
* info7: ...
* info8: ...
* info9: ...
* info10: ...
* info11: ...
* info12: ...
*
* Pixel,Tap Name,Tap Pixel,brightness
,,,10,15,20,25,30,35,40
,,,0,67,21,12,223,231,832
1,0A1,458,75,89,24,46,256,763,532
2,0A1,457,43,65,56,554,263,254,732
3,0A1,456,28,47,76,221,412,732,832
4,0A1,455,12,23,36,466,652,633,637
5,0A1,454,11,78,98,678,864,241,223
答案 0 :(得分:1)
您可以使用TEXTSCAN函数来读取CSV文件,并指定CommentStyle
选项以忽略以*
字符开头的所有标题行。
下面的代码将首先将文件读作行的单元格数组,忽略以*
开头的所有行。我们还在标题部分后面跳过前两行。接下来,我们遍历每一行,并将制表符分隔的值解析为字符串。我们忽略前三列,并将其余值转换为数字。最后,我们将该行存储在矩阵M
中。请注意,代码不会假设我们事先知道列数,而是从其中一个数据行确定。
%# read lines
fid = fopen('file.csv','rt');
C = textscan(fid, '%s', ...
'Delimiter','', 'Whitespace','\n', 'CommentStyle','*');
fclose(fid);
C = C{1}(3:end); %# skip two lines
%# parse each line
numCols = sum(C{1}==',')+1 - 3; %# number of columns
M = zeros(numel(C),numCols);
for i=1:numel(C)
v = textscan(C{i}, '%s', 'Delimiter',',');
v = str2double(v{1}(4:end));
M(i,1:numel(v)) = v;
end
结果矩阵M
包含您感兴趣的文件部分:
M =
75 89 24 46 256 763 532
43 65 56 554 263 254 732
28 47 76 221 412 732 832
12 23 36 466 652 633 637
11 78 98 678 864 241 223