AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memo durchsuchen

Ein Thema von smart · begonnen am 26. Dez 2010 · letzter Beitrag vom 26. Dez 2010
Antwort Antwort
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#1

Memo durchsuchen

  Alt 26. Dez 2010, 11:08
Ich suche eine ganz einfache Suchfunktion die einen Text in einem Memo durchsucht aber auch dopelte vorkommende Wörter markiert.
Delphi-Quellcode:
var
  I, J, PosReturn, SkipChars: Integer;
begin
  for I := 0 to Memo1.Lines.Count do
  begin
    PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[I]);
    if PosReturn <> 0 then {gefunden!}
    begin
      Skipchars := 0;
      for J := 0 to I - 1 do
        Skipchars := Skipchars + Length(Memo1.Lines[J]);
      SkipChars := SkipChars + (I*2);
      SkipChars := SkipChars + PosReturn - 1;

      Memo1.SetFocus;
      Memo1.SelStart := SkipChars;
      Memo1.SelLength := Length(FindDialog1.FindText);
      Break;
    end;
  end;
Habe hier mal was gefunden. sucht aber leider keine doppelten Wörter raus
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Memo durchsuchen

  Alt 26. Dez 2010, 11:10
Schau dir mal PosEx() an
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Memo durchsuchen

  Alt 26. Dez 2010, 11:55
Zitat:
for I := 0 to Memo1.Lines.Count do
Du meinst bestimmt -1

Delphi-Quellcode:
var
  I, PosReturn, SkipChars: Integer;
begin
  Skipchars := 0;
  for I := 0 to Memo1.Lines.Count - 1 do
  begin
    PosReturn := Pos(FindDialog1.FindText, Memo1.Lines[I]);
    if PosReturn <> 0 then
    begin
      Memo1.SetFocus;
      Memo1.SelStart := SkipChars + PosReturn - 1;
      Memo1.SelLength := Length(FindDialog1.FindText);
      Break;
    end;
    //Inc(Skipchars, Length(Memo1.Lines[J]) + Length(sLineBreak);
    Inc(Skipchars, Length(Memo1.Lines[J]) + Length(Memo1.Lines.LineBreak);
  end;
Delphi-Quellcode:
var
  PosReturn: Integer;
begin
  PosReturn := Pos(FindDialog1.FindText, Memo1.Text);
  if PosReturn <> 0 then
  begin
    Memo1.SetFocus;
    Memo1.SelStart := PosReturn - 1;
    Memo1.SelLength := Length(FindDialog1.FindText);
  end;
end;
Und bezüglich des Weitersuchens ist es über .Text einfacher, da man sich dort nur eine Startposition merken/besorgen muß.
Nei der zeilenweisen Behandlung muß diese Position ja erstmal in Zeile+Spalte zerlegt werden, oder man merkt sich die Anzahl der vorherrigen Funde und muß dann jesemal komplett neu suchen und beim gewünschten Fund abbrechen.

Delphi-Quellcode:
var
  PosReturn: Integer;
begin
  if SucheVonVorn then
    PosReturn := Pos(FindDialog1.FindText, Memo1.Text)
  else
    PosReturn := PosEx(FindDialog1.FindText, Memo1.Text,
      Memo1.SelStart + Memo1.SelLength - 1);
  if PosReturn <> 0 then
  begin
    Memo1.SetFocus;
    Memo1.SelStart := PosReturn - 1;
    Memo1.SelLength := Length(FindDialog1.FindText);
  end;
end;
PS: Nicht mehrfach inder Schleife auf Memo1.Text und niemals auf Memo1.Lines.Text zugreifen ... wenn, dann Memo1.Text vorher in eine Stringvariable kopieren und Diese verwenden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Dez 2010 um 11:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Memo durchsuchen

  Alt 26. Dez 2010, 12:38
Ein TMemo kann nur einen best. Bereich markiert darstellen.
Man könnte auf ein TRichEdit ausweichen und alle gefundenen Textstellen unterstreichen oder auch farblich hevorheben.
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Memo durchsuchen

  Alt 26. Dez 2010, 13:04
Vielen Dank, für die ausgibigen Tipps. War sehr lehreich! Danke.
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  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 05:48 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