Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在括号中读数字_Matlab - Fatal编程技术网

Matlab 在括号中读数字

Matlab 在括号中读数字,matlab,Matlab,我试图在Matlab中的括号之间输入数字。我使用的是OpenFoam软件,它生成了一个文件,可以在不同的时间步提取多个不同位置的速度(u,v,w)。我想输入这些速度,这样我就可以在一定的时间间隔内取它们的平均值。我的flow domain中有大约250个探针,这意味着我想为许多不同的时间步导入750个不同的数字。该文件如下所示: 链接到文件: 因此,我想将所有数字导入到一个大小为((时间步数)X(探针))的矩阵中 我发现了一个可以工作的代码并导入了这些数字,但这是一个非常手工的代码,我必须写

我试图在Matlab中的括号之间输入数字。我使用的是OpenFoam软件,它生成了一个文件,可以在不同的时间步提取多个不同位置的速度(u,v,w)。我想输入这些速度,这样我就可以在一定的时间间隔内取它们的平均值。我的flow domain中有大约250个探针,这意味着我想为许多不同的时间步导入750个不同的数字。该文件如下所示:

链接到文件:

因此,我想将所有数字导入到一个大小为((时间步数)X(探针))的矩阵中

我发现了一个可以工作的代码并导入了这些数字,但这是一个非常手工的代码,我必须写出probexx(I,:)=(str2double(split(out{I,1}{1,xx}));手动操作250次以使其工作。我想有一个更自动的代码,这样我可以很容易地改变探针的数量。有人能帮我吗

提前谢谢你

id = fopen('probe.dat','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
id=fopen('probe.dat','r');
t=textscan(id,'%s','delimiter',sprintf('\n'));
fclose(id);

out=regexp(t{1,1}(6:end-3),'(?我会这样做,假设头行之后的每一行都是一致的

id = fopen('probes.dat','r');
t = textscan(id,'%f','Delimiter',{'(',')',' '},'MultipleDelimsAsOne',true,'headerlines',5);
fclose(id);

numProbes = 254;
temp = reshape(t{1},numProbes*3+1,[]);

outData.time = temp(1,:).';
for ii = 1:numProbes
    rowIdx = (ii-1)*3+2:(ii-1)*3+4;
    outData.(num2str(ii,'probe%d')) = temp(rowIdx,:).';
end
基本上,将所有数字数据读入1个数组。使用多个分隔符功能并指定标题行的数量。接下来根据探测的数量进行重塑(在您的示例DAT中为254)

然后循环探测的数量,将其分配给具有所需变量名(probeXX)的结构的字段

这将为您留下一个表单结构:

outData = 

        time: [47x1 double]
      probe1: [47x3 double]
      probe2: [47x3 double]
      probe3: [47x3 double]
      ...
      probe254: [47x3 double]

为什么要写250次?为什么不能再写一个循环?