![]() |
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:
Werde jetzt weiter probieren. Wäre nett wenn ihr euch das mal anschauen könntet.
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; Mit freundlichen Grüßen, Strefan Voesch |
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.
|
Re: Nach String suchen und mit anchließenden Zeichen ausgebe
Hallo Overburn,
diesen Code kannst du bestimmt an deine Bedürfnisse anpassen:
Delphi-Quellcode:
Der Aufruf wäre dann etwa so:
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;
Delphi-Quellcode:
Geliefert werden die Fundstellen im Format "Zeilennummer=Text"
uses
Classes, StrUtils, SysUtils; var sl: TStringList; begin sl := TStringList.Create; ExtractText(ParamStr(1), '{$IFDEF', '}', sl); WriteLn(sl.Text); sl.Free; end; Grüße vom marabu |
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