Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi string letztes zeichen überprügen und ggf. löschen (https://www.delphipraxis.net/73688-string-letztes-zeichen-ueberpruegen-und-ggf-loeschen.html)

gandime 22. Jul 2006 02:23


string letztes zeichen überprügen und ggf. löschen
 
hi,
ich möchte von einem string das letzte zeichen überprüfen ob es ein '\' ist und wenn ja dann soll es weggenommen werden
wie bekomme ich das hin?

mfg gandime

Mackhack 22. Jul 2006 02:55

Re: string letztes zeichen überprügen und ggf. löschen
 
Schon mal die Hilfe bemueht? Google Bemueht? Etwas auf english gedacht? Dann waere da wohl Delete rausgekommen.

Hier wie du es machen koenntest... Aber erstmal selbst gucken in der Hilfe mit F1 Delphi-Referenz durchsuchenDelete fuer die Function zum loeschen und zum gucken ob das letzte Zeiche nein "\" ist kannst du function Delphi-Referenz durchsuchenAnsiLastChar nutzen.

Und hier noch ein Beispiel weils so schoen war...

Delphi-Quellcode:
var
  S : String;
begin
  S := Edit1.Text;
  if AnsiLastChar(S)^ = '\' then
    Delete(S, Length(S), 1);
  ShowMessage(S);
end;

Christian Seehase 22. Jul 2006 03:31

Re: string letztes zeichen überprügen und ggf. löschen
 
Moin Mackhack,

wenn s leer ist bekommst Du so aber eine AV.

Andere, von Deiner abgeleitete Variante:
Delphi-Quellcode:
  while (AnsiLastChar(s) <> nil) and (AnsiLastChar(s)^ = '\') do SetLength(s,length(s)-1);
Dann gibt es noch die Delphifunktion ExcludeTrailingPathDelimiter, die für meinen Geschmack nur den Nachteil hat, dass sie bei mehreren aufeinanderfolgenden \ nur den letzten wegnimmt.

gandime 22. Jul 2006 08:18

Re: string letztes zeichen überprügen und ggf. löschen
 
danke, funzt prima

mal zu den bemerkungen:

Zitat:

Schon mal die Hilfe bemueht?
ja habe ich und da is auch delete rausgekommen aber mir fehlte halt "AnsiLastChar"

Zitat:

Google Bemueht?
ja, aber nur kurz weil ich auch iwann schlafen wollte. --> dort bin ich nicht so schnell auf etwas gutes gestoßen

3_of_8 22. Jul 2006 08:19

Re: string letztes zeichen überprügen und ggf. löschen
 
Sollte Probleme geben wenn der String '' ist.

Der_Unwissende 22. Jul 2006 08:55

Re: string letztes zeichen überprügen und ggf. löschen
 
Zitat:

Zitat von 3_of_8
Sollte Probleme geben wenn der String '' ist.


Zitat:

Zitat von Christian Seehase
Moin Mackhack,

wenn s leer ist bekommst Du so aber eine AV.

Andere, von Deiner abgeleitete Variante:
Delphi-Quellcode:
  while (AnsiLastChar(s) <> nil) and ...

Was für Probleme denn?

3_of_8 22. Jul 2006 09:08

Re: string letztes zeichen überprügen und ggf. löschen
 
Ah, stimmt, muss wohl genauer hinschauen.

xaromz 22. Jul 2006 09:25

Re: string letztes zeichen überprügen und ggf. löschen
 
Hallo,

wenn es wirklich nur um das Zeichen "\" geht, dann ist Delphi-Referenz durchsuchenExcludeTrailingPathDelimiter aus SysUtils genau die richtiger Routine.
Zumindest, solange der PathDelimiter ein "\" ist.

Gruß
xaromz

Christian Seehase 22. Jul 2006 12:50

Re: string letztes zeichen überprügen und ggf. löschen
 
Moin xaromz,

Zitat:

Zitat von Christian Seehase
Dann gibt es noch die Delphifunktion ExcludeTrailingPathDelimiter, die für meinen Geschmack nur den Nachteil hat, dass sie bei mehreren aufeinanderfolgenden \ nur den letzten wegnimmt.

;-)

himitsu 22. Jul 2006 13:00

Re: string letztes zeichen überprügen und ggf. löschen
 
Zitat:

Zitat von Christian Seehase
Andere, von Deiner abgeleitete Variante:
Delphi-Quellcode:
  while (AnsiLastChar(s) <> nil) and (AnsiLastChar(s)^ = '\') do SetLength(s,length(s)-1);

Code:
while [color=#ff0000](s <> '')[/color] and (AnsiLastChar(s)^ = '\') do SetLength(s,length(s)-1);

xaromz 22. Jul 2006 13:32

Re: string letztes zeichen überprügen und ggf. löschen
 
Hallo,

@Christian: Dann setz' ich meine Brille eben wieder auf... :stupid:

Gruß
xaromz

himitsu 22. Jul 2006 13:37

Re: string letztes zeichen überprügen und ggf. löschen
 
Zitat:

Zitat von Der_Unwissende
Was für Probleme denn?

Wenn S leer ist, dann gibt AnsiLastChar(s) ein NIL zurück und wenn du jetzt versuchst das zu derefferenzieren ( AnsiLastChar(s)^ ), dann gibt es 'ne nette AV :zwinker:

marabu 22. Jul 2006 14:18

Re: string letztes zeichen überprügen und ggf. löschen
 
Hi,

die standardmäßige boolean shortcut evaluation verhindert im Code (Beitrag #3) von Chris eine AV zuverlässig.

Wie so oft ist eigentlich die Problembeschreibung ungenau. Der backslash verleitet die meisten Leser zu der Annahme es handele sich um einen path delimiter - und wenn das wirklich so ist, dann ist der von Chris beklagte Mangel (nur ein backslash wird getrimmt) eher ein feature by design.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz