Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Implizite Umwandlung string zu ansistring (https://www.delphipraxis.net/194392-implizite-umwandlung-string-zu-ansistring.html)

LTE5 15. Nov 2017 01:28

Implizite Umwandlung string zu ansistring
 
Um mir doppelten Code zu ersparen, greife ich bei einem Problem auf fertigen Code von Delphi zurück.
Soweit ich weiß gibt es doch von fast allem string und ansistring-Versionen, je nachdem was man reinbgibt wird entschieden was genommen wird.

Ich nutze System.AnsiStrings.RightStr(filename, 1) <> '\' und übergebe einen string. Leider bekomme ich dennoch die Warnung Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'AnsiString'.
Was mache ich falsch?

Dalai 15. Nov 2017 04:47

AW: Implizite Umwandlung string zu ansistring
 
Es hat einen Grund, warum die Unit "AnsiStrings" im Dateinamen hat: die Funktionen verwenden (fast?) alle AnsiStrings. Wenn du Überladungen für WideStrings o.ä. suchst, wirf mal einen Blick in System.SysUtils - dort sind eine Reihe von gleichnamigen Funktionen wie in System.AnsiStrings zu finden.

Grüße
Dalai

LTE5 15. Nov 2017 11:35

AW: Implizite Umwandlung string zu ansistring
 
System.SysUtils.AnsiLastChar war genau was ich suche. Funtioniert sogar mit Unicode-Zeichen.


Echt kompliziert meiner Meinung nach. Ich habe diese Nacht noch einen Artikel darüber gelesen, recht interessant.
http://compaspascal.blogspot.de/2010...not-about.html

Redeemer 15. Nov 2017 18:14

AW: Implizite Umwandlung string zu ansistring
 
Nein, was du suchst ist Delphi-Referenz durchsuchenEndsStr.

LTE5 15. Nov 2017 18:26

AW: Implizite Umwandlung string zu ansistring
 
Was ist denn der bedeutende Unterschied zwischen AnsiLastChar und EndsStr?

Dalai 15. Nov 2017 18:43

AW: Implizite Umwandlung string zu ansistring
 
Ich lese das so: AnsiLastChar liefert (einen Zeiger auf) das letzte Zeichen in einem String zurück. Sowas würde man verwenden, wenn man mit diesem Zeichen noch etwas anstellen will. EndsStr prüft, ob ein String mit einem bestimmten Substring endet. Sowas verwendet man, wenn man nur eine Aussage darüber haben will, ob diese Bedingung zutrifft, das Zeichen aber nicht weiterverwenden will.

Übrigens gibt es auch Delphi-Referenz durchsuchenIncludeTrailingPathDelimiter und Delphi-Referenz durchsuchenExcludeTrailingPathDelimiter, die einen PathDelimiter an den Pfad hängen (sofern er fehlt) bzw. entfernen (sofern vorhanden). Damit entfällt die ganze Überprüferei, ob ein Backslash am Ende des gegebenen Pfads hängt, was eh nur auf Windows funktioniert.

Grüße
Dalai


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