Matlab:将文本文件的每一行放在一个单独的数组中

时间:2013-05-02 09:32:08

标签: matlab cell fopen

我有一个类似以下的文件

 10158 18227 2055 24478 25532 
 12936 14953 17522 17616 20898 24993 24996 
 26375 27950 32700 33099 33496 3663 
 ...

我想将每一行放在一个数组中,以便分别访问每一行的元素。 我使用了单元格数组,但它似乎为每个单元格元素创建了一个1比1的数组:

fid=fopen(filename)
nlines = fskipl(fid, Inf)
frewind(fid);
cells = cell(nlines, 1);
for ii = 1:nlines
    cells{ii} = fscanf(fid, '%s', 1);
end
fclose(fid);

当我访问cells{ii}时,我获取了同一元素中的所有值,但我无法访问列表值

2 个答案:

答案 0 :(得分:2)

较短的解决方案是使用textscan读取文件:

fid = fopen(filename, 'r');
C = cellfun(@str2num, textscan(fid, '%s', 'delimiter', ''), 'Uniform', false);
fclose(fid);

生成的单元格数组C正是您所需要的。

答案 1 :(得分:1)

我认为fscanf(fid, '%s', 1);告诉matlab读取单个字符串的行。您仍然需要将其转换为数字数组:

for ii = 1:nlines
    cells{ii} = str2num(fscanf(fid, '%s', 1));
end