Импорт matlab с пробелом и разделителем табуляции - PullRequest
0 голосов
/ 15 мая 2018

Мне нужно импортировать текстовый файл в Matlab, который имеет этот формат

text text text           
1           0 1 2 3
            4 5 6 7
2           10 11 15 18
            15 1 18 3

Первый столбец отделен вторым разделителем табуляции, а остальные данные разделены пробелом,Я попытался импортировать его, используя это:

g = importdata('file.txt',delimiterIn,headerlinesIn);
delimiterIn = ' ';
headerlinesIn = 1;

, но затем извлеченная таблица выглядит следующим образом:

text text text  
1 0 1 2 3
4 5 6 7 nan
2 10 11 15 18
15 1 18 3 nan

Мне нужна таблица, которая поддерживает формат, с первым столбцомg.data, а затем все остальные.

Я хочу выводную матрицу, такую ​​как

1 0 1 2 3
  4 5 6 7
2 10 11 15 18
  15 1 18 3

Тогда, если мне нужно извлечь данные, представленные 2 в первом столбце, яможно поместить его в другую матрицу со значениями

10 11 15 18
15 1 18 3

каждое число внутри ячейки матрицы

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Раствор может быть:

fid = fopen('test.txt');
M = {[]};Midx=1;
l = fgetl(fid); %header
l = fgetl(fid);
while ~isnumeric(l)
    idx = str2double(l(1));
    if ~isnan(idx)
        Midx=idx;
        M{Midx}=[];
        l = l(2:end);
    end
    val = cell2mat(textscan(l,'%f'))';
    M{Midx}=[M{Midx};val];
    l=fgetl(fid);
end
fclose(fid);
0 голосов
/ 15 мая 2018

Может быть, слишком прагматично, но это может помочь:

for i=1:size(A,1)
  if isnan(A(i,end))==1
    A(i,2:end) = A(i,1:4);
    A(i,1) = NaN;
  end
end

for i=1:size(A,1)
  if A(i,1)==2
    B = A(i:i+1,2:end);
  end
end
...