在括号中读数字

时间:2018-02-26 12:41:29

标签: matlab

我正在尝试在Matlab中的括号之间导入数字。我正在使用OpenFoam软件生成一个文件,该文件在不同的时间步长的许多不同位置提取速度' s(u,v,w)。我想导入这些速度,所以我可以在一定时间内取平均值。我的流域中有大约250个探测器,这意味着我想为许多不同的时间步骤导入750个不同的数字。该文件如下所示:

enter image description here 链接到文件: https://drive.google.com/file/d/1CuoflLADasUybsR4UJf1PQBUcGD0SsVb/view?usp=sharing

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

我发现了一个可行的代码并导入了这些数字,但这非常手动。我必须写出probexx(i,:) =(str2double(split(out {i,1} {1,xx}} )))&#39 ;;手动250次以使其工作。我想有一个更自动的代码,所以我可以轻松地更改探测的数量。有谁可以帮助我?

提前谢谢!

  let body = {
    "grant_type": "authorization_code",
    "client_id": Meteor.settings.public.mailchimp.clientId,
    "client_secret": Meteor.settings.private.mailchimp.secret,
    "redirect_uri": Meteor.settings.public.mailchimp.redirect_uri,
    "code": code,
  }

HTTP.call("POST",
        `https://login.mailchimp.com/oauth2/token`, {
          data: body,
          headers: {
            "Content-Type": "application/json",
            "Content-Encoding": "",
            "User-Agent": "oauth2-draft-v10"
          },
          npmRequestOptions: {
            "gzip": true //Required to read error
          }
        }

... Code continued

1 个答案:

答案 0 :(得分:2)

我会这样做,假设每一行在标题行之后是统一的。

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]