![]() |
uses in sehr vielen pas-Dateien anpassen
Hallo zusammen,
ich musste an unsrem sehr großen Projekt strukturelle Änderungen vornehmen. Dabei kommt es zu folgendem Szenario: In einigen Tausend pas-Dateien wird eine Funktion aufgerufen, die sich in der Unit MeineNeueUnit.pas befindet, die gerade neu hinzugekommen ist. Die Funktionsaufrufe in den betroffenen Units sind alle vorhanden, aber die Unit MeineNeueUnit.pas steht noch nicht in deren uses-Klausel. Wie kann ich elegant und zeitsparend MeineNeueUnit.pas in alle Units einbinden, in denen besagte Funktion aufgerufen wird? Nochmal kürzer formuliert: Ich habe in vielen Dateien Funktionsaufrufe, ohne dass die benötigte Unit bei uses eingebunden ist. Wenn es zwei uses gibt, soll MeineNeueUnit.pas in der zweiten uses eingebunden werden. Wer hilft? Vielen Dank im Voraus. |
Re: uses in sehr vielen pas-Dateien anpassen
Einfach in der bisherigen Unit in der die alte Version der Funktion definiert ist die neue Version aufrufen und diese alte Methode dann als deprecated deklarieren.
Dann könnt ihr bei bedarf (unit wird eh gerade geändert) den Aufruf anpassen. |
Re: uses in sehr vielen pas-Dateien anpassen
Schreibt euch ein kleines Tool, das nach dem Funktionsnamen grept, und dort, wo es fündig wird, die implementation-uses-Klausel anpasst - z.B. Unit in Stringlist laden, in selbiger nach Eintrag "implementation" suchen, dann ab dessen Index nach Eintrag "uses" suchen und dort Append("MeineNeueUnit,") aufrufen. Das ist natürlich nicht narrensicher, aber ist ne halbe Stunde Arbeit und könnte euch 99,9% der Arbeit abnehmen.
|
Re: uses in sehr vielen pas-Dateien anpassen
Die
![]() |
Re: uses in sehr vielen pas-Dateien anpassen
Zitat:
|
Re: uses in sehr vielen pas-Dateien anpassen
*hisst den weissen socken*
OK, ich geb dir recht, das Ding kann ja nur single line..... |
Re: uses in sehr vielen pas-Dateien anpassen
Delphi-Quellcode:
Sollte funktionieren. Fügt die Uses-Klausel aber auch dann ein, wenn 'SomeFunctionCall' in auskommentiertem Code steht. Einen Parser zu schreiben war mir grad zu umständlich. :mrgreen:
Procedure AddToUsesClause (aCode : TStrings; aUnitName : String);
Var CodeStr : String; upcCodeStr : String; p,q : Integer; Begin CodeStr := aCode.Text; upcCodeStr := Uppercase(CodeStr); p := Pos ('IMPLEMENTATION',upcCodeStr); if p=0 then exit; q := PosEx('USES',upcCodeStr,p); if q=0 then Insert(#13#10+' uses '+aUnitName+';'+#13#10,CodeStr, p + 14) else Insert(' '+aUnitName+',',CodeStr, q + 4); aCode.Text := CodeStr; End; Procedure AddUnitIfRefExists (aPasFileName : String; aUnitName, aRefName : String); Var code : TStringlist; Begin code := TStringlist.Create; code.LoadFromfile (aPasFileName); Try if Pos (Uppercase(aRefName), Uppercase (code.Text))<>0 then AddToUsesClause(code, aUnitName); Finally code.Free; End End; (* Aufruf AddUnitIfRefExists ('MyPasFile.Pas','NewUnit','SomeFunctionCall'); *) |
Re: uses in sehr vielen pas-Dateien anpassen
Wie fügt denn Delphi Units ein, wenn es das automatisch macht?
Das könnte man bestimmt anzapfen. (Aber es wäre schon toll, wenn man bei der nächsten Compilerversion endlich mal Zugriff auf den Parser bekommen könnte.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz