Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Nochmal RPos (https://www.delphipraxis.net/187280-nochmal-rpos.html)

Willie1 15. Nov 2015 17:41

Nochmal RPos
 
Hallo Delphianer,
im Netz gibt es zahlreiche Lösungen für RPos. Eine ist fehlerhaft und andere sind lang und umständlich.
Meine Lösung ist kurz: Voraussetzung keine leeren Strings und Hauptstring- >= Substring-Länge.
Delphi-Quellcode:
function RPos(const SubStr, Str: string): Integer;
begin
  Result:=0;
  if (SubStr <> '') and (Length(Str) - Length(SubStr) >= 0) then
  begin
    Result:=Length(Str) - Pred(Length(SubStr));
    while (Copy(Str, Result, Length(SubStr)) <> SubStr) and (Result > 0) do Dec(Result);
  end;
end;
Mit PosEx aus StrUtils noch kürzer:
Delphi-Quellcode:
uses StrUtils;
...
function RPos(const SubStr, Str: string): Integer;
begin
  Result:=0;
  if (SubStr <> '') and (Length(Str) - Length(SubStr) >= 0) then
  begin
    Result:=Length(Str) - Pred(Length(SubStr));
    while (PosEx(Substr, Str, Result) = 0) and (Result > 0) do Dec(Result);
  end;
end;
Frage: Mein Delphi ist betagt, gibt es inzwischen RPos bei Delphi XE ?
Kennt jemand eine ASM-Lösung, das wäre doch etwas für einen Assembler-Programmierer.

Schönen Sonntag
Willie1.

Mavarik 15. Nov 2015 18:20

AW: Nochmal RPos
 
Warum suchst Du nicht rückwärts mit PChar?

Bernhard Geyer 15. Nov 2015 19:44

AW: Nochmal RPos
 
Du könntest eines der folgenden verwenden

http://docwiki.embarcadero.com/Libra....LastDelimiter
http://docwiki.embarcadero.com/Libra...Utils.StrRScan
http://docwiki.embarcadero.com/Libra...s.AnsiStrRScan

Willie1 16. Nov 2015 16:57

AW: Nochmal RPos
 
Danke Freunde! W.


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:12 Uhr.

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