Autor Beitrag
michaelarban
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mo 26.07.10 10:50 
Hallo,

gibt es es eine Deplhi-Funtkion mit der man mehrere Leerzeichen zu 1 Leerzeichen zusammenfassen kann;

Bsp:
ausblenden Quelltext
1:
meineStringVariable := 'das   ist      ein Satz  mit            leerzeicen';					


-->Ergebnis soll sein
ausblenden Quelltext
1:
meineStringVariable := 'das ist ein Satz mit leerzeicen';					


danke
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 26.07.10 10:54 
Wenn der Text nicht zu lang ist, und es auf Geschwindigkeit nicht ankommt, kann man das Quick&Dirty so machen
ausblenden Delphi-Quelltext
1:
2:
while pos('  ', myString) > 0 do 
   myString := Stringreplace(myString, '  '' ', [rfReplaceAll]);


Bei den Parametern bitte vorher kontrollieren, ob die so richtig sortiert sind, sonst hat man eine Endlosschleife und/oder schreibt sich den Speicher komplett voll. ;-)

Ansonsten erkläre ich hiermit die Optimierungs-Spiele für eröffnet. :D

_________________
We are, we were and will not be.
kalmi01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: Mo 26.07.10 11:21 
Hi,

mein Favorit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
s:= myString;
t := '';
while Length(s) > Length(t) 
do begin 
     t := s;
     s := Stringreplace(s, '  '' ', [rfReplaceAll]);
   end;


Längenvergleich sollte schneller gehen als Stringsuche.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 26.07.10 11:38 
Gefühlsmäßig dürfte das ständige Neuzuweisen nicht gerade performant sein. Ich bin zwar auf dem Gebiet nicht wirklich gut, weil ich selten Sachen mache, wo es so auf Geschwindigkeit ankommt. Aber ich stell mal meinen Vorschlag zur Diskussion:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
var s : String;
    sNeu : string;
    i, j : integer;
begin

  s := 'das   ist      ein Satz  mit            leerzeicen';
  setLength(sNeu, Length(s));
  j := 1;
  for I := 1 to length(s) do
  begin
    if s[i] = ' ' then
    begin
      if (i = 1or (s[i - 1] <> ' 'then
      begin
        sNeu[j] := s[i];
        inc(j);
      end;
    end
    else
    begin
      sNeu[j] := s[i];
      inc(j);
    end;
  end;
  setLength(sNeu, j - 1);
  ShowMessage(s + #13#10 + sNeu);


end;

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)