使用多个分隔符从MATLAB中的文本文件导入数据

时间:2014-10-01 18:04:37

标签: matlab delimiter textscan

我尝试将数据从文本文件导入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命令以某种方式解决吗?该文件相当大,有几十万个值,所以我需要一个快速的解决方案;)非常感谢帮助!

1 个答案:

答案 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