Einzelnen Beitrag anzeigen

HenKst

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

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