我尝试将数据从文本文件导入MATLAB,它具有以下结构:
** Porosity
**
*POR *ALL
0.1500 0.0900 2*0.1300 0.1400 4*0.1500 0.2200 2*0.1500 0.0500
0.0900 0.1400 5*0.1500 0.2300 0.2600 0.0800 0.1500 0.1500 0.2400 0.1700
[...]
显然必须忽略标题。空格是分隔符,而*
表示相同的值多次出现,如*
之前的整数所示。
不幸的是,每行的条目数会有所不同。理想情况下,我想将所有值存储在一个数组中,如下所示:
por = [0.1500 0.0900 0.1300 0.1300 0.1400 0.1500 0.1500 0.1500 0.1500 0.1500 0.2200 0.1500 0.1500 ...]
这可以用textscan
命令以某种方式解决吗?该文件相当大,有几十万个值,所以我需要一个快速的解决方案;)非常感谢帮助!
答案 0 :(得分:0)
直接前进(我没有使用Matlab很长一段时间,所以它可能不是最好的解决方案)
fid = fopen('temp.txt');
data = textscan(fid, '%s', 'delimiter', ' ');
fclose(fid);
out = convert_cells(data);
功能
function out = convert_cells(cells)
out = [];
for i = 1 : size(cells{1})
tmp = strsplit(cells{1}{i}, '*');
num1 = str2double(tmp(1));
if size(tmp, 2) == 2 && ~isnan(num1)
num2 = str2double(tmp(2));
if ~isnan(num2)
out = [out repmat(num2, 1, num1)];
end;
elseif size(tmp, 2) == 1 && ~isnan(num1)
out(end + 1) = num1;
end;
end;
end