matlab - 在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
,但文件结构在这里不起作用。
如何以我可以使用的形式阅读这样的文本文件?
解决方案
所以在这个的帮助下,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
推荐阅读
- javascript - 无法隐藏/更改反应原生组件的可见性
- eclipse - 使用 Eclipse 将 Java 类转换为 Kotlin 类
- javascript - vue.js 使用行跨度渲染表
- linq - 在 Linq 复合体中使用 GroupBy
- angular - Angular - 如何在点击处理程序中访问 nativeElement
- rust - 为什么不满足特征绑定默认值?
- java - 将按钮添加到listview firebase arraylist strings android
- c - 如何在编译时定义由来自不同模块的静态(私有)结构组成的结构数组?
- c# - 如何在水晶报表中隐藏一个部分
- html - Gitignore 生成的 pdf 但不是所有的 pdf