Wykasowanie w RichEdit numeracji linii w Delphi XE2

0

Witam wszystkich, zaznaczam że jestem początkującym użytkownikiem delphi, proszę o pomoc w rozwiązaniu problemu z wykasowaniem numeracji linii. do numerowania wykorzystuję poniższy kod który działa ok ale potrzebuje obecnie tak stworzoną numerację usunąć tz numery wyglądają tak N1 N2 N3 w zalezności jak ustawimy skok edit 2 i edit 1 numer początkowy. Problem polega na wyszukaniu znaku N plus jakaś wartość i wykasowaniu go w całym richedit.

procedure TForm1.RenumberClick(Sender: TObject);
var
p,l,d,s: integer;
begin
p:=0;
d:=0;
s:=strtoint(edit1.Text);
d:=strtoint(edit2.Text);
p:=s;
   for l:=0 to mainfrm.Lines.Count -1 do
  begin

   mainfrm.Lines[l] := 'N'+inttostr(p)+' '+ mainfrm.Lines[l];
   p:=p+d;

end;
end;

dodanie znacznika <code class="delphi"> - fp

1

Pokaż przykładowy tekst, z którego mają być usuwane te prefiksy; Poza tym zapoznaj się z kilkoma funkcjami RTL, jak Pos, PosEx i Delete; A do łączenia wielu zmiennych w jeden łańcuch skorzystaj z funkcji Format - jej wykorzystanie jest czytelniejsze i wygodniejsze, dając przy tym więcej możliwości formatowania łańcucha wyjściowego.

0

Dzięki za propozycje rozwiązania problemu podaję poniżej przykładowy kod

 % 
 :0058(AM 2007156 PULLY IDLER)
N25 G00 G21 G40 G99
N35 G50 S2200
N45 G10 P0 Z-63.7 
N55 T1212 
N65 G00 X0.0 Z10.0 
N75 G01 G98 Z-28.0 F0.2
N85 M82
N95 M69
N105 G01 Z1.5
N115 M30
N120 %

Jest to część programu do maszyn cnc często jest potrzeba przenumerowania i dlatego musi być usunięte poprzednie numerowanie wszystkie np N25 N30 N35 itd. Zaznaczam że nie może to być np usuń pierwsze 3 znaki musi je wyszukać bo cyfra czasami jest jedno do 5 cyfrowa, nie może też to być usuń pierwszy wyraz do spacji bo czasami tego numeru nie ma. Jak w wyszukiwaniu określić że chodzi mi o usunięcie N i cyfry za nią lub pierwszych wyrazów zaczynających się na N.

dodanie znacznika <code> - fp

3

Zakładając, że taki tekst jaki podałeś jako przykład jest w Memo1 to o taki efekt Ci chodzi? A i skoro jeszcze mamy dział Newbie, to tam należało by zadawać pytania o takie elementarne podstawy jak operacje na tekstcie.

var
  S : string;
  I, X : integer;
begin
  for I := 0 to Memo1.Lines.Count - 1 do
  begin
    S := Memo1.Lines[I];
    if Pos('N', S) = 1 then
    begin
      X := Pos(' ', S);
      if X > 0 then
      begin
        S := Copy(S, X + 1, MaxInt);
        Memo1.Lines[I] := S;
      end;
    end;
  end;
end;
0

Wielkie dzięki za pomoc w/w program do kasowania sprawdziłem i działa super ale nie do końca mi o to chodziło bo nie kasuje N25 które np N25G30 jest połączone z następną funkcją a powinno kasować samodzielny string N25 jak również połączony N25G30 powinno zostać tylko G30. Czyli powinno kasować znak zaczynający się na N do następnej litery nie cyfry, lub do spacji która czasami występuje.

1
var
  i, x: Integer;
  s: string;
begin
  for i:= 0 to Pred(Memo1.Lines.Count) do
  begin
    s:= Memo1.Lines[i];
    if (Length(s) > 0) and (s[1] = 'N') then
    begin
      x:= 2;
      while (x <= Length(s)) and (s[x] in ['0'..'9', ' ']) do
        Inc(x);
      if x > 2 then //linia zaczynala sie od N i  conajmniej 1 cyfry
      begin
        Delete(s, 1, x - 1);
        Memo1.Lines[i]:= s;
      end;
    end;
  end;
end;
0

już mam udało się to zrobić poniżej podaję kod

function TForm1.isNumeric(s:string):boolean;
var a:integer;
begin
a:=1;
while (a<=length(s)) and (s[a] in ['0'..'9','.','A'..'F','a'..'f']) do
inc(a);
result:=a>length(s);
end;

procedure TForm1.RemovenumberClick(Sender: TObject);
var
S : string;
I, X, dd, g, kon : integer;
begin
for I := 0 to mainfrm.Lines.Count - 1 do
begin
 S := mainfrm.Lines[I];
dd := length(mainfrm.Lines[I]);

if Pos('N', S) = 1 then
begin
For g := 2 to dd do
begin
if isnumeric(s[g]) then
begin
kon := g;
end else break;
end;

dziękuję za pomoc już mam gotowe

dodanie znacznika <code class="delphi"> - fp

0

To naprawdę ciekawe co piszesz że sobie poradziłeś bo kod który podałeś jest totalnie nielogiczny :)

0
kAzek napisał(a):

To naprawdę ciekawe co piszesz że sobie poradziłeś bo kod który podałeś jest totalnie nielogiczny :)

Wyżej napisałem że jestem początkującym to moje rozwiązanie może być nie logiczne ale działa, jeśli masz lepsze to proszę pochwal się.

1 użytkowników online, w tym zalogowanych: 0, gości: 1