![]() |
String zwischen 2 bekannten Teilstrings ermitteln
Hallo, diese Funktion liefert einen Teilstring aus einem String zurück. Der Teilstring befindet sich zwischen 2 bekannten Teilstrings, die auch häufiger vorkommen können.
Delphi-Quellcode:
function wertZwischen(inString,zeichen1:string;zeichen1nummer:integer;zeichen2:string;
zeichen2nummer:integer;abErstesZeichen,bisLetztesZeichen:boolean):string; var pos1,pos2:integer; function positionSuchen(hauptstring,suchstring:string;nummerSuchstring:integer):integer; var i,laenge,pos1,poszaehler: integer; begin poszaehler := 0; for i := 0 to nummerSuchstring-2 do begin pos1 := Pos(suchstring,hauptstring); laenge := Length(suchstring); poszaehler := poszaehler+laenge; Delete(hauptstring,pos1,laenge); end; if Pos(suchstring,hauptstring) > 0 then Result := Pos(suchstring,hauptstring)+poszaehler else Result := 0; end; begin if not abErstesZeichen then pos1 := positionSuchen(inString,zeichen1,zeichen1nummer) + Length(zeichen1) else pos1 := 1; if not bisletztesZeichen then pos2 := positionSuchen(inString,zeichen2,zeichen2nummer) else pos2 := Length(inString)+1; Result := Copy(inString,pos1,pos2-pos1); end; Zur Verwendung:
Delphi-Quellcode:
-Der erste Parameter (inString) ist der String, in dem gesucht werden soll
var s,teilstring:string;
... s := '1.2.3.4.5.6.7.8.9'; //nun möchte ich den Wert zwischen '1.2.3.' und '.9' haben, genauer zwischen dem dritten und dem achten Punkt teilstring := wertZwischen(s,'.',3,'.',8,false,false); //teilstring ist jetzt '4.5.6.7.8' //nun möchte ich den Wert vom Anfang bis '3' haben teilstring := wertZwischen(s,'',0,'3',1,true,false); //teilstring ist jetzt '1.2.' //nun möchte ich den Wert zwischen '2.3.' bis zum Ende haben teilstring := wertZwischen(s,'2.3.',1,'',0,false,true); //teilstring ist jetzt '4.5.6.7.8.9' -Der zweite Parameter (zeichen1) ist der String, vor dem gesuchten Wert -Der dritte Parameter (zeichen1nummer) ist die Nummer des Strings vor dem gesuchten Wert (z.B. wenn man nach dem Wert hinter dem dritten '.' sucht, schreibt man hier 3 hinein) -Der vierte Parameter (zeichen2) ist der String, hinter dem gesuchten Wert -Der fünfte Parameter (zeichen2nummer) ist die Nummer des Strings hinter dem gesuchten Wert -Der sechste Parameter (abErstesZeichen) gibt an, ob der gesuchte Wert beim ersten Zeichen des Strings beginnt. Wenn ja, dann ist er true und der zweite und dritte Parameter sind egal -Der siebte Parameter (bisLetztesZeichen) gibt an, ob der gesuchte Wert bis zum letzten Zeichen des Strings geht. Entsprechend dem sechsten Parameter |
Re: String zwischen 2 bekannten Teilstrings ermitteln
Wofür könnte man das gebrauchen?
|
Re: String zwischen 2 bekannten Teilstrings ermitteln
- 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:
StopIndex nicht angegeben, dann wird der zuletzt gefundene String genommen
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; und sind hier die lezten Parameter nicht angegeben (oder -1), dann wird der Stringanfang, bzw. das Stringende genommen
Delphi-Quellcode:
(Codes ungetestet)
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; |
Re: String zwischen 2 bekannten Teilstrings ermitteln
Ok, habe gedacht, diese Funktion wäre ganz sinnvoll für den einen oder anderen. Sie hat mir jedenfalls immer gute Dienste geleistet.
Zitat:
Das kann zum Beispiel nützlich sein, wenn man mit den Sockets mit SendText arbeitet. Oder man benutzt eine solche Funktion wenn man von TimeToStr(Time) die Sekunden haben will, oder wenn man aus einer URL den Dateinamen raushaben will, oder wenn man aus irgendwelchen Gründen auch immer einen String in einer solchen Form daliegen hat wie ![]() Gut, das ganze bekommt man anders auch hin (teilweise vielleicht auch einfacher), aber ich hab mir das ganze mal geschrieben (nach dem Motto: wer selber denkt wird schlau) und mir gedacht, vielleicht findet es jemand nützlich und interessant |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz