AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

uses in sehr vielen pas-Dateien anpassen

Ein Thema von knochen · begonnen am 30. Apr 2010 · letzter Beitrag vom 30. Apr 2010
Antwort Antwort
knochen

Registriert seit: 26. Aug 2009
81 Beiträge
 
Delphi 2006 Professional
 
#1

uses in sehr vielen pas-Dateien anpassen

  Alt 30. Apr 2010, 12:26
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.
A fool with a tool remains a fool.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: uses in sehr vielen pas-Dateien anpassen

  Alt 30. Apr 2010, 13:22
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#3

Re: uses in sehr vielen pas-Dateien anpassen

  Alt 30. Apr 2010, 13:32
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

Re: uses in sehr vielen pas-Dateien anpassen

  Alt 30. Apr 2010, 14:01
Die GExperts haben genau so ein GREP/Replace-Tool für Delphi-Projekte drin.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#5

Re: uses in sehr vielen pas-Dateien anpassen

  Alt 30. Apr 2010, 14:33
Zitat von blackfin:
Die GExperts haben genau so ein GREP/Replace-Tool für Delphi-Projekte drin.
Du meinst, dass das kann, was der OP will? Das musst du mir zeigen.
Uli Gerhardt
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#6

Re: uses in sehr vielen pas-Dateien anpassen

  Alt 30. Apr 2010, 14:42
*hisst den weissen socken*

OK, ich geb dir recht, das Ding kann ja nur single line.....
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: uses in sehr vielen pas-Dateien anpassen

  Alt 30. Apr 2010, 16:53
Delphi-Quellcode:
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');
*)
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: uses in sehr vielen pas-Dateien anpassen

  Alt 30. Apr 2010, 17:28
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.)
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz