2014-06-24 39 views
0

我在MATLAB中创建了一个优化ANSYS研究的代码,所以我想检查ANSYS输出文件并查看结果是否可接受。用Matlab从文件读取特定行并将它们转换为数值

此代码具有ANSYS用于创建模型的输入参数。这些参数在每次迭代时都会发生变化,因此每次迭代时都会创建一个不同的输出文件。

让我们来更具体。下面,存在输出文件的一个例子:

  • 线1个布拉布拉
  • 线2布拉布拉

  • 。 。 。

  • 线10000最大值
  • 线10001值1 2.31 4.56 5.69 8.64 0.25 9.70
  • 线35000个最大值
  • 线35001 values2 2.25
  • 线70000总値3 2503.4

所有我想要做的是,以查看是否在粗体的前两个值都低于问题的限制(即9.70 < 15和2.25 < 7)。 如果是,则将第三个值以粗体存储在矩阵中。 如果不是,请转到下一个迭代。

我很新的编程和Matlab指令有点混乱。

任何想法都会受到欢迎!

在此先感谢!

**编辑:**这是我的全部代码至今:

X1=linspace(26,60,3)'; 
    X2=linspace(104,70,3)'; 
    R=linspace(3,10,3)'; 
    vec={X1',X2',R'}; 
    combs=combvec(vec{:})'; 

    seqv=zeros(i,1); 
    tic 

    for i=1:length(combs); 
     fid=fopen('C:\Users\vaioss\Desktop\ergasia ymk\test\aa.txt','w+'); 
     fprintf(fid,'*SET,X1,%7.4f \r\n',combs(i,1)); 
     fprintf(fid,'*SET,X2,%7.4f \r\n',combs(i,2)); 
     fprintf(fid,'*SET,R,%7.4f \r\n',combs(i,3)); 
     fclose(fid); 

     fid=fopen('C:\Users\...','r+'); 
     fclose(fid); 

     dos('"C:\Program Files\ANSYS Inc\v150\ANSYS\bin\winx64\ansys150.exe" -p ...');  

     fid=fopen('C:\Users\...','r'); 

     for j=1:10152; 
      tline=fgetl(fid); 
     end 

     match = textscan(tline, '%s %f %f %f %f %f', '\n')'; 
     seqv(i) = cell2mat(match(6,1)); 

     if seqv(i)>67.2887; 
      fclose(fid); 
      continue 
     end 


    end 
    fclose all; 
    toc 
+0

你应该展示你到目前为止的尝试。 –

+0

这取决于你想要的值是否总是在同一行,并且这些行的结构总是相同的。如果是这样,请点击'textscan'。 – nkjt

+0

@nkjt我用'textscan'尝试过,但不幸的是,每次迭代时所需的线条都会不断变化。有没有办法逐行扫描文件来搜索具有所需内容的行? – dolving

回答

0

如果你有一个未知号码前你想要的信息不同格式的线条,可能是最简单的方法就是沿着这些线

1)使用fgetl在同一时间(很明显,如果你知道你可以跳过第3000行或任何去取线之一,这样做)

2)使用strfind为ch eck如果你点击了values1一行。如果是这样,请解析该行并检查该值是否在限制范围内。

然后重复values2values3(如果需要),或者移动到下一个文件并重复。如果列表中有文件不包含所有这些字符串,那么您还需要一些方法来处理在找到它们之前触发eof的情况。

+0

@ nkjt非常感谢你是最棒的! – dolving

相关问题