Einzelnen Beitrag anzeigen

bernhard_LA
Online

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

Parsen von Source Code Files

  Alt 14. Mär 2022, 14:27
ich muss Sourcecode files für eine Weiterverarbeitung parsen, bzw. umformatieren und hierbei 2 Anforderungen erfüllen :
  1. jeder Befehl wird durch ein ';' abgeschlossen, der Befehl kann über eine beliebige Anzahl von Textzeilen aufgeteilt sein, schreibe den Befehl in eine Zeile = Item einer Stringlsite
  2. behalte Kommentare in der ursprünglichen Formatierung bei, es gibt einzeilige und mehrzeilige Kommentare


hier meine aktuelle noch nicht fertige Lösung:


Delphi-Quellcode:
procedure CopyCommentLines(StartStr, StopStr: string; FileStr: string;
var ReadPos: Integer; FormatedFile: TStringlist);
begin

    if ( i < Length(FileStr)- 2 ) then
     begin


     end;

end;

procedure LoadasFormatedNetlistFile(Filename: String; netlist: TStringlist;
SeparatorChar: Char);
var
  tempstr: String;
  oneline: String;
  tempChar: Char;
  i: Integer;
begin

  ///
  /// read a complete file as TStringlist and assign .text as function result here
  ///
  tempstr := LoadStringFromFile(Filename);

  oneline := '';
  i := 0;

  repeat

    ///
    /// direct copy all comment lines to the clean file
    ///

    CopyCommentLines('/*', '*/', tempstr, i, netlist);

    CopyCommentLines('//', #13#10, tempstr, i, netlist);

    ///
    /// copy all chars until separator into one line
    ///
    tempChar := tempstr[i];

    if (tempChar <> #10) and (tempChar <> #13) then
    begin
      if tempChar <> SeparatorChar then
        oneline := oneline + tempChar
      else
      begin
        oneline := oneline + tempChar;
        netlist.Add(oneline);
        oneline := '';
      end;

    end;

    inc(i);

  until (i >= Length(tempstr));


end;

Frage :

a) gibt es für diese Aufgabe eine einfachere Lösungsmethode
b) in Delphi gibt es keine fertige Methode für das Ausscheniden eines Strings mit start und stop Suchstring ?

Geändert von bernhard_LA (14. Mär 2022 um 14:30 Uhr)
  Mit Zitat antworten Zitat