Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: String zwischen 2 bekannten Teilstrings ermitteln

  Alt 22. Nov 2009, 15:29
- ein paar Leerzeichen und Zeilenumbrüche könnten nicht schaden (die Scrollbalken bei mir schreien danach)
- die beiden letzen Parameter (abErstesZeichen,bisLetztesZeichen) finde ich etwas umständlich,
vorallem da man die Indize (zeichen1nummer,zeichen2nummer) dennoch angeben muß, selbst wenn man sie dann nicht benötigt
[edit]
und schon hatte ich diese Parameter falsch verstanden (siehe nächsten Punkt)
drum mal 'ne 2. Version angehängt
[/edit]
- die Parameternamen sind etwas unglücklich
hinter zeichen1nummer und zeichen2nummer würde ich nicht das verstehen, was du meinst
zeichen1 und zeichen2 müssen keine Zeichen sein ... dort passen ja wohl auch ganze Strings rein
- Suchen durch Löschen ist nicht unbedingt optimal ... unnötige und langsame Stringoperationen


Delphi-Quellcode:
Function TextBetween(Const S, StartSearch, StopSearch: String;
    StartIndex: Integer = 1; StopIndex: Integer = -1): String;
  Var i, i2:integer;

  Begin
    Result := '';
    i2 := 1;
    If StopIndex = -1 Then Begin
      Repeat
        i := PosEx(StopSearch, S, i2);
        If i = 0 Then
          If i2 <> 1 Then Break Else Exit;
        i2 := i;
      Until False;
    End Else
      Repeat
        i2 := PosEx(StopSearch, S, i2);
        If i2 = 0 Then Exit;
        Dec(StopIndex);
      Until StopIndex = 0;
    i := 1;
    Repeat
      i := PosEx(StartSearch, S, i);
      If i = 0 Then Exit;
      Dec(StartIndex);
    Until StartIndex = 0;
    Result := Copy(S, i + Length(StartSearch), i2 - i - Length(StartSearch));
  End;
StopIndex nicht angegeben, dann wird der zuletzt gefundene String genommen

und sind hier die lezten Parameter nicht angegeben (oder -1), dann wird der Stringanfang, bzw. das Stringende genommen
Delphi-Quellcode:
Function TextBetween(Const S, StartSearch, StopSearch: String;
    StartIndex: Integer = -1; StopIndex: Integer = -1): String;
  Var i, i2:integer;

  Begin
    Result := '';
    i := 1;
    If StartIndex <> -1 Then Begin
      Repeat
        i := PosEx(StartSearch, S, i);
        If i = 0 Then Exit;
        Dec(StartIndex);
      Until StartIndex = 0;
      Inc(i, Length(StartSearch));
    End;
    i2 := 1;
    If StopIndex <> -1 Then Begin
      Repeat
        i2 := PosEx(StopSearch, S, i2);
        If i2 = 0 Then Exit;
        Dec(StopIndex);
      Until StopIndex = 0;
    End Else i2 := Length(S) + 1;
    Result := Copy(S, i, i2 - i);
  End;
(Codes ungetestet)
$2B or not $2B
  Mit Zitat antworten Zitat