2014-06-24 65 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

相關問題