Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Lokaler Variablen Fehler (https://www.delphipraxis.net/60464-lokaler-variablen-fehler.html)

philiph 7. Jan 2006 08:15


Lokaler Variablen Fehler
 
Hallo,

ich habe ein Problem (er sagt:[Warnung] Unit1.pas(104): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein) mit diesem Stück Code finde es aber nicht könnte mir vieleicht jemand helfen?


Delphi-Quellcode:
for i := 1 to length(a) do
if a[i] in Edit2.text then
begin
delete(a, i, 1);
end;
RichEdit1.Lines.Add(a);
end else
RichEdit1.Lines.Add(a);
end

marabu 7. Jan 2006 08:23

Re: Lokaler Variablen Fehler
 
Hallo.

die Laufvariable für deine Schleife muss in deiner Delphi Version im gleichen Block deklariert sein, in dem sich auch die Schleife befindet:

Delphi-Quellcode:
procedure AddCleanLine;
var
  i: Integer;
begin
  for i := Length(a) downto 1 do
    if Pos(a[i], Edit2.text) > 0 then
      Delete(a, i, 1);
  RichEdit1.Lines.Add(a);
end;
Grüße vom marabu

philiph 7. Jan 2006 08:40

Re: Lokaler Variablen Fehler
 
Also den ungefähren Fehler hab ich verstanden aber,

wenn in edit2 z.b steht: #

und der zu Filternde Text(das ist in meinem Falle ja der Sinn der FOR Schleife): #T#e#s#t

ist dann macht der Code daraus das:

T#e#s#t

Te#s#t

Tes#t

Test

wieso?


PS:danke für die Hilfe

marabu 7. Jan 2006 09:05

Re: Lokaler Variablen Fehler
 
Das muss ein ganz anderer Code sein, mit dem du dieses Ergebnis produzierst. Hier habe ich dir einen besseren Code entwickelt. Er kapselt die Funktionalität in einer wiederverwendbaren Prozedur und achtet darauf, dass bei größeren Strings der Speichermanager durch das zeichenweise Löschen nicht unnötig gequält wird, indem ich die gültigen Zeichen einfach verschiebe.

Delphi-Quellcode:
procedure AddCleanLine(strings: TStrings; const sLine, sFilter: string);
var
  i, iLength: Integer;
  sClean: string;
begin
  iLength := Length(sLine);
  sClean := sLine;
  i := 1;
  while i <= iLength do
    if Pos(sClean[i], sFilter) > 0 then
    begin
      Move(sClean[Succ(i)], sClean[i], iLength - i);
      Dec(iLength);
    end else Inc(i);
  strings.Add(Copy(sClean, 1, iLength));
end;

procedure TDemoForm.AddButtonClick(Sender: TObject);
begin
  AddCleanLine(RichEdit1.Lines, '#T#e#s#t', Edit2.Text);
end;
marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz