Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Welche gesuchte Zeichenfolge wird als erste gefunden ? (https://www.delphipraxis.net/160541-welche-gesuchte-zeichenfolge-wird-als-erste-gefunden.html)

nachtstreuner 18. Mai 2011 15:26

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.

DeddyH 18. Mai 2011 15:45

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.

fkerber 18. Mai 2011 15:48

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

himitsu 18. Mai 2011 15:51

AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?
 
Zitat:

Zitat von DeddyH (Beitrag 1101569)
Wenn es nicht so auf Geschwindigkeit ankommt, könntest Du die Position aller Suchtexte ermitteln und mit math.MinIntValue die kleinste rauspicken.

Und natürlich die 0 (nichts gefunden) ignorieren.

Delphi-Quellcode:
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;
x = Position des ersten Fundes oder 0 für nicht gefunden

für SelStart dann noch 1 abziehen

DeddyH 18. Mai 2011 15:52

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:
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;
[/edit]


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