Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Alle Leerzeichen Löschen.


Danny W. - Mi 29.11.06 10:49
Titel: Alle Leerzeichen Löschen.
Hallo,
ich habe hier einen String..sagen wir mal:


Quelltext
1:
Ach du schöne Welt!                    


davon möchte ich jetzt gerne die Leerzeichen entfernen. Zuerst habe ich es mit Pos und Delete gemacht. Allerdings bin ich dann auf die Funktion "Trim" gestoßen...allerdings ersetzt er bei mir nur die ersten und letzten leerstellen (was ja auch laut Delphi Hilfe so sein soll^^)

Gibt es jetzt noch eine alternative um jedes Leerzeichen zu löschen?

liebe Grüße,

Danny


oldmax - Mi 29.11.06 11:06

Hi
Ich könnte mir mehrere Vorgehensweisen vorstellen, die ich dann in eine Function packe.

Z.B.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Function TMyForm.Leerweg(Quelle: String):String;
Var i     : Integer;
    Ziel  : String;
Begin
  Ziel:='';
  For i:=1 to Length(Quelle) do if Quelle[i] <>' ' then Ziel:=Ziel+Quelle[i];
  Result:=Ziel;
end;


Natürlich geht auch delete und Pos an dieser Stelle, aber du wirst nicht drum herum kommen, irgendwie jedes einzelne Zeichen zu prüfen. Machen übrigends eingebaute Functions nicht anders, vielleicht in einer anderen Sprache, aber auch wenn du direkt mit ASM auf den Speicher zugreifst, musst du Byte für Byte prüfen und das Ergebnis irgendwohin schreiben.
Gruß oldmax


Danny W. - Mi 29.11.06 11:11

das funktioniert super =) vielen dank


iKilledKenny - Mi 29.11.06 11:18

das sollte auch einfacher gehen:


Delphi-Quelltext
1:
sTxt := StringReplace (sTxt, #32'', [rfReplaceAll]);                    


grüße
alex


Danny W. - Mi 29.11.06 11:21

acuh eine schöne Lösung =)

aber die Idee mit der function war nicht schlecht..so kann ich das auch häufiger verwenden..Danke euch beiden

liebe Grüße,
Danny


jasocul - Mi 29.11.06 11:54

Dann baue aber bitte noch eine Prüfung ein. Falls "Quelle" mal ein Leerstring ist, könnte es sonst zu Problemen kommen.


Danny W. - Mi 29.11.06 12:01

wäre schon sinnvoll, allerdings kann das definitiv nicht vorkommen! Da ich nur die Leerzeichen aus Dateinamen entfernen möchte..diese haben ja noch mindestens eine Endung, sonst werden sie garnicht erst gelesen :)

mfG


jasocul - Mi 29.11.06 12:05

Das kann nur bei Deinem jetzigen Einsatz nicht vorkommen (wirklich nicht?). Wenn Du die Funktion mal woanders benötigst, denkst Du vielleicht nicht mehr daran und verlässt Dich darauf, dass sie einwandfrei funktioniert.
Aber Du musste es natürlich nicht machen... :twisted:


Danny W. - Mi 29.11.06 12:18

Hauptsache ein schlechtes gewissen einreden :P *implementier*

so..jetz habe ich die abfrage mit drinne + auskommentiert usw. ^^

Danke nochmal an alle


Udontknow - Mi 29.11.06 12:37

Hallo!

Wieso soll die Funktion nicht arbeiten, wenn Quelle leer ist? Die For-Schleife wird bei einem leeren String doch gar nicht angegangen...

Cu,
Udontknow


jasocul - Mi 29.11.06 12:59

Hallo Andreas,

habe ich gerade mal geprüft. Du hast Recht.
Aber war das früher nicht mal so, dass eine For-Schleife mindestens einmal durchlaufen wird?

Gruß,
Peter


Pille - Mi 29.11.06 13:23

user profile iconjasocul hat folgendes geschrieben:

Aber war das früher nicht mal so, dass eine For-Schleife mindestens einmal durchlaufen wird?


Ich denke, nur dann, wenn der 2 Parameter wenigestens so groß ist wie der erste.

Delphi-Quelltext
1:
From i := 1 to 0 do                    

wird dann nicht durchlaufen, da die Bedingung schon zuvor erfüllt ist.

mfg Pille