0

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

.CSV 文件在 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
4

1 回答 1

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
于 2012-07-24T16:35:48.717 回答