首页 > 解决方案 > 在matlab中读取具有重复数据块的文本文件

问题描述

我有以下形式的文本文件:

...

           3
  x=         0.10000   3    s
A      -1.554489099     -6.345000000      0.55574511
A       6.346000000     -0.134800000      4.45454546
V      -1.666613300     -6.333453600     -2.11111145
           3
  x=         0.20000   3    s
A       7.777755558     -4.033333330     -5.323232323
A       8.122322238     -5.007007007      2.045467754
V      -2.443366723     -5.222333337     -6.868889099
           3
                        

...

第一行主要是空格和一个数字,第二行有一个我要聚合的变量(x=某个数字),忽略该行的其余部分,接下来的 3 行包含我也想聚合的所有变量数组形式(A,A,V),这一次又一次地重复。

我想阅读这个文本文件,这样我将有一个x值向量 (1xn),以及作为 x 函数的 A、A、V 值的 3D 数组 (3x3xn)。

我尝试的是逐行阅读,fgetl(fid)但这为每一行提供了一个我无法使用的 char 向量。我也试过dlmread,但文件结构在这里不起作用。

如何以我可以使用的形式阅读这样的文本文件?

标签: matlabtext-files

解决方案


所以在这个的帮助下,strsplit我得到了解决方案:(如果有更好的我可以做的,请告诉我)

fid = fopen(fn);
n=0;
while true  
    tline = fgetl(fid);
        if ~ischar(tline); break; end   %end of file
   n=n+1;
   c{n}=strsplit(tline);
end


Names={c{3}{1},c{4}{1},c{5}{1}}; % the A A V

k=0;
for n=2:5:numel(c)
    k=k+1;    
    x(k)=str2num(c{n}{3});
    for j=1:numel(Names)
       AAV(j,:,k)=  cell2mat(cellfun(@str2num,c{n+j}(2:4),'un',0));
    end
end

推荐阅读