如何使用textscan在Matlab中读取多行?

时间:2013-03-29 16:50:02

标签: matlab textscan

我用过这个:

weights=fopen('indices.txt');
weights=textscan(weights, '%d %d %d %d %d %d %d')

但这只会读取我文件的第一行。 我的文件看起来像这样:

0 90 100 5 0 0 0 (class)
19 5 0 0 0 0 0 (class2)
5 5 0 0 0 0 0 (class3)
-10 -5 0 0 0 0 0 (class4)

我不需要括号中的内容

非常感谢!

2 个答案:

答案 0 :(得分:2)

对于这种情况,您可以执行以下操作:

fid = fopen('indices.txt');
num_ints = 7;
num_rows = 4;

format = [repmat('%d ', 1, num_ints), '%s'];
weights = textscan(fid, format, num_rows);
weights = [weights{1:num_ints}];
fclose(fid);

当然,缺点是您必须事先了解您正在阅读的行数。您可以尝试在循环中调用textscan,但这似乎并不意味着它的使用方式(如果我尝试逐行读取文件,我宁愿使用fgetl)。

答案 1 :(得分:1)

使用以下内容:

fh = fopen('indices.txt');
resC = textscan(fh, '%d %d %d %d %d %d %d %s', 1000);
res = cell2mat(resC(1:7))
fclose(fh);

textscan只会读取(并返回)最多可用的行数。但请注意,textscan为您提供的行数(此处为1000)分配内存,因此您希望在那里选择“明智”的内容。