2014-11-06 2 views
1

файл нужно импортировать, выглядит так: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  

То есть, everyline из Matrix 1 и Matrix 2 содержится в этом файле. Но из-за плохого формата текстового файла невозможно превратить его в матрицу, а затем импортировать данные.

Я хочу: 1. найдите все ROW X MATRIX 1 2. Включите следующие N строки в матрицу таким образом, мы можем прочитать его данные легко. В частности, мне нужны 1-й и 2-й столбцы. Поэтому я превращаю первый столбец в новую матрицу, а затем прокручиваю ее и превращаю в одну строку.

Итак, как я могу превратить данные ниже ROW X MATRIX 1 в матрицу?

UPDATE: ожидается выход, скажем, я просто хочу 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. Так что я могу легко манипулировать датой в этой матрице.

+0

Если я правильно понимаю, вы заботитесь обо всем в этом файле данных, но об этих таблицах. Все, что вам нужно сделать, это пропустить строки, пока ваша следующая строка не будет содержать строку 1 и не будет читать все до конца. [this] (http://www.mathworks.co.uk/help/matlab/ref/dlmread.html) руководство, вероятно, что-то, что вас заинтересует. Кроме того, вы можете сохранить номера строк и матриц, когда чтение строки. синтаксический анализ строк и разделение могут помочь вам в этом. – ha9u63ar

+0

Можете ли вы опубликовать ожидаемый результат? – Divakar

+0

Значит, вы за данный текстовый файл выведете четыре матрицы? – Divakar

ответ

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) 
+0

Обязательно используйте 'формат long g', чтобы видеть выходы, поскольку значения в' out' кажутся различными между «E10s» и '100s'. – Divakar

+0

Как вы можете найти «ROW X MATRIX 1»? Я вообще не видел этого в коде. – cqcn1991

+0

@ cqcn1991 Я размещаю цифры - от 0 до 9 и '-' для обнаружения строк, начинающихся с цифр. Разве это не хорошее предположение для вашего входного текстового файла? – Divakar

Смежные вопросы