![]() |
Auslesen der wirksamen Defines...
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; |
Re: Auslesen der wirksamen Defines...
Letztlich brauchst du dafuer einen Parser, da die IFDEFs etc eine eigene (zugegebenermassen kleine) Sprache bilden.
Irgendwo in den Hilfsprogrammen der JVCL ist da etwas vorhanden, aber ich habe mir das noch nie angeschaut. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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