Импорт чисел в скобках

Я сделал файл данных из OpenFoam, который извлекает скорость в определенном месте во времени. Я хотел бы извлечь две из этих скоростей и взять среднее время. Например, я хотел бы извлечь числа: 0,0539764, 0,0104665, 0,00201741 и т. д. из зонда 0. И извлечь числа: 0,690374, 0,711402, 0,699848 и т. д. из зонда 1. Как это можно сделать в Matlab?

Я делал что-то подобное раньше, но тогда пробники состояли только из 1 числа (без скобок), теперь из 3 чисел, вписанных в скобки, я не знаю, что мне делать.

Помощь очень ценится.

Ссылка на весь файл: https://drive.google.com/file/d/0B9CEsYCSSZUSdjFzYXVFc1RhM0k/view?usp=sharing введите здесь описание изображения


person ursmooth    schedule 01.11.2017    source источник
comment
Научитесь использовать регулярные выражения. В MATLAB используйте функцию regexp. Возможность использовать регулярные выражения сослужит вам хорошую службу независимо от того, какой тип работы по программированию вы выполняете.   -  person buzjwa    schedule 01.11.2017


Ответы (1)


Это создаст две матрицы probe0 и probe1. Вы можете индексировать только первый столбец каждого, если это все, что вам нужно.

id = fopen('testprobe.txt','r');
t = textscan(id,'%s','delimiter',sprintf('\n'));
fclose(id);

out = regexp(t{1,1}(6:end-3), '(?<=\()[^)]*(?=\))', 'match', 'all');

probe0 = zeros(size(out,1),3);
probe1 = zeros(size(out,1),3);

for i = 1:size(out,1)
    if ~isempty(out{i,:})
        probe0(i,:) = (str2double(split(out{i,1}{1,1})))';
        probe1(i,:) = (str2double(split(out{i,1}{1,2})))';
    else
        probe0(i,:) = [0,0,0];
        probe1(i,:) = [0,0,0];
    end

end
person Brad Day    schedule 02.11.2017
comment
Спасибо за ваш ответ, он почти работает, матрица/вектор, похоже, не совпадают. Ваш код создает вектор 4361x1, а [0,05:0,05:218,5]; является вектором 4370x1, поэтому отсутствует 9 чисел. У вас есть идеи, в чем может быть проблема? Я изменил код на regexp(t{1,1}(5:end)........ - person ursmooth; 04.11.2017