Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nach String suchen und mit anchließenden Zeichen ausgeben (https://www.delphipraxis.net/49729-nach-string-suchen-und-mit-anchliessenden-zeichen-ausgeben.html)

Overburn 15. Jul 2005 07:15


Nach String suchen und mit anchließenden Zeichen ausgeben
 
Hallo!
Ich bin gerade am verzweifeln. Also: Ich habe ein Programm geschrieben, was in einem Verzeichnis alle .pas Und .dfm Dateien nachnach einem bestimmten String durchsucht. Wenn dieser gefunden wird wird der Name der Datei ausgegeben. Der String nach dem gesucht wird ist überings "{$IFDEF". Jetzt möchte ich gerne, das er mir alles ausgibt, was in dieser IFDEF anweisung steht und zwar bis zur abschließenden Klammer "}".
Hier der Code:
Delphi-Quellcode:
function Tform1.Str1IstInStr2(const a,b: string): boolean;
begin
result := pos(AnsiLowercase(a),AnsiLowercase(b)) > 0;
end;

function tform1.istInderDatei(const s: string; const pfad: string): boolean;
var pu : TSTringlist;
begin
  result := false;
  try
    pu := Tstringlist.Create;
    try
      pu.LoadFromFile(pfad);
      if Str1IstInStr2(s,pu.text) then result := true;

         finally pu.free End;
  except showmessage(pfad + ' | konnte nicht durchsucht werden') End;
end;

procedure tform1.ZuMemoFallsKiterienerfuellt(const pfad, BestimmteDatei,SuchTextInDerDatei: string);
begin
  if Str1IstInStr2(BestimmteDatei,pfad)   and istInderDatei(SuchTextInDerDatei,pfad) then
  begin
         memo1.lines.add('"'+pfad + '" enthält den Text "' +s1);
  end;
end;

procedure tform1.VerzeichnisDurchsuchen(dir: string; const BestimmteDatei,
  SuchTextInDerDatei: string);
  var SR: TSearchRec;
          dirtemp : string;
Begin
    dir := IncludeTrailingBackslash(dir);
    if FindFirst(dir+'*.*',faAnyFile,SR)=0 then Begin
    repeat
        If ((sr.attr And faDirectory) = 0) and (SR.Name[1]<>'.') then
        ZuMemoFallsKiterienerfuellt(dir + sr.name, BestimmteDatei,
                                    SuchTextInDerDatei);
       if (SR.Attr and faDirectory = faDirectory)
        and (SR.Name[1] <> '.') then Begin
            dirTemp := dir + sr.name;
            VerzeichnisDurchsuchen(dirtemp,BestimmteDatei, SuchTextInDerDatei);
            End;
    until FindNext(SR)<>0;
    FindClose(SR);
  End;
End;



procedure TForm1.Button2Click(Sender: TObject);
var dir, datei, suchtext: string;
begin
 memo1.Lines.Clear;
 dir := edit1.text;
 datei := 'pas';
 suchtext := '{$IFDEF';
 VerzeichnisDurchsuchen(dir, datei, suchtext);
 dir := edit1.text;
 datei := 'dfm';
suchtext := '{$IFDEF';
 VerzeichnisDurchsuchen(dir, datei, suchtext);
end;
Werde jetzt weiter probieren. Wäre nett wenn ihr euch das mal anschauen könntet.

Mit freundlichen Grüßen,
Strefan Voesch

Hansa 15. Jul 2005 07:30

Re: Nach String suchen und mit anchließenden Zeichen ausgebe
 
Vorab : Quelltext viel zu kompliziert für so eine simple Sache. 8) Und was haben die Leerzeichen hinter dem $IFDEF zu suchen ? Du brauchst doch nur mit pos zeilenweise den Text nach dem Wort zu durchsuchen.

marabu 15. Jul 2005 08:08

Re: Nach String suchen und mit anchließenden Zeichen ausgebe
 
Hallo Overburn,

diesen Code kannst du bestimmt an deine Bedürfnisse anpassen:

Delphi-Quellcode:
procedure ExtractText(const filename, prefix, suffix: string; tl: TStringList);
var
  sl: TStringList;
  i, iPrefix, iSuffix: integer;
  s: string;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile(filename);
    for i := 0 to sl.Count - 1 do begin
      s := sl[i];
      iSuffix := 0;
      repeat
        Inc(iSuffix, Length(suffix));
        iPrefix := PosEx(prefix, s, iSuffix);
        if iPrefix = 0 then Break;
        Inc(iPrefix, Length(prefix));
        iSuffix := PosEx(suffix, s, iPrefix);
        tl.Values[IntToStr(Succ(i))] := Trim(Copy(s, iPrefix, iSuffix - iPrefix));
      until iSuffix = 0;
    end;
  finally
    sl.Free;
  end;
end;
Der Aufruf wäre dann etwa so:

Delphi-Quellcode:
uses
  Classes,
  StrUtils,
  SysUtils;

var
  sl: TStringList;

begin
  sl := TStringList.Create;
  ExtractText(ParamStr(1), '{$IFDEF', '}', sl);
  WriteLn(sl.Text);
  sl.Free;
end;
Geliefert werden die Fundstellen im Format "Zeilennummer=Text"

Grüße vom marabu

Overburn 15. Jul 2005 08:41

Re: Nach String suchen und mit anchließenden Zeichen ausgebe
 
Hallo marabu!
Funktioniert super!
Vielen Dank.
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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