Próbuję zrobić program który w tekście np (G01 X100.0 Z50.0) wyszukuje X i cyfrę i Z i cyfrę po to żeby wydobyć cyfry które potem posłużą do rysowania w canvas. Mam problem w poniższym kodzie który może jest nie fachowo napisany bo jestem początkującym, z przypadkiem kiedy pętla natrafia na linię gdzie NIE MA X i Z i jak zrobić żeby program przeskoczył do następnej linii i jeśli jest tylko jedna X lub Z to program ma pozostawić wartość tej której NIE MA z poprzedniej linii. Obecnie brak Z lub X powoduje błąd. Może ktoś już się zajmował tym zadaniem, może moje podejście do tego zadania jest błędne to proszę o jakieś rady jak do tego najlepiej podejść.
procedure TForm1.lb711Click(Sender: TObject);
var
liczbax, liczbaz: double;
I, xx, zz, x2, z2: integer;
// g:extended;
text: string;
Z, X: string;
begin
form9.image1.Picture:= nil;
form9.image1.Canvas.Pen.Style :=psDashDot;
form9.image1.Canvas.MoveTo(500, 0);
form9.image1.Canvas.lineTo(500, 600);// rysuje oś X
form9.image1.Canvas.MoveTo(0, 400);
form9.image1.Canvas.lineTo(1000, 400);// rysuje oś Z
form9.image1.Canvas.Pen.Width :=2;
form9.image1.Canvas.Pen.Style :=pssolid;
// showmessage(inttostr((ActiveMDIChild as TForm2).syndt1.Lines.Count));
form9.Show;
form9.image1.Canvas.MoveTo(180, 150);// poczatek malowania linii
//Z := '';
for I := 0 to (ActiveMDIChild as TForm2).syndt1.Lines.Count -1 do
begin
text := (ActiveMDIChild as TForm2).syndt1.Lines[I]; // pobranie zawartości linii
if length(TEXT) <> 0 then
begin
try
Z := TRegEx.Match(text, 'Z[+-]?[0-9]+(\.[0-9]+)').Value; //pobranie z tekstu np Z100.6
X := TRegEx.Match(text, 'X[+-]?[0-9]+(\.[0-9]+)').Value;
delete(Z, 1, 1);// wymazanie z z pobranego tekstu np (Z100.0)pozostaje 100.0
delete(X, 1, 1);
except
//on E: ERegularExpressionError do begin
// Syntax error in the regular expression }
end;
x := stringreplace((x), '.', ',', [rfreplaceall, rfignorecase]);//zmiana kropki na przecinek
showmessage(x);
liczbax := strtofloat(x);
xx := round(liczbax*100); //likwidacja liczb po przecinku z ich przesunieciem o dwa miejsca
z := stringreplace((z), '.', ',', [rfreplaceall, rfignorecase]);
liczbaz := strtofloat(z);
zz := round(liczbaz*100);
form9.image1.Canvas.LineTo(xx, zz);
end;
end;
end;