Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Delphi Historie / Überblick über die verschiedenen Delphi Versionen

  Alt 22. Dez 2021, 10:37
...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
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat