![]() |
Welche gesuchte Zeichenfolge wird als erste gefunden ?
Hallo Delphigemeinde,
ich habe einen sehr langen string. Nun möchte ich das erste aufkommen einer Zeichenfolge in diesem String wissen und den Cursor dorthin positionieren. Suchbegriffe sind: 0128A 0128E 0274C 0303C usw. es gibt 18 dieser Zeichenfolgen. Ich möchte also gerne wissen, welche dieser Zeichenfolge, angefangen an Pos 0 des zu durchsuchenden Strings als erstes vorkommt. Jeder dieser 18 gesuchten Zeichenfolgen könnte theoretisch als erste Zeichenfolge im gesamten zu durchsuchenden String vorkommen. Wie würdet Ihr das lösen ? Danke schonmal. |
AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?
Wenn es nicht so auf Geschwindigkeit ankommt, könntest Du die Position aller Suchtexte ermitteln und mit math.MinIntValue die kleinste rauspicken.
|
AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?
Hi,
evtl. kann es lohnenswert sein, spätere Suchen nur noch in dem relevanten Textteil zu machen. Also sagen wir mal, du suchst zuerst nach 0128A und findest es an Pos. 500 - dann könntest du weitere Suchen auf den Bereich 0-500 beschränken. Müsste man dann mal schauen, was mehr Performance frisst, kommt sicherlich auch auf die Texte und die Verteilung der Suchbegriffe in ihnen an. LG, Frederic |
AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?
Zitat:
Delphi-Quellcode:
x = Position des ersten Fundes oder 0 für nicht gefunden
x := 0;
for i := 0 to High(Suchworte) do begin j := Pos(Suchworte[i], Text); if (j > 0) and ((j < x) or (x = 0)) then x := j; end; für SelStart dann noch 1 abziehen |
AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?
Sehr gute Idee, man darf dann nur nicht vergessen, den String nach dem ersten Treffer entsprechend zu verkleinern.
[edit] Ungetestet:
Delphi-Quellcode:
[/edit]
function MinPos(s: string; Patterns: array of string): integer;
var i, CurPos: integer; begin if Length(Patterns) > 0 then begin Result := MAXINT; for i := Low(Patterns) to High(Patterns) do begin CurPos := Pos(Patterns[i], s); if (CurPos < Result) and (CurPos > 0) then begin Result := CurPos; Delete(s, CurPos, MAXINT); //evtl. geht SetLength etwas schneller, müsste man ausprobieren end; end; end else Result := 0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 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