Existe-t-il une fonction RTL Delphi pour déterminer la position de la dernière occurrence d'un caractère dans une chaîne?
essayez le LastDelimiter
Fonction qui fait partie de l'unité Sysutils.
Utilisez StrRScan
ou AnsiStrRScan
, à la fois dans le Sysutils Unité. Ce dernier, malgré son nom, fonctionne sur des caractères Unicode dans les versions Delphes où string
est UnicodeString
. (Si vous avez toujours besoin de la version "réelle" ANSI, utilisez le Anstring Unité.)
Ces fonctions recherchent exactement un caractère, alors que LastDelimiter
recherche l'un de plusieurs caractères à partir de la liste de possibilités donnée - pense à StrRScan
comme LastDelimiter
optimisé pour un personnage Delimiters
argument.
La meilleure solution croisée est Tstringhelper.lastindexof , il existe depuis Delphi XE4.
Notez que cette fonction est basée sur 0.
Et voici ma contribution pour trouver la position de la nième occurrence d'une sous-chaîne dans une chaîne.
function GetPositionOfNthOccurence(sSubStr, sStr: string; iNth: integer): integer;
var
sTempStr: string;
iIteration: integer;
iTempPos: integer;
iTempResult: integer;
begin
result := 0;
// validate input parameters
if ((iNth < 1) or (sSubStr = '') or (sStr = '')) then exit;
// evaluate
iIteration := 0;
iTempResult := 0;
sTempStr := sStr;
while (iIteration < iNth) do
begin
iTempPos := Pos(sSubStr, sTempStr);
if (iTempPos = 0) then exit;
iTempResult := iTempResult + iTempPos;
sTempStr := Copy(sStr, iTempResult + 1, Length(sStr) - iTempResult);
inc(iIteration);
end;
result := iTempResult;
end;