2012-06-27 24 views
-1

這可能是一個新手的問​​題:C#安全文件分析/解析策略

什麼是分析一個texfile最聰明的方式,如果看起來像這樣:

material polygon name 
0 
0 
9 
      -7   4.5   0 
      -7   9.166667   0 
      -2.333333   4.5   0 

我只在9 XYZ感興趣值。但是,我不知道一個安全的方式,因爲有時信息在一個單行writen這樣將它們過濾出來:

material polygon name 0 0 9 -7 4.5 0 -7 9.166667 0 -2.333333 4.5 0 

有時它被分隔用空格,有時標籤。 我猜0 0 9表示後面有9個值。 到目前爲止,香港專業教育學院只學解析TXT文件與.Split(' ')

  System.IO.StreamReader reader = new System.IO.StreamReader(_file); 
      string ln = reader.ReadLine(); 

      while (ln != null) 
      { 
       if (ln != null && ln[0] != '#') 
       { 
        string[] lnsplit = ln.Split(' '); 
        double X = lnsplit[bla]; 
        double Y = lnsplit[bla+1]; 
        double Z = lnsplit[bla+2]; 
       } 
       ln = occreader.ReadLine(); 
      } 
      occreader.Close(); 

但這當然只是如果該文件是嚴格的結構化工作。

+3

編程語言? – user1202136

回答

1

我會使用啓用了RegexOptions.SingleLine的正則表達式。喜歡的東西 ^material polygon name (?:\d\s*){3}(?:(-?\d+(?:\.\d+)?)\s*){9}$

\s運營商覆蓋多個行,並且可以使用所產生的Match對象拔出你想要的九個值。 (從

+1

「*重複最後一部分九次*「?DRY也適用於正則表達式,使用'pattern {x}'或'pattern {x,y}'。http://www.mikesdotnetting.com/Article/46/CSharp- Regular-Expressions-Cheat-Sheet –

+0

@sm Touche。編輯。 – Arithmomaniac

+0

做得好!Upvoted;) –

0

Groups[1]Captures屬性。使用該匹配浮點數正則表達式,見this question例如。 然後只需調用Regex.Match並跳過前三次比賽。