Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Leerzeichen aus string löschen (https://www.delphipraxis.net/65089-leerzeichen-aus-string-loeschen.html)

Zacherl 12. Mär 2006 11:24

Re: Leerzeichen aus string löschen
 
Zitat:

Das mit a[1] dürfte eleganter sein als copy. Und das repeat würde ich durch ein while ersetzen.
Kann schon sein. Am besten ist ja eh trim.

Zitat:

Denn mal angenommen, am Anfang des Strings befindet sich kein Leerzeichen, dann würde trotzdem das erste Zeichen gelöscht werden. Besser noch: Folgender String: 'a b'

Bei deinem Code würde nur 'b' übrig bleiben.
Das stimmt. Aber maximus Caesar weiß ja, dass die ersten Zeichen immer Leerzeichen sind.

3_of_8 12. Mär 2006 11:25

Re: Leerzeichen aus string löschen
 
Es ging nur um die allgemeine Verwendbarkeit. :mrgreen:

Zacherl 12. Mär 2006 11:27

Re: Leerzeichen aus string löschen
 
Zitat:

Zitat von 3_of_8
Es ging nur um die allgemeine Verwendbarkeit. :mrgreen:

Wenn das so ist ... Ne, ist ja schon richtig, was du sagst. Ich habe einfach nur den Code aus dem 1. Post etwas umgestellt.

Luckie 12. Mär 2006 11:34

Re: Leerzeichen aus string löschen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Valle
Merkwürdig,
in der Hiulfe habe ich nichts gefunden

Du weißt aber was gemeint war. Und alles weitere im Anhang.

Corpsman 12. Mär 2006 12:05

Re: Leerzeichen aus string löschen
 
Dein Fehler kam wahrscheinlich weil du nen Leerstring hattest und dann kann der nicht mehr auf das 1 Element zugreifen.

Delphi-Quellcode:
While Pos(' ',a) =1 do
delete(a,1,1)
das stürtzt dann nicht ab. wobei dein Trim Befehl schneller sein dürfte.

himitsu 13. Mär 2006 10:55

Re: Leerzeichen aus string löschen
 
Zitat:

Zitat von SirThornberry
trim würde ich aus performancegründen vorziehen.

Würde ich auch mal sagen, wobei hier wohl TrimLeft viel besser wäre, da nur die Linken Leerzeichen gelöscht werden :zwinker:



Zitat:

Code:
[color=#000080][b]repeat[/b][/color]
  delete(a,[color=#ff0000][b]0[/b][/color],1);
[color=#000080][b]until[/b][/color] a[1]<>' ';

Du weißt aber, das das erste Zeichen im String auf Position 1 ist?

Außerdem wird das erste Zeichen immer gelöscht, selbst wenn es kein Leerzeichen ist :warn:

also erst Prüfen was für ein Zeichen und dann löschen
Delphi-Quellcode:
While a[1] = ' ' do
  delete(a,1,1);
Da ja explizit auf das Erste Zeichen zugegriffen wird, sollte auch noch eine Abfrage drin sein, welche nachsieht, ob überhaupt ein Zeichen im string ist...
Delphi-Quellcode:
while (a <> '') and (a[1] = ' ') do
  delete(a,1,1);
Wärend TrimLeft das in etwa so macht, also erstmal nachsehn wieviel Leerzeichen drin sind und erst dann diese löschen, somit wird nur einmal gelöscht, also der zeitaufwendigere Prozess einer Stringmanipulation so wenig wie möglich ausgeführt.
Delphi-Quellcode:
if a <> '' then begin
  i := 1
  while a[i] = ' ' do
    inc(i);
  delete(a, 1, i - 1);
end;

JWeis 13. Mär 2006 11:01

Re: Leerzeichen aus string löschen
 
wie wärs wenn du einfach StringReplace benutzenwürdest.


Delphi-Quellcode:
stringvar:= StringReplace(stringvar, ' ', '',[rfReplaceAll]);
[edit] sorry ich hab vergessen alles zu lesen. du willst ja nur die lerzeichen am anfang entfernen. [/edit]

Corpsman 13. Mär 2006 15:27

Re: Leerzeichen aus string löschen
 
@himitsu

Zitat:

Delphi-Quellcode:
while (a <> '') and (a[1] = ' ') do
  delete(a,1,1);

Deser Code Verhindert den Fehler aber nicht. Da zumindest der d5 Compiler beide Argumente auswertet und wenn a = '' ist bringt er dann trotzdem ne Exception.

himitsu 14. Mär 2006 11:14

Re: Leerzeichen aus string löschen
 
Zitat:

Zitat von Corpsman
Deser Code Verhindert den Fehler aber nicht. Da zumindest der d5 Compiler beide Argumente auswertet und wenn a = '' ist bringt er dann trotzdem ne Exception.

Bist du sicher?
Also in meinem D4 hab ich noch keine Exception bei sowas bekommen :stupid:

marabu 14. Mär 2006 11:26

Re: Leerzeichen aus string löschen
 
Der Compiler richtet sich nach der Einstellung für die Boolesche Kurzauswertung. {$B-} oder {$BOOLEVAL OFF} veranlasst ihn die Auswertung von Ausdrücken vorzeitig abzubrechen, wenn das Ergebnis bereits feststeht.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 Uhr.
Seite 2 von 3     12 3      

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