값으로 숫자를 이동할 수있는 도구를 만들고 있습니다. 프로세스를 시작하는 모든 값을 수정 값 (X, Y, Z)
1 버튼의 항목에 대한
3 텍스트 상자를 저장할C# regex replace
1 텍스트 박스에는 다음과 같은있다.
string regex = @"((E6POS [\w]*={)X\s([\d.-]*)\s*,*Y\s*([-.\d]*)\s*,Z\s*([-\d.]*))";
Regex r = new Regex(regex, RegexOptions.IgnoreCase);
그때 나는 경기 수 :
Match m = r.Match(txt.Text);
// once this is finished I parse through the matches and take the values and parse them.
while (m.Success)
{
this.Cursor = Cursors.WaitCursor;
try
{
xf = Convert.ToDecimal(m.Groups[3].ToString()) + Convert.ToDecimal(shiftX.Text);
yf = Convert.ToDecimal(m.Groups[4].ToString()) + Convert.ToDecimal(shiftY.Text);
zf = Convert.ToDecimal(m.Groups[5].ToString()) + Convert.ToDecimal(shiftZ.Text);
txt.ReplaceAll(m.Groups[0].ToString(), string.Format("{0} X {1},Y {2}, Z {3}", m.Groups[2].ToString(), xf.ToString(), yf.ToString(), zf.ToString()));
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
m = m.NextMatch();
}
}
this.Cursor = Cursors.Default;
내가이 작업을 수행 할 수있는 빠른 방법이 내가 버튼을 클릭하면
는, 먼저 정규식 일치를 발견? 이 작업을 수행하는 데 최대 30 초가 소요됩니다.
샘플 입력 텍스트 것
= {X 3887.44DECL E6POS XJV_MOVE_3, Y 0.00, Z 2594.00, 0.00, B 90.00, C 180.00, S 22, T 18, E1 2654.30, E2 0.0, E3 0.0 , E4 0.0, E5 0.0, E6 0.0} DECL E6POS XAX749_55_2654_3155075 = {X 4016.8440, Y -774.9973, Z 1437.1283, A 90.0000, B -45.0000, C -90.0000, S 22, T 26, E1 2654.3000, E2 0.0, E3 E20 0.0} DECL E6POS XAX755_55_2654_3155075 = {X 4016.8440, Y -810.9183, Z 1473.0493, A 90.0000, B -45.0000, C -90.0000, S 22, T 26, E1 2654.3000, E2 0.0, E3 0.0, E4 0.0, E5 0.0, E6 0.0} DECL FDAT FAX755_55_2654_3155075 = {TOOL_NO 1, BASE_NO 0, IPO_FRAME #BASE, POINT2 [] ""} DECL LDAT LAX755_55_2654_3155075 = {VEL 2.0, ACC 88.0, APO_DIST 100.0, APO_FAC 50.0, ORI_TYP #VAR} , FOLD 보낸 사람 1411
샘플 입력 및 출력을 제공하십시오. –
빨리 만들기위한 첫 번째 단계는 프로파일 링하는 것입니다. 그렇지 않으면 우리는 무엇을 빨리 만들어야한다고 생각합니까? – Snowbear
while 루프는 foreach (MatchM in r.Matches (txt.Text))로 대체 될 수 있습니다. 그러나 정규 표현식 자체와 파싱 된 값이 큰 문제로 의심됩니다. –