如何在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!非常感谢你!这正是我想要的!