AGB  ·  Datenschutz  ·  Impressum  







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

Komplizierte suche in Memo ! Hilfe

Offene Frage von "Nitron"
Ein Thema von Nitron · begonnen am 18. Nov 2008 · letzter Beitrag vom 21. Nov 2008
 
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#27

Re: Komplizierte suche in Memo ! Hilfe

  Alt 21. Nov 2008, 12:39
na dann...

mit pos:
Delphi-Quellcode:
function SuchenInMemo( Memo : TMemo; NichtFindenStr : string; LastFindLine : integer = -1 ) : integer;
var
  LineIdx : integer;
  str: string;
  p: integer;
begin
  LineIdx := LastFindLine + 1;
  Result := 0;
  while
    ( LineIdx < Memo.Lines.Count ) and
    ( Result = 0 )
  do
    begin
      str:= Memo.Lines[LineIdx];
      p:= Pos( '*', str);// '*' finden;
      if
        (p > 0 ) and // '*' gefunden?
        (Pos( NichtFindenStr, str ) = 0 ) and // NichtFindStr nicht gefunden?
        (str[p+1] <> '*') and//'*' steht alleine?
        (pos(' ', str) > 1)// kein leerzeichen nach dem ersten zeichen
      then
        begin
          Result := LineIdx;
          SelectLine( Memo, LineIdx );
        end
      else
        Inc( LineIdx );
    end;
end;
mit delimitedtext (find ich schöner^^)
Delphi-Quellcode:
function SuchenInMemo( Memo : TMemo; NichtFindenStr : string; LastFindLine : integer = -1 ) : integer;
var
  LineIdx : integer;
  i: integer;
  strlst: TStringList;
  p: integer;
begin
  strlst:= TStringList.Create;
  strlst.delimiter:= '*';
  strlst.strictdelimiter:= true;
  LineIdx := LastFindLine + 1;
  Result := 0;
  while
    ( LineIdx < Memo.Lines.Count ) and
    ( Result = 0 )
  do begin
    if pos('*', Memo.Lines[LineIdx]) = 0 then
      inc(LineIdx);
      continue; //wenn kein '*' gefunden: nächster schleifendurchlauf;
    end;
    strlst.delimitedtext:= Memo.Lines[LineIdx]; // alle '*' finden;
                                               //jede zeile der strlst ist das was im memo vor einem '*' steht;
    case strlst.count of
      1: begin //ein '*' gefunden
        if pos(NichtFindenStr, strlst[0]) = 0 then begin //nichtfindstr suchen
          if pos(' ',strlst[0]) > 1 then begin //kein leerzeichen nach dem ersten zeichen
            Result := LineIdx;
            SelectLine( Memo, LineIdx );
          end;
        end;
      end;
      else begin
        if strlst[1] <> 'then begin // abragen ob '*' alleine stand
                                      // mehrere '**' sollte leerzeilen erzeugen *hoff*^^
          Result := LineIdx;
          SelectLine( Memo, LineIdx );
      end;
    end;
    Inc( LineIdx );
  end;
end;
Das sollte erstmal alles finden.
Für ausnahmen musst du dir wohl einen array von strings machen die nicht vor '*' stehen dürfen.
narf - not a real function
  Mit Zitat antworten Zitat
 


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 09:47 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