Как загрузить специально отформатированный файл данных в Matlab? - PullRequest
0 голосов
/ 07 сентября 2011

Мне нужно загрузить файл данных test.dat в Matlab.Содержимое файла данных выглядит как

* a682 1233 ~ 0.2
* a2345 233 ~ 0.8 345 ~ 0.2 4567 ~ 0.3
* a3457 345 ~ 0.9 34557 ~ 1.2 34578 ~ 0.2 9809~ 0,1 2345 ~ 2,9 23452 ~ 0,9 334557 ~ 1,2 234578 ~ 0,2 19809 ~ 0,1 23452 ~ 2,9 3452 ~ 0,9 4557 ~ 1,2 3578 ~ 0,2 92809 ~ 0,1 12345 ~ 2,9 232452 ~ 0,9 33557 ~ 1,6 23478 ~ 0,6 198099 ~ 2,1 234532 ~ 2,9…

Как прочитать этот тип файла в matlab и использовать такие термины, как * 2345, для идентификации строки, которая ссылается на соответствующие термины, включая 233 ~ 0,8 345 ~ 0,2 4567 ~ 0,3

Спасибо.

1 Ответ

0 голосов
/ 07 сентября 2011

Поскольку каждая из строк имеет разный размер, вы должны либо создать массив ячеек, структуру, либо иметь дело с добавлением NaN или нуля в матрицу.Я решил использовать массив ячеек, надеюсь, что все в порядке!Если кто-то лучше с regexp, чем я, пожалуйста, прокомментируйте, ячейки вывода теперь не идеальны (т.е. показывают 345 ~ вместо 345 ~ 0.9), но я уверен, что это небольшое исправление.Вот код:

datfile = 'test.dat';
text = fileread(datfile);

row1 = regexp(text,'*[a-z]?\d+','match');
data(:,1) = row1';

row2 = regexp(text,'*[a-z]?\d+','split');
row2 = [row2(:,2:end)'];
for i = 1:size(row2,1)
   data{i,2} = regexp(row2{i},'\d+\S\d+\s','split');
end

Это создает массив ячеек данных, где первый столбец каждой строки - это ваш * a682 идентификатор, а второй столбец каждой строки - это ячейка с вашими значениями данных.Чтобы получить их, вы можете использовать:

data{1} 

для отображения идентификатора

data{1,2}

для отображения содержимого ячейки

data{1,2}{1}

для отображения конкретной точки данных

Это должно работать и относительно просто!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...