![]() |
Aufeinander folgende Whitespaces entfernen, eins lassen
Hallo
Ich möchte einen Text der so aussieht:
Delphi-Quellcode:
in folgenden umwandeln:
"Hallo dies ist ein test"
Delphi-Quellcode:
So das immer nur ein whitespace kommt nicht mehrere.
"Hallo dies ist ein test"
wie stele ich das an? |
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
Wenn du meinst aus
Delphi-Quellcode:
das zu machen
"Hallo dies ist ein Test"
Delphi-Quellcode:
würde ich es so machen:
"Hallo dies ist ein Test"
In einer Schleife gehst du alles Buchstaben durch. ist der akt. Buchstaben ein Leerzeichen, checkst du, ob der nächste es auch ist. Wenn ja, kannst du es entfernen. air |
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
Sollte so funktionieren:
Delphi-Quellcode:
Greetz
while (Pos(' ', Str) > 0 do
Str := StringReplace(Str, ' ', ' ', []); alcaeus [edits]Source-Korrekturen[/edits] |
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
suche mit pos/PosEx einfach nach Leerzeischen und entferne alle leerzeischen die direkt dahinter folgen.
@alcaeus: Deine variante hat den Nachteil das kein leerzeischen bleibt falls eine gerade anzahl an leerzeischen hintereinander steht. desweiteren ist die whileschleife nicht notwendig wenn du mit "rfReplaceAll" arbeitest. desweiteren sollte der erste parameter von StringReplace der String (Str) sein und nicht " " |
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
Danke es funktioniert.
|
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
Zitat:
Greetz alcaeus |
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
Zitat:
Delphi-Quellcode:
Aufruf wie folgend:
function RemoveUnwantedSpace(const Txt: AnsiString): AnsiString;
var I: Integer; Used: Integer; InCh: ^Char; LastWasSpace: Boolean; Res: AnsiString; begin SetLength(Res, Length(Txt)); if Length(Txt) > 0 then begin Used := 0; LastWasSpace := False; InCh := @Txt[1]; for I := 1 to Length(Txt) do begin if InCh^ = #32 then begin if not LastWasSpace then begin Inc(Used); Res[Used] := InCh^; LastWasSpace := True; end; end else begin LastWasSpace := False; Inc(Used); Res[Used] := InCh^; end; Inc(InCh); end; SetLength(Res, Used); end; Result := Res; end;
Delphi-Quellcode:
...:cat:...
procedure TForm1.Button1Click(Sender: TObject);
begin Edit1.Text := RemoveUnwantedSpace(Edit1.Text); end; |
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
vollständigerweise noch meine Methode ;-)
Delphi-Quellcode:
function TrimInside( s : string) : string;
var i, i2 : integer; begin i := 0; i2 := 0; s := trim(s); while i < length(s) do begin if (s[i] = ' ') and (s[i2] = ' ') then begin delete(s,i,1); end else begin inc(i); i2 := i-1; end; end; result := s; end; // von TrimInside |
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
ich denk mal den source von sakura kann man auch noch optimiert in dem man keinen zweiten res-String verwendet sondern direkt im SourceString ändert, also den String als Var und nicht als Const übergeben.
|
Re: Aufeinander folgende Whitespaces entfernen, eins lassen
Moin Sir Thornberry,
dann kannst Du allerdings keine Eigenschaften wie Edit1.Text direkt übergeben, müsstest diese also vorher in eine Variable übertragen, und anschliessend wieder zurück ;-) Bleibt sich also gleich, nur wird das eigentliche Programm etwas umfangreicher. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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