![]() |
unbekannte zeichen löschen...
hi, ich möchte aus einem richedit alle unbekannten zeichen löschen, und den rest in ein zweites richedit kopieren...
ich hatte mir das so gedacht:
Delphi-Quellcode:
aber es gibt immer einen error...bei der if abfrage...
procedure TForm1.Los1Click(Sender: TObject);
var i,j:integer; Buchstaben, Zahlen, Interpunktion, Mathe, Sonderzeichen:set of char; zeichen:set of char; begin buchstaben:= ['a'..'z','A'..'Z','ß','ä','Ä','ö','Ö','ü','Ü']; zahlen:= ['1'..'9']; Interpunktion:= ['.',',',':',';','!','?','-','_']; Mathe:= ['²','³','+','-','*','/','(',')','{','}','{','}','%','=']; Sonderzeichen:= ['^','°','"','§','$','&','/','´','`','~','#','''','@','€','<','>','|',#13,' ']; zeichen:= buchstaben + zahlen + interpunktion + mathe + sonderzeichen; for i:=0 to RichEdit1.Lines.Count-1 do for j:=0 to Length(RichEdit1.Lines[i]) do if RichEdit1.Lines[i][j] in zeichen then RichEdit2.Lines[i]:=RichEdit2.Lines[i]+RichEdit1.Lines[i][j]; end; |
Re: unbekannte zeichen löschen...
Hi!
Sagst du uns auch, welcher Error da kommt? Ciao Frederic |
Re: unbekannte zeichen löschen...
öhh, moment...
Zugriffsverletzung bei der Adresse 00401DEC bei Lesen von Adresse FFFFFF |
Re: unbekannte zeichen löschen...
Hi!
dein [j] geht wohl zu weit. Mach da auch mal length(..)-1 Ciao Frederic |
Re: unbekannte zeichen löschen...
Deine innere For-Schleife habt üble Neben Effekte:
Delphi-Quellcode:
Du gehst Zeichen für Zeichen über den String RichEdit1.Lines[i] und änderst gleichzeitig RichEdit1.Lines[i].
for j:=0 to Length(RichEdit1.Lines[i]) do
if RichEdit1.Lines[i][j] in zeichen then RichEdit2.Lines[i]:=RichEdit2.Lines[i]+RichEdit1.Lines[i][j]; Ich würde dir folgende Funktion aus der JCL empfehlen:
Delphi-Quellcode:
Und damit kurz und knackig:
function StrKeepChars(const S: AnsiString; const Chars: TSysCharSet): AnsiString;
var Source, Dest: PChar; begin SetLength(Result, Length(S)); UniqueString(Result); Source := PChar(S); Dest := PChar(Result); while (Source <> nil) and (Source^ <> #0) do begin if Source^ in Chars then begin Dest^ := Source^; Inc(Dest); end; Inc(Source); end; SetLength(Result, (Longint(Dest) - Longint(PChar(Result))) div SizeOf(AnsiChar)); end;
Delphi-Quellcode:
for j:=0 to Length(RichEdit1.Lines[i]) do
RichEdit2.Lines[i]:=StrKeepChars(RichEdit2.Lines[i], zeichen); |
Re: unbekannte zeichen löschen...
also ich habs jetzt so gelöst:
Delphi-Quellcode:
aber das mit den doppelten Zeilenzmbrüchen löschen funzt nicht :(
procedure TForm1.Los1Click(Sender: TObject);
var i,j:integer; Buchstaben, Zahlen, Interpunktion, Mathe, Sonderzeichen:set of char; zeichen:set of char; temp, temp2:string; begin RichEdit2.Clear; buchstaben:= ['a'..'z','A'..'Z','ß','ä','Ä','ö','Ö','ü','Ü',' ']; zahlen:= ['1'..'9']; Interpunktion:= ['.',',',':',';','!','?','-','_']; Mathe:= ['²','³','+','-','*','/','(',')','{','}','{','}','%','=']; Sonderzeichen:= ['^','°','"','§','$','&','/','´','`','~','#','''','@','€','<','>','|',#13]; zeichen:= buchstaben + zahlen + interpunktion + mathe + sonderzeichen; temp:=RichEdit1.Text; for i:=0 to length(temp)-1 do if temp[i] in zeichen then temp2:=temp2+temp[i]; for i:=length(temp)-2 downto 0 do begin if (temp[i]=temp[i+1]) and (temp[i]=' ') then delete(temp,i,1); if (temp[i]=temp[i+1]) and (temp[i]=#13) then delete(temp,i,1); end; RichEdit2.Lines.Add(temp2); end; |
Re: unbekannte zeichen löschen...
Zitat:
Delphi-Quellcode:
Ich empfehle dir, unbedingt die function StrKeepChars zu verwenden. Vorteile
temp:=RichEdit1.Text;
for i:=0 to length(temp)-1 do if temp[i] in zeichen then temp2:=temp2+temp[i]; // das Ergebnis ist nun in Variable temp2 // aber nun arbeitest du wieder mit temp (=die orginal-daten) for i:=length(temp)-2 downto 0 do begin if (temp[i]=temp[i+1]) and (temp[i]=' ') then delete(temp,i,1); if (temp[i]=temp[i+1]) and (temp[i]=#13) then delete(temp,i,1); end; // auch falsch: der geänderte Text wird an den bestehenden Text angehängt // richtig wäre RichEdit2.Lines.Text := .... RichEdit2.Lines.Add(temp2); end;
|
Re: unbekannte zeichen löschen...
boah nee, (2mal)
nummer 1: boah nee, das will ich selbst hinkriegen nummer 2: boah nee, schon wieder falsch??? :shock: ich hoffe ich kriegs nochma hin.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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