Laden...

Quellcode nach fest codierten Strings durchsuchen und ersetzen

Erstellt von Martakus vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.021 Views
Thema geschlossen
Martakus Themenstarter:in
26 Beiträge seit 2006
vor 13 Jahren
Quellcode nach fest codierten Strings durchsuchen und ersetzen

Hallo,
ich habe bei einem Projekt ein Problem. In dem C# WinForms Programm gibt es in den C# Klassen viele fest codierte Strings. Denen soll jetzt nicht mehr direkt der String zugewiesen werden sondern ein Eintrag aus der Resourcen-Datei.
Hat jemand eine Idee, wie ich den Quellcode automatisch nach diesen Strings durchsuchen kann und die Strings ersetzen lassen kann?

Schon mal dank für alle nützlichen Tipps.

Nimm das Leben nicht so ernst, du kommst niemals lebend heraus! 👶

Gelöschter Account
vor 13 Jahren
  1. erstelle eine Extensionmethod für Strings (z.B. .FromRessource)
  2. verwende suchen & ersetzen mit einem passenden Regexpattern zum suchen und dann das .FromRessource an jedem fest codierten string anzuhängen.

nun hast du 2 Möglichekeiten.

  1. du programmierst die FromRessource Methode so aus, das diese alle Strings erstmal in eine Datei speichert, damit du einen überblick gewinnst.

  2. du verwendest "find all references" von VS um alle aufrufe zu lokalisieren. Um so einen Überblick zu gewinnen.

nun musst du alle unpassenden aufrufe entfernen.
Nachdem das getan ist, erzeugst du eine Ressourcedatei mit allen aktuellen aufrufen und verwendest die bestehenden hartkodierten Strings als Key.

L
770 Beiträge seit 2006
vor 13 Jahren

Schnellersetzung (STRG + H) ?

lg Lion

Martakus Themenstarter:in
26 Beiträge seit 2006
vor 13 Jahren

Hallo JAck30lena,
das klingt erstmal als könnte daraus für mich eine Lösung werden, aber leider habe ich das noch nicht ganz verstanden.

NOch mal zu meinem Problem, habe eben vergessen zu erwähnen, das ich den gesamten Quellcode automatisch durchlaufen will. Die dadrin gefunden fest codierten Strings möchte ich raus nehmen und in eine Resourcen Datei schreiben. Und an die Stelle des fest codierten Strings soll dann der EIntrag aus der Resourcen-Datei kommen. Dafür will ich ein Tool schreiben, das mir alle Klassen in einem Projekt durchgeht und die Strings so ersetzt.

Nimm das Leben nicht so ernst, du kommst niemals lebend heraus! 👶

Gelöschter Account
vor 13 Jahren

Schön, das du deine Anforderung mit anderen Worten wiederholst aber nicht erwähnst, was du nicht verstanden hast. Die Lösung bleibt die gleiche. Ich bin aber zu faul um meinen obigen Post nochmals hier zu zitieren.

Martakus Themenstarter:in
26 Beiträge seit 2006
vor 13 Jahren

Ok, sorry, Montag morgen... ^^
Also erstmal habe ich den Sinn der Extension Methode nicht verstanden. Wofür brauch ich die?

Wie durchsuche ich denn den Quellcode der aller C# Dateien in meiner Projektmappe? Muss ich die alle als Strings laden und dann dadrin nach Strings suchen über Regexpattern, vereinfach ausgedrückt?

Nimm das Leben nicht so ernst, du kommst niemals lebend heraus! 👶

D
91 Beiträge seit 2005
vor 13 Jahren
  1. erstelle eine Extensionmethod für Strings (z.B. .FromRessource)
  2. verwende suchen & ersetzen mit einem passenden Regexpattern zum suchen und dann das .FromRessource an jedem fest codierten string anzuhängen.

Hi JAck30|ena,

wollte dir nur mal kurz mitteilen, dass ich die Idee echt clever finde!

VG, Florian

Gelöschter Account
vor 13 Jahren

Also erstmal habe ich den Sinn der Extension Methode nicht verstanden. Wofür brauch ich die?

Das ist der zentrale Anlaufpunkt, wo du den fest codierten String erhälst und ihn in einen String aus einer Ressourcedatei verwandeln kannst.

