- 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)