...als PDF Version D7.
Die personal Version war ja wirklich sehr abgespeckt.
Es sollte aber kein Problem sein, einen einfachen "Parser" zu schreiben, der nur die
Txyz = class(Tabc)
findet und daraus eine Dot-Datei für
Graphvis erstellt.
Da würde ja dieses einfache Format reichen:
Code:
digraph ObjektHierarchie{
TObject ->
Exception
Exception -> EExternal
EExternal -> EMathError
TObject -> TPersistent
TPersistent -> TCpmonent
}
Der Quellcode ist ja bei den meisten Delphi Versionen dabei.
Die Schwierigkeit wäre dann "nur" alle Objekte zu erkennen.
Farbig markieren könnte man dann z.B.
RTL,
VCL, FMX oder Class, Interface, ... oder Community, Professional, Enterprise oder ...
Dazu wäre dann ein
CSV mit den verschiedenen Informationen hilfreich, aus denen man dann die Dot Dateien erstellen kann.
z.B.
Code:
Vorfahre;Objekt;Lib;Typ;Ver;...
;TObject;
RTL;Class;All;...
TObject;
Exception;
RTL;Error;Class;All;...
Exception;EExternal;
RTL;Error;Class;All;...
EExternal;EMathError;
RTL;Error;Class;All;...
TObject;TPersistent;
VCL;Class;All;...
TPersistent;TCpmonent;
VCL;Class;All;...
Das wäre auch ein schönes Projekt für Anfänger oder leicht Fortgeschrittene um den Umgang mit Textdateien zu erlernen.
Die Dateien liegen in "C:\Program Files (x86)\Embarcadero\Studio\
21.0\source".
(Statt der 21.0 steht da natürlich die entsprechende
IDE Version eures Delphies -> Kann man in der Versionen Listen oben nachlesen
)
In der
Unit System.IOUtils.pas liegen 3 "Klassen" (Ja, ich weiß es sind Records) mit denen man das Dateihandling relativ einfach hinbekommt. (TDirectory, TPath und TFile)
Zum Parsen kann das File einfach in eine TStringList (Oder TMemo) geladen werden.
sl.LoadFromFile(Dateiname)
oder
TMemo1.Lines.LoadFromFile(Dateiname)
.
Dann kann man ganz einfach die die Zeilen zugreifen.
Delphi-Quellcode:
for i := 0 to sl.Count -1 do
begin
// Zugriff auf Zeile i
s := sl[i];
// mach was mit s:string
...
end;
Datei Schreiben geht auch analog mit
AusgabeMemo.Lines.SaveToFile(AusgabeDateiname);
Wenn man davon ausgeht, dass Objektname und "= class ( Vorgänger )" in einer Zeile stehen, könnte man zum Analysieren der Zeilen z.B. alle WhiteSpaces entfernen und mit Pos nach '=class(' suchen.
Wenn gefunden, dann die Zeile genauer analysieren.
Das ist nicht die beste Methode aber von einem Anfänger gut umzusetzen.
Alternativ könnte man auch die Datei (sl.Text) mit RegEx durchsuchen. oder, oder oder ...
Es gibt viele Möglichkeiten. Bis hin zu einem Parser mit "Lex" und "Yacc".
Wenn Du dein Projekt veröffentlichst, erstelle bitte ein neues Thema und verlinke es hier
Viel Spaß.
MaBuSE