AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Welche gesuchte Zeichenfolge wird als erste gefunden ?
Thema durchsuchen
Ansicht
Themen-Optionen

Welche gesuchte Zeichenfolge wird als erste gefunden ?

Ein Thema von nachtstreuner · begonnen am 18. Mai 2011 · letzter Beitrag vom 18. Mai 2011
Antwort Antwort
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#1

Welche gesuchte Zeichenfolge wird als erste gefunden ?

  Alt 18. Mai 2011, 16:26
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.
Alles wird gut -
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?

  Alt 18. Mai 2011, 16:45
Wenn es nicht so auf Geschwindigkeit ankommt, könntest Du die Position aller Suchtexte ermitteln und mit math.MinIntValue die kleinste rauspicken.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?

  Alt 18. Mai 2011, 16:48
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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?

  Alt 18. Mai 2011, 16:51
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Welche gesuchte Zeichenfolge wird als erste gefunden ?

  Alt 18. Mai 2011, 16:52
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (18. Mai 2011 um 17:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz