我有一个MATLAB代码的输入文件,它列出了网格中相邻顶点的索引。对于与文件的行号具有相同等级的顶点,我列出了同一行上的相邻顶点索引 e.g。
45, 56, 22
44, 12
12, 23,56,76
我想读一读 作为单元格数组存入我的代码。如下。
NBR = { {45,56,22}, {44,12}, {12,23,56,76} }
有没有MATLAB功能来实现这一目标?
答案 0 :(得分:2)
新答案:
我终于找到了一个不错的解决方案。实际上,importdata
在这里可以提供帮助,谢谢@Divakar。
>> C = importdata('file','')
C =
'45, 56, 22'
'44, 12'
'12, 23,56,76'
>> C = cellfun(@str2num, C, 'UniformOutput', 0)
C =
[1x3 double]
[1x2 double]
[1x4 double]
>> C = cellfun(@(x) mat2cell(x, [1], ones(size(x,2),1)), C, 'UniformOutput', 0)'
C =
{1x3 cell} {1x2 cell} {1x4 cell}
>> NBR = { {45,56,22}, {44,12}, {12,23,56,76} };
>> isequal(NBR,C)
ans =
1
旧答案:
不幸的是importdata
似乎对此任务太有限了,我找不到用textscan
读取整个文件然后应用一些cellfun
的好方法。 csvread
存在在应该有NaN
值的地方插入0的问题,因此对于实际包含零的数据集不起作用。
所以老式的方式看起来像这样:
fid = fopen('file');
ind = 1;
line = fgetl(fid); % #get first line
while line ~= -1; % #read until end of file
cont = cellfun(@str2num, strsplit(line, ','));
cont = mat2cell(cont, [1], ones(size(cont,2),1));
C{ind} = cont;
line = fgetl(fid);
ind = ind + 1;
end
fclose(fid);
演示,我的脚本保存为readin.m
:
>> readin
>> C
C =
{1x3 cell} {1x2 cell} {1x4 cell}
>> C{1}
ans =
[45] [56] [22]
>> C{2}
ans =
[44] [12]
>> C{3}
ans =
[12] [23] [56] [76]
>> NBR = {{45,56,22}, {44,12}, {12,23,56,76}};
>> isequal(NBR,C)
ans =
1
答案 1 :(得分:1)
您可以使用fgets在matlab中逐行读取文件
fid = fopen('yourfile');
tline = fgets(fid);
while ischar(tline)
disp(tline)
tline = fgets(fid);
end
fclose(fid);