1

次のいずれかのように見えるgcodeの行からデータを抽出しようとしています:

G01 X10. Y20. Z3.0 F15.
G00X.500Y-10.
G01 Y10.X20.150

これで、これをグループと完全に一致させる正規表現をすでに作成しました。

(G|M|X|Y|Z|I|J|K|F)(?<val>-?\d*\.?\d+\.?)

そして、それはうまく機能しているようです。結果ごとに 3 つのグループのデータを取得します。例:

G01 X10. Y20. Z3.0 F15.
G01  |  G  |  01
X10. |  X  |  10.
Y20. |  Y  |  20.
Z3.0 |  Z  |  3.0
F15. |  F  |  15.

私がやりたいのは、入力文字列に含まれる値を確認して、データを抽出して位置コマンドを作成できるようにすることです。上記の例を見てみましょう。X、Y、Z の値だけを抽出して、それらのベクトルを作成できるようにします。これは、3 つの値がすべてある場合は簡単ですが、入力文字列がG01 X10. Y5.0.

4

2 に答える 2

1

これを行うために、各正規表現の一致を繰り返すことにし、最初のグループが X、Y、Z のいずれであるかを確認し、switch ステートメントを使用して 3D ベクトルの値を変更しました。他の誰かが同様のものを作成したい場合のコードは次のとおりです。

public static void ExtractAll(string gcode)
{
    dataPos = Vector3.zero;

    var match = Regex.Matches(gcode, @"(G|M|X|Y|Z|I|J|K|F)(?<val>-?\d*\.?\d+\.?)");
    for (int i = 0; i < match.Count; i++)
    {
        switch (match[i].Groups[1].Value)
        {
            case "X":
                dataPos.x = float.Parse(match[i].Groups["val"].Value);
                break;
            case "Y":
                dataPos.y = float.Parse(match[i].Groups["val"].Value);
                break;
            case "Z":
                dataPos.z = float.Parse(match[i].Groups["val"].Value);
                break;
        }
    }
    print(dataPos);
}

正規表現を使用するには、名前空間を含める必要があることに注意してください。 using System.Text.RegularExpressions;

于 2016-07-07T18:45:21.543 に答える