AGB  ·  Datenschutz  ·  Impressum  







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

Suchen und ersetzen

Ein Thema von Amateurprofi · begonnen am 2. Jul 2016 · letzter Beitrag vom 5. Jul 2016
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#11

AW: Suchen und ersetzen

  Alt 2. Jul 2016, 16:23
Eigentlich ist das keine schlechte Idee. Im Moment erledige ich solche Dinge immer mit UltraEdit, wobei ich dann vorher alle betroffenen Dateien selektiere und in UltraEdit öffne. Wäre schon recht praktisch, wenn das direkt in der IDE ginge.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#12

AW: Suchen und ersetzen

  Alt 2. Jul 2016, 19:48
Weil mich das Thema interessierte und ich es auch ab und an mal brauche, habe ich gerade einfach mal ein entsprechendes Tool geschrieben. Habs getestet und es funktioniert prima.
Für diejenigen, die es ebenfalls verwenden möchten, habe ich es hochgeladen (im Anhang). Es lässt sich wie folgt ganz einfach in die IDE integrieren:
Unter "Tools->Tools konfigurieren" ein neues Tool hinzufügen und die Exe unter "Programm" einfügen (das Arbeitsverzeichnis ist dabei egal). Als Parameter den Wert "$PROJECT" angeben. Nun kann man, wenn ein Projekt geöffnet wurde, unter "Tools->DeinTitel" das Programm starten. Das aktuelle Projekt wird dabei automatisch übergeben, die .dpr nach eigenen Units (anhand der Endung .pas) durchsucht und alles aufgelistet (es lassen sich dann händisch weitere Units hinzufügen oder entfernen). Anschließend gibt man nurnoch ein, was wie ersetzt werden soll, klickt auf "Durchführen" und alles ist fertig.
Angehängte Dateien
Dateityp: zip ProjektweiteErsetzung.zip (844,1 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#13

AW: Suchen und ersetzen

  Alt 2. Jul 2016, 20:10
Weil mich das Thema interessierte und ich es auch ab und an mal brauche, habe ich gerade einfach mal ein entsprechendes Tool geschrieben. Habs getestet und es funktioniert prima.
Wie berücksichtigt das Tool denn die aktuell im Editor geöffneten und eventuell gegenüber der Version auf Platte geänderten Dateien?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Suchen und ersetzen

  Alt 2. Jul 2016, 22:01
Zitat von Uwe Raabe:
Wie berücksichtigt das Tool denn die aktuell im Editor geöffneten und eventuell gegenüber der Version auf Platte geänderten Dateien?
Gar nicht. Daran habe ich gar nicht gedacht. Man sollte also vorher alles speichern.

EDIT:

Hier mal der Quelltext, ist ja nicht viel. Wer will, kann ihn ruhig verbessern:

Delphi-Quellcode:
unit Unit_Haupt;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm_GUI = class(TForm)
    Edit_Suchen: TLabeledEdit;
    Edit_Ersetzen: TLabeledEdit;
    Label_Überschrift: TLabel;
    ListBox_Dateien: TListBox;
    Button_Starten: TButton;
    Button_Hinzufügen: TButton;
    Button_Löschen: TButton;
    OpenDialog: TOpenDialog;
    Label_Verarbeite: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button_HinzufügenClick(Sender: TObject);
    procedure ListBox_DateienDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure Button_LöschenClick(Sender: TObject);
    procedure Button_StartenClick(Sender: TObject);
  private
    { Private-Deklarationen }
    flbHorzScrollWidth: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form_GUI: TForm_GUI;
  Projektpfad: String;

const
  Pfadkürzel = '$PROJECT';

implementation

{$R *.dfm}

////////////////////
//Initialisierung://
////////////////////

procedure TForm_GUI.FormCreate(Sender: TObject);
var
  Datei: String;
  Inhalt: TStringList;
  Stelle, i: Integer;
begin
  if ParamCount > 0 then
  begin
    Datei := ParamStr(1);
    if ExtractFileExt(Datei) = '.dprojthen Delete(Datei, Length(Datei) -1, 2); //Lösche "oj" aus "dproj", um "dpr" zu erhalten.
    if ExtractFileExt(Datei) = '.dprthen //Wenn nicht .dpr, dann verwerfen.
    begin
      Inhalt := TStringList.Create;
      try
        Inhalt.LoadFromFile(Datei);
        Stelle := Pos('.pas', Inhalt.Text);
        while Stelle > 0 do
        begin
          for i := Stelle -2 downto 1 do //#39 = '
            if Inhalt.Text[i] = #39 then
            begin
              ListBox_Dateien.Items.Add(Pfadkürzel + '\' + Copy(Inhalt.Text, i +1, Stelle + 3 - i)); //Pfade mit Pfadkürzel abkürzen.
              Break;
            end;
          Stelle := Pos('.pas', Inhalt.Text, Stelle +1);
        end;
      finally
        Inhalt.Free;
      end;
    end;
    Projektpfad := ExtractFilePath(Datei);
  end;
end;

////////////
//Buttons://
////////////

procedure TForm_GUI.Button_HinzufügenClick(Sender: TObject);
var
  i: Integer;
begin
  if OpenDialog.Execute then
  begin
    if Projektpfad = 'then ListBox_Dateien.Items.AddStrings(OpenDialog.Files)
    else
      for i := 0 to OpenDialog.Files.Count -1 do
        ListBox_Dateien.Items.Add(StringReplace(OpenDialog.Files[i], Projektpfad, Pfadkürzel, []));
      //Wenn sich die Datei unterhalb des Projektverzeichnisses befindet, wird dieses verkürzt dargestellt.
  end;
end;

procedure TForm_GUI.Button_LöschenClick(Sender: TObject);
begin
  Listbox_Dateien.DeleteSelected;
end;

procedure TForm_GUI.Button_StartenClick(Sender: TObject);
var
  i: Integer;
  Inhalt: TStringList;
  Datei: String;
begin
  Label_Verarbeite.Visible := true;
  Application.ProcessMessages;

  Inhalt := TStringList.Create;
  try
    for i := 0 to ListBox_Dateien.Items.Count -1 do
    begin
      Datei := StringReplace(ListBox_Dateien.Items[i], Pfadkürzel, Projektpfad, []); //Pfadkürzel durch richtigen Pfad ersetzen.
      Inhalt.LoadFromFile(Datei);
      Inhalt.Text := StringReplace(Inhalt.Text, Edit_Suchen.Text, Edit_Ersetzen.Text, [rfReplaceAll]);
      Inhalt.SaveToFile(Datei);
    end;
  finally
    Inhalt.Free;
  end;

  Label_Verarbeite.Visible := false;
  Application.ProcessMessages;

  ShowMessage('Alles ersetzt!');
end;

//////////////
//Sonstiges://
//////////////

//Für die horizontale Scrollbox:
procedure TForm_GUI.ListBox_DateienDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
 Len: Integer;
 NewText: String;
begin
  NewText := Listbox_Dateien.Items[Index];

  with Listbox_Dateien.Canvas do
  begin
    FillRect(Rect);
    TextOut(Rect.Left +1, Rect.Top, NewText);
    Len := TextWidth(NewText) + Rect.Left + 10;
    if Len > flbHorzScrollWidth then
    begin
      flbHorzScrollWidth := Len;
      Listbox_Dateien.Perform(LB_SETHORIZONTALEXTENT, flbHorzScrollWidth, 0);
    end;
  end;
end;

end.
Angehängte Dateien
Dateityp: zip Quelltext.zip (60,6 KB, 9x aufgerufen)

Geändert von Benedikt Magnus ( 2. Jul 2016 um 22:10 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.067 Beiträge
 
Delphi XE2 Professional
 
#15

AW: Suchen und ersetzen

  Alt 3. Jul 2016, 00:25
Hab ich mal probiert, funktioniert bei mir leider nicht.

Scenario:
Im Editor bin ich in der .dproj Datei.
Mit Menu > Tools > Projektweites Ersetzen wird das Programm ProjektweiteErsetzung.exe aufgerufen.
Jetzt sollten in der Dateien Liste alle .pas Dateien des Projektes aufgelistet werden.
Die Liste bleibt aber leer.

Nun ja, das Prinzip habe ich verstanden.
Wenn ich mal die nötige Zeit habe werde ich versuchen, das zum laufen zu kriegen.

Danke, Benedikt, für die Arbeit die du dir gemacht hast.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#16

AW: Suchen und ersetzen

  Alt 3. Jul 2016, 08:28
Wenn du mal manuell in die .dpr reinsiehst, sind dort dann die .pas aufgelistet?
Die .dpr findet er wohl, sonst gäbe es eine Fehlermeldung. Dann könnte ich mir nur noch vorstellen, dass das Projekt nicht übergeben wird. Hast du den Parameter gesetzt und findest du ihn unter Makros (wenn man ein neues Tool erstellt) wieder? Ich kann leider nicht sagen, ob XE2 das unterstützt, habe hier nur XE5.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.067 Beiträge
 
Delphi XE2 Professional
 
#17

AW: Suchen und ersetzen

  Alt 3. Jul 2016, 14:13
Wenn du mal manuell in die .dpr reinsiehst, sind dort dann die .pas aufgelistet?
Die .dpr findet er wohl, sonst gäbe es eine Fehlermeldung. Dann könnte ich mir nur noch vorstellen, dass das Projekt nicht übergeben wird. Hast du den Parameter gesetzt und findest du ihn unter Makros (wenn man ein neues Tool erstellt) wieder? Ich kann leider nicht sagen, ob XE2 das unterstützt, habe hier nur XE5.
Ja.

War mein Fehler.
Ich habe nicht $Project als Parameter mitgegeben.
Du hattest das in deiner "Gebrauchsanleitung" erwähnt.
Tja, wer lesen kann und das auch tut, ist klar im Vorteil.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#18

AW: Suchen und ersetzen

  Alt 4. Jul 2016, 16:01
Freut mich, dass es nun funktioniert und ich dir helfen konnte.
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#19

AW: Suchen und ersetzen

  Alt 5. Jul 2016, 14:17
Ich wurde darauf angesprochen, dass dem Programm die Funktion, nur ganze Wörter zu ersetzen, fehle. Das habe ich nun ergänzt.
Im Anhang findet sich das Programm samt Quelltext. Was haltet ihr davon?
Angehängte Dateien
Dateityp: zip ProjektweiteErsetzung.zip (911,4 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:54 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