Matlab:从.csv文件中只读标题行

时间:2011-12-07 11:05:36

标签: matlab file-io csv

假设有一个myfile.csv,第一行包含变量名,后面包含十进制数。在Matlab中我想分别读取标题行和十进制数。到目前为止,我一直在做以下提取标题行:

fid = fopen('myfile.csv');
a = textscan(fid,'%s','Delimiter','\n');
b = a{1,1};
fclose(fid);
c = textscan(b,'%s','Delimiter',',');
d = c{1}

然后,我使用csvread命令提取文件的数字部分。但应该有一个(更简单)的方法来做到这一点!首先,我不想读取整个文件(与a = textscan(fid,'%s','Delimiter','\n');一样)以仅提取第一行。其次,使用7行代码看起来是错误的 - 可以用更少的代码完成吗?

我会感谢任何建设性的建议。

2 个答案:

答案 0 :(得分:3)

使用fopen打开文件,使用textscan阅读标题行,使用fscanf读取小数位,最后调用fclose - 只有4行total :)示例输入文件:

Weight,Size,Count
1,2,3
4,5,6
7,8,9
10,11,12

阅读此文件:

fid = fopen('myfile.csv', 'r');
header = textscan(fid, '%[^,],%[^,],%[^,\r\n]', 1);
data = transpose(fscanf(fid, '%g,%g,%g\n', [3, Inf]));
fclose(fid);

for i = 1 : 3; disp(['"' cell2mat(header{i}) '"']); end;
disp(data);

请注意fscanf读取的数据需要转置(我通过编写transpose而不是'来强调这一点。输出:

"Weight"
"Size"
"Count"
     1     2     3
     4     5     6
     7     8     9
    10    11    12

答案 1 :(得分:1)

要提取第一行,您只需要

fid = fopen('myfile.csv');
a = textscan(fid,'%s',1);
fclose(fid);