Delphi-PRAXiS

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)

maximus Caesar 12. Mär 2006 11:05


Leerzeichen aus string löschen
 
Hallo!
Ich habe einen String a mit mehreren Leerzeichen am Anfang. Diese möchte ich komplett löschen.
ICh dachte das kann man so machen:
Delphi-Quellcode:
repeat
  delete(a,0,1);
until a[1]<>' ';
aber ich bekomme immer eine fehlermeldung und die letzte zeile wird markiert.
Wo ist der Fehler?

Luckie 12. Mär 2006 11:09

Re: Leerzeichen aus string löschen
 
Guck mal in der Hiulfe unter [oh]trim(left/right)[/oh].

maximus Caesar 12. Mär 2006 11:11

Re: Leerzeichen aus string löschen
 
Danke!

Valle 12. Mär 2006 11:12

Re: Leerzeichen aus string löschen
 
Merkwürdig,
in der Hiulfe habe ich nichts gefunden
und ein Fehler zeigt er mir auch nicht, er hängt sich nur auf...

* er = mein PC

3_of_8 12. Mär 2006 11:15

Re: Leerzeichen aus string löschen
 
Also am Code würde ich mal folgendes ändern:

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

[edit=SirThornberry]Delphitags berichtigt. Mfg, SirThornberry[/edit]

mkinzler 12. Mär 2006 11:16

Re: Leerzeichen aus string löschen
 
Trim entfernt Leerzeichen am Anfang und am /ende eines Strings. Soll nur am Anfang oder nur am Ende entfernt werden verwendet man die Funktioenne TrimLeft bzw. TrimRight

Zitat:

Zitat von Delphi-Hilfe
Trim Routine

Entfernt alle am Anfang und Ende eines Strings vorhandenen Leer- und Steuerzeichen.

Unit
SysUtils

Syntax


[Delphi] function Trim(const S: string): string; overload;



[Delphi] function Trim(const S: WideString): WideString; overload;


Beschreibung
Trim entfernt alle am Anfang und Ende des mit S angegebenen Strings vorhandenen Leer- und Steuerzeichen.


Zacherl 12. Mär 2006 11:17

Re: Leerzeichen aus string löschen
 
Trim ist die beste Lösung, aber so sollte auch die Andere funktionieren:

Delphi-Quellcode:
repeat
  Delete(a, 1, 1);
until Copy(a, 1, 1) <> ' ';
Florian

SirThornberry 12. Mär 2006 11:19

Re: Leerzeichen aus string löschen
 
trim würde ich aus performancegründen vorziehen.

3_of_8 12. Mär 2006 11:20

Re: Leerzeichen aus string löschen
 
Das mit a[1] dürfte eleganter sein als copy. Und das repeat würde ich durch ein while ersetzen.

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.

SirThornberry 12. Mär 2006 11:23

Re: Leerzeichen aus string löschen
 
ich würde mit einer For-Schleife von Anfang bis ende durchgehen und eine zweite zählvariable mitführen die bestimmt wohin geschrieben wird. Kommt ein Leerzeichen so wird diese nicht weitergerückt. Da aber Trim wohl nix anderes macht erspaare ich mir mal den Quelltext zz posten.

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

Corpsman 14. Mär 2006 12:03

Re: Leerzeichen aus string löschen
 
Da Frage ich mich warum diese Einstellung nicht standartmäsig in meinem Compiler Aktiviert ist.

Gibts da ne Hilfe die die ganzen Einstellungen alle auflistet ?

himitsu 14. Mär 2006 12:07

Re: Leerzeichen aus string löschen
 
Ja, die OH :zwinker:

Such mal alles was mit $ beginnt und dann könnte sich ein Blick in die Projektoptionen auch lohnen ^_^

PS: wenn ich mich nicht irre, dann ist das doch standardmäßig deaktiviert?
Also so, daß nich alles ausgewärtet wird, sobald das ergebnis feststeht :gruebel:

alzaimar 14. Mär 2006 12:20

Re: Leerzeichen aus string löschen
 
@himitsu: Wenn Du es ganz genau nimmst, dann verwende 'Copy'. Denn offiziell sind Strings nicht indizierbar. :gruebel: Sagt Borland. :gruebel: Jahaa! :wall:

Egal, wir machen das so seit 1856 und dann ist es mir schnurz.

Wenn Du Copy verwendest, dann klappt es immer. Nur viel langsamer. Insofern ist mein Einwand nur theoretischer Natur.
Delphi-Quellcode:
Var
  s: String;

Begin
  s:='';
  Showmessage ('So siehts hinter dem String aus'+Copy(s,1,1));
End;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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