如何在Matlab中读取结构化文本文件并为其创建结构?
我有一个文本文件,其中包含许多时间步骤的结果。对于每个时间步骤,在第一行中保存一些基本信息,然后是包含此步骤其他数据的矩阵。矩阵大小在每个时间步都可能不同,并且不是预定义的 如何基于这样的文本文件创建结构 提前谢谢 另外,文本文件中的结果如下所示:如何在Matlab中读取结构化文本文件并为其创建结构?,matlab,file,text,structure,read-data,Matlab,File,Text,Structure,Read Data,我有一个文本文件,其中包含许多时间步骤的结果。对于每个时间步骤,在第一行中保存一些基本信息,然后是包含此步骤其他数据的矩阵。矩阵大小在每个时间步都可能不同,并且不是预定义的 如何基于这样的文本文件创建结构 提前谢谢 另外,文本文件中的结果如下所示: time= 4.3750000000000001E-004 3 7 4 1 4.9999989999999998E-004 0.0000E+00 0.00
time= 4.3750000000000001E-004 3 7 4 1 4.9999989999999998E-004
0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
0.0000E+00 0.0000E+00 5.6569E+08 7.5717E+08 5.6569E+08 0.0000E+00 0.0000E+00
0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
time= 5.0000000000000001E-004 3 5 3 0 4.9999989999999998E-004
0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
0.0000E+00 0.0000E+00 2.3593E+08 0.0000E+00 0.0000E+00
0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
time= 1.8125000000000001E-003 3 3 3 1 1.8749999000000001E-003
0.0000E+00 0.0000E+00 0.0000E+00
0.0000E+00 3.9138E+07 0.0000E+00
0.0000E+00 0.0000E+00 0.0000E+00
假设每个新的数据集以
time=
开始,以间隔线结束,您可以使用以下代码示例:
%Open text file for reading (assume file name is 'Data.txt').
f = fopen('Data.txt', 'r');
%Initialize main (store data) to empty matrix.
main = [];
%Initialize index to 1
i = 1;
while (~feof(f))
%Read single line from text file (as long string).
S = fgets(f);
if (strfind(S, 'time') > 0)
%Remove 'time= ' from the beginning of S.
S = strrep(S, 'time=', '');
%Convert string to array of numbers.
T = sscanf(S, '%f ');
%Store vector T to main(i).sub1
main(i).sub1 = T';
%Set A to empty matrix - prepare for filling with new data.
A = [];
%Read next line from text file (as long string).
S = fgets(f);
end
%Convert string to array of numbers.
L = sscanf(S, '%f ');
if (isempty(L) || feof(f))
%Store matrix A to main(i).sub2
main(i).sub2 = A;
%Advance i (data index) by 1.
i = i + 1;
else
%In case A is not empty, concatenate T to bottom of A.
A = [A; L'];
end
end
%Close file.
fclose(f);
结果:
>>main(1)
sub1 =
4.3750e-04 3.0000e+00 7.0000e+00 4.0000e+00 1.0000e+00 5.0000e-04
sub2 =
0 0 0 0 0 0 0
0 0 565690000 757170000 565690000 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
>>main(2)
sub1 =
0.00050 3.00000 5.00000 3.00000 0.00000 0.00050
sub2 =
0 0 0 0 0
0 0 235930000 0 0
0 0 0 0 0
>>main(3)
sub1 =
0.0018125 3.0000000 3.0000000 3.0000000 1.0000000 0.0018750
sub2 =
0 0 0
0 39138000 0
0 0 0
谢谢罗腾!我正在考虑以一种方式保存结构,即时间步的所有第一行将位于子结构“main(I).sub1”中,该子结构包含1x7个元素,每个时间步下的矩阵将是main(I).sub2包含MxN元素(m,N在每个时间步中变化)。这里我指的是第i个时间步。我猜我问题中数据的编辑版本不再显示文本文件的清晰结构…很抱歉错误地编辑了你的文章(看起来太凌乱了)。你能重新编辑你的帖子吗。明确如何从文本文件格式获取MxN元素。明确你喜欢的结构。请不要发布你的文本文件的所有内容-只发布足够清晰的内容。嗨,Rotem,没问题!现在结构在文章中已经很清楚了。我用Octave测试了我的更新代码,我希望它也能与Matlab一起工作。嗨,Rotem!非常感谢你!这正是我想要的!