Hallo,
ich habe zwar jetzt nicht so die Ahnung im konkreten Fall, aber weil seit einem Tag sich niemand gemeldet hat versuche ich mal zu helfen:
Wenn ich an einem Code bin der nicht funktioniert und nicht weiß warum, dann räume ich erst mal auf. Das könntes Du auch versuchen, vielleicht kommst Du vielleicht selber drauf oder kannst uns dann den präsentieren.
z.B:
1.
- am Anfang ein i:Integer; und ein line: string;
- dann statt "for linePath in TempMenuData do" ein "for i in TempMenuData do".
- zwei Zeilen später dann ein "line := TempMenuData.Strings[i]
- dann alle "TempMenuData.Strings[TempMenuData.IndexOf(linePath)]" durch "line" ersetzen
2.
- die jeweils drei Zeilen mit "tempMenuTop.Replace" in eine separate Methode verpacken (z.B. CleanMenItem und CleanAction)
3.
- das zweite "if linePath.Contains('end')" scheint mir überflüssig zu sein.
4.
- Kurze Zeilen mit if zusammenziehen
Dann wird übersichtlicher und Du oder wir sehen eher woran es hakt.
Ansonsten teile ich die Meinung von TigerLilly und meine eine zeilenweise Analyse ist in Deinem Fall zielführend. Für mich riecht es danach, also wäre das nur ein Tool firmenintern. Da einen Lexer oder mit binären
DFM zu hantieren halte ich für übertrieben. (Ich gehe davon aus, dass jeder, der professionell Software entwickelt,
dfm als Text speichert, weil man sonst Versionskontrolle nicht sinnvoll benutzen kann.)