我有一个如下格式的文本文件:
…
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),这样重复了一遍又一遍。
我想阅读这个文本文件,这样我将有一个向量(1xn)的x
值,和一个3D数组(3x3xn)的a, a,V值作为x的函数。
我所尝试的是使用fgetl(fid)
逐行读取,但这给了我每行一个我无法使用的字符向量。我也尝试过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