-1

これはおそらく初心者の質問です:

次のように見える場合、texfileを解析する最もスマートな方法は何ですか:

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

私は9つのxyz値にのみ興味があります。ただし、情報が次のように 1 行で書き込まれることがあるため、それらを除外する安全な方法がわかりません。

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();

ただし、これはもちろん、ファイルが厳密に構造化されている場合にのみ機能します。

4

2 に答える 2

1

正規表現をRegexOptions.SingleLine有効にして使用します。何かのようなもの ^material polygon name (?:\d\s*){3}(?:(-?\d+(?:\.\d+)?)\s*){9}$

\s演算子は複数の行をカバーし、結果のオブジェクトを使用して必要Matchな 9 つの値を引き出すことができます。( のCapturesプロパティからGroups[1]

于 2012-06-27T17:01:18.427 に答える
0

浮動小数点数に一致する正規表現を使用してください。たとえば、この質問を参照してください。次に、Regex.Match を呼び出して、最初の 3 つの一致をスキップします。

于 2012-06-27T17:05:15.723 に答える