使用importdata()自动将标题从文件更改为文件

时间:2012-07-24 15:38:51

标签: matlab loops file-io csv import

好的,所以我有多个文件,我正在尝试导入进行分析,我正在使用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

1 个答案:

答案 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