AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Nach String suchen und mit anchließenden Zeichen ausgeben

Nach String suchen und mit anchließenden Zeichen ausgeben

Ein Thema von Overburn · begonnen am 15. Jul 2005 · letzter Beitrag vom 15. Jul 2005
Antwort Antwort
Overburn

Registriert seit: 12. Okt 2004
Ort: Bochum
47 Beiträge
 
#1

Nach String suchen und mit anchließenden Zeichen ausgeben

  Alt 15. Jul 2005, 08:15
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

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

  Alt 15. Jul 2005, 08:30
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

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

  Alt 15. Jul 2005, 09:08
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
  Mit Zitat antworten Zitat
Overburn

Registriert seit: 12. Okt 2004
Ort: Bochum
47 Beiträge
 
#4

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

  Alt 15. Jul 2005, 09:41
Hallo marabu!
Funktioniert super!
Vielen Dank.
Stefan
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:34 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