Einzelnen Beitrag anzeigen

Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#1

Auslesen der wirksamen Defines...

  Alt 6. Aug 2004, 09:47
Hallo,

jetzt stehe ich vor der Aufgabe aus einer Projektdatei (oder auch Projektgruppe) alle wirksamen {$Define ...} auszulesen.

Ich habe mir zuerst auch gedacht ok sollte nicht so schwer sein, bis ich mir Gedanken machte über {$IFDEF ...}, {$ELSE} und ähnliche Konstrukte.

Folglich müßte man bis zum ersten "{$IFDEF ...}" oder "{$IFNDEF ...}" alle "{DEFINES ...}" einlesen und dann selbst entscheiden ob die Bedingung zutrifft oder nicht.

Meine Frage wäre nun ob denn schon jemand solch ein Problem hatte und wie er/sie es dann gelöst hatte.

Vielleicht gibt es ja auch eine Funktion/Procedure von Delphi die mir das Parsen ersparen würde...

Diese Funktion liefert mir alle Defines aus einer Datei (ich habe die ganzen Defines in einer eigenen Datei welche ich dann immer per {$I ... } inkludiere.

Delphi-Quellcode:
function getActiveDefines(const AFileName: string; out ADefines: TStringList): integer;
var
  TF: TextFile;
  lTmpStrList: TStringList;
  lStr: string;
  i: integer;
begin
  if (not FileExists(AFileName)) then
  begin
    Result := -1;
  end
  else
  begin
    ADefines := TStringList.Create;
    ADefines.CommaText := '';
    lTmpStrList := TStringList.Create;
    try
      AssignFile(TF, AFileName);
      try
        Reset(TF);
        while (not EOF(TF)) do
        begin
          Readln(TF, lStr);
          if (pos('{$DEFINE ', UpperCase(lStr)) > 0) then
          begin
            SplitStr(UpperCase(lStr), '{$DEFINE ', lTmpStrList, true);
            for i := 0 to lTmpStrList.Count - 1 do
              if (Trim(lTmpStrList[i]) <> '') then
                ADefines.Add(Trim(copy(lTmpStrList[i], 1, pos('}', lTmpStrList[i]) - 1)));
          end;
        end;
      finally
        CloseFile(TF);
      end;
    finally
      FreeAndNil(lTmpStrList);
    end;
  end;
end;
Günter
  Mit Zitat antworten Zitat