2014-11-09 29 views
0

這部分數據:Matlab的:獲得一個文本的一部分的行數文件

GLOBAL DOF SET = 
     1  3  4  5  6 33 35 36 37 38 
    65 67 68 69 70 97 99 100 101 102 
    129 131 132 133 134 161 163 164 165 166 

GLOBAL DOF SET NODES, LABELS = 
     1 UX   1 UZ   2 UX   2 UZ   3 UX 
     3 UZ   4 UX   4 UZ   5 UX   5 UZ 
     6 UX   6 UZ   7 UX   7 UZ   8 UX 
     8 UZ   9 UX   9 UZ   10 UX   10 UZ 
     11 UX   11 UZ   12 UX   12 UZ   13 UX 
     13 UZ  

MASS INFORMATION: 
    TOTAL MASS = 12197.  
    CENTROID (X,Y,Z) = 30.000  0.0000  8.5809  
    MOMENT OF INTERTIA ABOUT ORIGIN: 
    IXX = 0.10651E+07 IYY = 0.18383E+08 IZZ = 0.17318E+08 
    IXY = 0.0000  IYZ = 0.0000  IZX =-0.31397E+07 

我怎樣才能獲得GLOBAL DOF SET NODES, LABELS =部分的行數?

在這種情況下,編號爲6

我認爲這可能是找到GLOBAL DOF SET NODES, LABELS =行(使用strfind?)和結束空行。但是如何?

+0

您可以使用MATLAB'regexp'。試試這個 - ''regexp(your_line,'\ S(GLOBAL.DOF.SET.NODES.LABELS。*)*');'如果沒有匹配,繼續從1開始遞增一個計數器。只要你打一場比賽就停下來,比如一個非空的矩陣,然後讓你得到你的線路號碼。 – ha9u63ar 2014-11-09 19:15:24

+0

您的最後一段的確確定了正確的方式來做到這一點。你卡在哪裏?打開文件?將內容作爲行的單元數組獲取?調用'strfind'? – 2014-11-09 19:15:43

+0

@BenVoigt,我不知道如何編寫'最後一行是空行','第一行是xxx'。 – cqcn1991 2014-11-10 07:13:50

回答

0

事實上,您可以使用strcmp或strfind或regexp來比較字符串。關鍵是要得到一個字符串進行比較。這是通過使用fgetl函數逐行讀取文件來完成的。

# Open your file and assign it's handel to fileID: 
fileID = fopen('yourFile.txt','r');  

# Let's use the strcmp method and define your strings you test with: 
yourFirstLine = ' GLOBAL DOF SET NODES, LABELS ='; 

# Your second line, in this case and empty line: 
yourSecondLine = ''; 

# Use the variable flag to signal that you found your first line: 
flag = 0; 
iLine = 0; 

while ~feof(fileID) 

    currentLine = fgetl(fileID); 

    # Check if header line matches with the current line and store in iMatchOne: 
    if strcmp(currentLine,yourFirstLine) 
     iMatchOne = iLine; 
     flag = 1; 
    end 

    # If you already found your first line it's time to start testing for the second line. 
    if flag == 1 
     if strcmp(currentLine,yourSecondLine) 
      iMatchTwo = iLine; 
      # You could decide here to break, because more matches with '' will be found! 
     end 
    end 
    iLine = iLine + 1; 
end 

希望這有助於!

非必要: (也可以在第一次檢查時添加一個if標誌== 0另一種方法是在找到第一行時打破while循環,然後在新的while循環中繼續並請執行第二行的測試,注意直到您關閉/重新打開或手動重置當前行位置才能重置fgetl檢索的班輪編號。)

+0

'iLine'從哪裏來?你是否假設它是一個從零開始並在循環內部增加的變量? – 2014-11-10 13:23:13

+0

乾杯,馬虎,固定! – Aditya 2014-11-10 22:04:41

相關問題