Matlab 在括号中读数字
我试图在Matlab中的括号之间输入数字。我使用的是OpenFoam软件,它生成了一个文件,可以在不同的时间步提取多个不同位置的速度(u,v,w)。我想输入这些速度,这样我就可以在一定的时间间隔内取它们的平均值。我的flow domain中有大约250个探针,这意味着我想为许多不同的时间步导入750个不同的数字。该文件如下所示: 链接到文件: 因此,我想将所有数字导入到一个大小为((时间步数)X(探针))的矩阵中 我发现了一个可以工作的代码并导入了这些数字,但这是一个非常手工的代码,我必须写出probexx(I,:)=(str2double(split(out{I,1}{1,xx}));手动操作250次以使其工作。我想有一个更自动的代码,这样我可以很容易地改变探针的数量。有人能帮我吗 提前谢谢你Matlab 在括号中读数字,matlab,Matlab,我试图在Matlab中的括号之间输入数字。我使用的是OpenFoam软件,它生成了一个文件,可以在不同的时间步提取多个不同位置的速度(u,v,w)。我想输入这些速度,这样我就可以在一定的时间间隔内取它们的平均值。我的flow domain中有大约250个探针,这意味着我想为许多不同的时间步导入750个不同的数字。该文件如下所示: 链接到文件: 因此,我想将所有数字导入到一个大小为((时间步数)X(探针))的矩阵中 我发现了一个可以工作的代码并导入了这些数字,但这是一个非常手工的代码,我必须写
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次?为什么不能再写一个循环?