Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit string funktion Pos (https://www.delphipraxis.net/194479-problem-mit-string-funktion-pos.html)

4PhenomX 27. Nov 2017 16:29

Problem mit string funktion Pos
 
Hallo DP,

Eigentlich ist es mir schon fast etwas peinlich so etwas zu fragen, aber ich habe ein problem mit der string funktion Pos.
Ich möchte die Position einer Zeichenkette in einer längeren Zeichenkette ermitteln.

Die Anweisung sieht so aus:

nPos := Pos('f',WebBrowser1.LocationURL); // <-- Funktioniert ohne Probleme

Wenn ich allerdings mehr als ein Zeichen ermitteln möchte, giebt mir mein compiler eine Fehlermeldung aus.

nPos := Pos('fail',WebBrowser1.LocationURL); // <-- Compiler Fehlermeldung

Fehlermeldung sieht so aus:
[dcc32 Fehler] Main_F.pas(157): E2251 Doppeldeutiger überladener Aufruf von 'Pos'

Ich benutze Delphi 10.1 Berlin.
Bin da etwas ratlos....

Viele Grüße

hoika 27. Nov 2017 16:36

AW: Problem mit string funktion Pos
 
Hallo,

1. Benutze eine lokale Variable statt der direkten Übergabe, dann sollte das klappen.

2. PS: ich würde AnsiPos nehmen.

Ursache:
Pos ist mehrfach überladen, dein 'fail' kann ein AnsiString sein, Unicode usw.

4PhenomX 27. Nov 2017 17:05

AW: Problem mit string funktion Pos
 
Danke.
Mit AnsiPos klappt es.

PS: Mit einer lokalen variable vom typ string klappt es auch nicht.

hoika 27. Nov 2017 17:07

AW: Problem mit string funktion Pos
 
Hallo,
dann nimm am besten gleich AnsiUpperPos.

himitsu 28. Nov 2017 09:46

AW: Problem mit string funktion Pos
 
Per Namespace die gewünschte Funktion explizit aufrufen (wenn sich beide Versionen in unterschiedlichen Units befinden würden)
Delphi-Quellcode:
nPos := System.SysUtils.Pos('fail', WebBrowser1.LocationURL);


oder ein expliziter Cast, um genau die gewünschte Version anzusprechen.
Delphi-Quellcode:
nPos := Pos(string('fail'), WebBrowser1.LocationURL);


Wie ist LocationURL definiert?
Wenn das ein AnsiString ist, dann den Cast auch als AnsiString,
bzw. die AnsiString-Version der Funktion verwenden.

PS: Auch wenn das AnsiUpperPos heißt, so kann die Funktion auch Unicode sein.
Embarcadero war bei der Namenswahl ein bissl unglücklich vorgegangen, als sie Unicode einführten. :wall:

Uwe Raabe 28. Nov 2017 10:10

AW: Problem mit string funktion Pos
 
Zitat:

Zitat von himitsu (Beitrag 1387322)
PS: Auch wenn das AnsiUpperPos heißt, so kann die Funktion auch Unicode sein.
Embarcadero war bei der Namenswahl ein bissl unglücklich vorgegangen, als sie Unicode einführten. :wall:

Erstens heißt das AnsiPos und zweitens hieß das schon in Delphi 7 so.

himitsu 28. Nov 2017 10:24

AW: Problem mit string funktion Pos
 
Da war aber auch alles noch ANSI. :stupid:

Uwe Raabe 28. Nov 2017 10:32

AW: Problem mit string funktion Pos
 
Zitat:

Zitat von himitsu (Beitrag 1387325)
Da war aber auch alles noch ANSI. :stupid:

Richtig! Und bei der Umstellung hätte man das dann in UnicodePos umbenennen sollen?

Die Umstellung war schon ziemlich genial eingefädelt. Wenn man nicht vorher schon unsauber programmiert hatte, funktionierte das in den meisten Fällen ohne weiteres Eingreifen. Aber wir kommen hier so langsam Off-Topic :)


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