Wie durchsuche ich denn den Quellcode der aller C# Dateien in meiner Projektmappe?

Siehe "Suchen und ersetzen in Visual Studio"

Muss ich die alle als Strings laden und dann dadrin nach Strings suchen über Regexpattern, vereinfach ausgedrückt?

Nein. Wie gesagt, verwende die Hilfefunktion von Visual Studio.

wollte dir nur mal kurz mitteilen, dass ich die Idee echt clever finde!

merci 😃
Wir mussten mal in eine bestehende Applikation Lokalisierung hinzufügen und das war der einfachste weg.

Martakus Themenstarter:in
26 Beiträge seit 2006
vor 13 Jahren

Einmal muss ich noch nachfragen:

Wie kann man denn das genau machen suchen und ersetzen in C# Dateien per Code. Suchen in Strings klar...kein Problem, aber in ganzen Dateien weiß ich nicht wie das geht. Ein kleines Codebeispiel wäre da super 😃

Nimm das Leben nicht so ernst, du kommst niemals lebend heraus! 👶

Gelöschter Account
vor 13 Jahren

Noch ein mal: Verwende die Suchen und Ersetzen Funktion von Visual Studio. Diese unterstützt auch Regex.

916 Beiträge seit 2008
vor 13 Jahren

Die Antwort wurde dir bereits gegeben.

Schnellersetzung (STRG + H)

Again what learned...

Martakus Themenstarter:in
26 Beiträge seit 2006
vor 13 Jahren

Ich brauche aber eine Lösung per Code. Die suchen und ersetzen Funktion von Visual Studio wäre ja per Hand, aber ich brauche ein Tool, das das automatisch macht. Da drücke ich einen Knopf und alle C# Dateien werden durchsucht und alle fest Codierten Strings werden in die Resourcen Datei geschrieben und mit deren Einträge ersetzt.

Nimm das Leben nicht so ernst, du kommst niemals lebend heraus! 👶

Gelöschter Account
vor 13 Jahren

Dann hol dir eben alle *.cs Dateien und wenden Regex auf diese an.
Siehe:
[Artikel] Regex-Tutorial
[Tutorial] Alles über Dateien 2.2

U
282 Beiträge seit 2008
vor 13 Jahren

Ich brauche aber eine Lösung per Code. Die suchen und ersetzen Funktion von Visual Studio wäre ja per Hand, aber ich brauche ein Tool, das das automatisch macht. Da drücke ich einen Knopf und alle C# Dateien werden durchsucht und alle fest Codierten Strings werden in die Resourcen Datei geschrieben und mit deren Einträge ersetzt.

Was genau stört dich an dem Suchen und Ersetzen in VS? Du kannst es automatisch auf alle Dateien deiner Solution anwenden? Hast du nicht alle Dateien in einer Solution? Stört dich, dass du einmal eine GUI öffnen musst, wäre die eine Komandozeile lieber? Du sollst ja nicht das ganze Datei für Datei machen...

Martakus Themenstarter:in
26 Beiträge seit 2006
vor 13 Jahren

Stören tut mich nichts daran, aber es ist eine Vorgabe, das es was automatisches sein soll. Also wörtlich Knopf drücken und das läuft. Daher kommt das suchen und ersetzen von VS nicht in Frage.

Nimm das Leben nicht so ernst, du kommst niemals lebend heraus! 👶

916 Beiträge seit 2008
vor 13 Jahren

Ja also wie bereits von Jack mehrmals geschrieben.

* Nimm als Input die csproj Datei
* Diese kannst du parsen und dir eine Liste mit c# Dateien machen
* Dann iterierst du über alle c# Dateien und öffnest diese mit einem Reader
* Nun einen passenden Regex nehmen, und alle Matches in die Resource schreiben und dort dann ersetzen, oder mit der von Jack vorgeschlagenen Extension Method
* Änderungen speichern

Again what learned...

Martakus Themenstarter:in
26 Beiträge seit 2006
vor 13 Jahren

Ja jetzt hat ich auch schon eine gute Anregung, aber danke nochmals für die AUflistung, damit wird es bestimmt gehen!

Nimm das Leben nicht so ernst, du kommst niemals lebend heraus! 👶

Thema geschlossen