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;