22. februar 2003 - 21:43Der er
9 kommentarer og 6 løsninger
Fjerne tegn fra en String
Jeg har en String som jeg ønsker at fjerne ulovlige tegn fra.
str := 'deghj544=dfvdfvjk#hjkhjka!';
=,# og ! er ulovlige.
Det er i sig selv ikke noget problem at fjerne de ulovlig tegn, men jeg ønsket at angive ALLE mine Ulovlige tegn som en mængde, og der udfra køre stringen igennem mængden, og fjerne alle ulovlige tegn.
for I := 1 to Length(S) do if S[I] in ['=', '#', '!'] then Delete(S, I, 1);
Hvis du bekymrer dig bare lidt om performance, kan det være en fordel at kopiere strengen ud til en anden preallokeret i stedet for at slette tegn enkeltvis... Hvis du bekymrer dig
procedure TForm1.Button1Click(Sender: TObject); const UlovligeTegn = (['=', '#', '!']); var i:integer; str:string; begin str := '!!deghj544=dfvdfvjk#hjkhjka!'; for i := length(str) downto 1 do if str[i] in UlovligeTegn then delete(str,i,1); showmessage(str); end;
Kommentar: Som du ser benytter jeg "downto" for at løbe "str" igennem bagfra. Det har den fordel at alle tegnene bliver checket. Det sker ikke ved "i := 1 to" hvis et tegn bliver slettet, skifter alle efterfølgende tegn jo et nummer og det efterfølgende tegn bliver sprunget over.
procedure FjernUlovligeTegn(UlovligeTegn: String; var Str: String); var I: Integer; tmpStr: String; begin UlovligeTegn := AnsiUpperCase(UlovligeTegn); tmpStr := ''; for I := 1 to Length(Str) do if Pos(AnsiUpperCase(Str[I]), UlovligeTegn) < 1 then tmpStr := tmpStr + Str[I]; Str := tmpStr; end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.