Matlab:将文本文件的一部分转换为矩阵

时间:2014-11-06 08:24:58

标签: matlab

需要导入的文件如下所示:

 MASS INFORMATION:
  TOTAL MASS =  12197.    
  CENTROID (X,Y,Z) =  30.000      0.0000      8.5809    
  MOMENT OF INTERTIA ABOUT ORIGIN:
    IXX = 0.10651E+07    IYY = 0.18383E+08    IZZ = 0.17318E+08
    IXY =  0.0000        IYZ =  0.0000        IZX =-0.31397E+07

 ROW     1 MATRIX     1
   0.69366833E+09  0.12654965E+09   0.0000000     -0.22831656E+09   0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
  -0.20667723E+09   0.0000000       0.0000000     -0.24801268E+09 -0.24549730E-05
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
  -0.48699110E+09 -0.12654965E+09   0.0000000       19696122.       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    

 ROW     1 MATRIX     2
    946.16939       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    93.879840       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    349.12106       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    

 ROW     2 MATRIX     1
   0.12654965E+09  0.26613603E+10   0.0000000      -73506929.       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000     -0.26127500E+10   0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
  -0.12654965E+09  -48610261.       0.0000000      -73506929.       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    

 ROW     2 MATRIX     2
    0.0000000       946.16939       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       93.879840       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       349.12106       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    

也就是说,Matrix 1Matrix 2的每一行都包含在此文件中。 但由于文本文件格式不正确,将其转换为矩阵然后导入数据是不可能的。

我想: 1.找到每个ROW X MATRIX 1 2.将下一行N行转换为矩阵,以便我们轻松读取其数据。具体来说,我需要第1和第2列。因此,我将前2列转换为新矩阵,然后循环遍历它并将其转换为一行。

那么,如何将ROW X MATRIX 1下方的数据转换为矩阵?

更新: 预期输出,假设我只想要ROW 1 MATRIX 2

 row2_matrix1=
   0.12654965E+09  0.26613603E+10   0.0000000      -73506929.       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000     -0.26127500E+10   0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
  -0.12654965E+09  -48610261.       0.0000000      -73506929.       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000    
    0.0000000       0.0000000       0.0000000       0.0000000       0.0000000  

以上是NXN矩阵。 所以稍后我可以轻松地操纵这个矩阵中的日期。

1 个答案:

答案 0 :(得分:1)

看看这是否适合你 -

fid = fopen(inputfile); %// Edit inputfile to the path of your text file
tline = fgetl(fid);
num_array = [];
while ischar(tline)    
    if ~isempty(tline)
        tline_valid = strtrim(tline);
        if isstrprop(tline_valid(1),'digit') || tline_valid(1)=='-'
            num_array{end+1} = tline_valid; %#ok<SAGROW>
        end
    end
    tline = fgetl(fid);
end
fclose(fid);

cell_data = cellfun(@(x) strsplit(x), num_array,'un',0)
out_allcols = str2double(vertcat(cell_data{:}))
out = out_allcols(:,1:2)