Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Position des X-ten Vorkommens eines Strings ermitteln

  Alt 8. Apr 2006, 19:44
SirThornberry hat in diesem Betrag folgenden Code gepostet, der die Position des X-ten Vorkommens eines Strings ermittelt. Es kann, ähnlich wie bei Delphi-Referenz durchsuchenPosEx angegeben werden, ab welcher Position das X-te Vorkommen gesucht werden soll. In der Praxis benötigt man meistens nicht beide Funktionen gleichzeitig, sondern entwerde die Ermittlung des X-ten Vorkommens vonm Anfang an, oder die Ermittlung eines Vorkommens ab einer bestimmten Position (vgl. PosEx).

Delphi-Quellcode:
function GetPosNumX(const ASubStr, AFullStr: String; AFoundCnt: Word; AStartPos: Integer=1): Integer;
var
  LFoundCnt : Word;
  LCompCnt,
  LFullLen,
  LGiveback,
  LMax,
  LPos,
  LSubLen : Integer;
  LPtr1,
  LPtr2 : PChar;
begin
  LFullLen := Length(AFullStr);
  LSubLen := Length(ASubStr);
  if (AStartPos < LFullLen - LSubLen + 2) then
  begin
    // An dieser Stelle incrementieren da wir sonst an 2 anderen Stelle
    // incrementieren müssten
    dec(AStartPos);
    LGiveback := 0;
    LFoundCnt := 0;
    LMax := LFullLen - LSubLen + 2;
    LPtr1 := PChar(AFullStr) + AStartPos;
    LPtr2 := PChar(ASubStr);
    for LPos := AStartPos to LMax do
    begin
      LCompCnt := 0;
      while (LCompCnt < LSubLen) and (LPtr1[LCompCnt] = LPtr2[LCompCnt]) do
       inc(LCompCnt);
      if LCompCnt = LSubLen then
      begin
        inc(LFoundCnt);
        if LFoundCnt = AFoundCnt then
        begin
          LGiveback := LPos + 1;
          Break;
        end;
      end;
      inc(Cardinal(LPtr1));
    end;
    result := LGiveback;
  end else
    result := 0;
end;
  Mit Zitat antworten Zitat