【问题标题】:Import numbers between parentheses在括号之间导入数字
【发布时间】:2024-04-26 21:05:01
【问题描述】:

我从 OpenFoam 制作了一个数据文件,可以及时提取某个位置的速度。我想提取其中两个速度并取平均时间。例如,我想从探针 0 中提取数字:0.0539764,0.0104665,0.00201741 等。并从探针 1 中提取数字:0.690374、0.711402、0.699848 等。如何在 Matlab 中完成?

我之前做过类似的事情,但是当时探针只包含 1 个数字(没有括号),现在它包含 3 个括号中的数字,我不知道我应该做什么。

非常感谢您的帮助。

链接到整个文件:https://drive.google.com/file/d/0B9CEsYCSSZUSdjFzYXVFc1RhM0k/view?usp=sharing

【问题讨论】:

  • 学习使用正则表达式。在 MATLAB 中使用 regexp 函数。无论您从事哪种类型的编程工作,能够使用正则表达式都会为您提供良好的服务。

标签: matlab textscan


【解决方案1】:

这将创建两个矩阵probe0probe1。如果您只需要每列的第一列,则可以只索引它。

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

【讨论】:

  • 感谢您的回答,它几乎可以工作了,矩阵/向量似乎不匹配。您的代码生成一个 4361x1 向量,而 [0.05:0.05:218.5];是一个 4370x1 的向量,所以缺少 9 个数字。您对可能出现的问题有任何想法吗?我将代码调整为 regexp(t{1,1}(5:end)............