Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Quellcode nach fest codierten Strings durchsuchen und ersetzen
Martakus
myCSharp.de - Member

Avatar #avatar-3187.jpg


Dabei seit:
Beiträge: 26
Herkunft: Paderborn

Themenstarter:

Quellcode nach fest codierten Strings durchsuchen und ersetzen

beantworten | zitieren | melden

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! :baby:
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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.
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Schnellersetzung (STRG + H) ?
lg Lion
private Nachricht | Beiträge des Benutzers
Martakus
myCSharp.de - Member

Avatar #avatar-3187.jpg


Dabei seit:
Beiträge: 26
Herkunft: Paderborn

Themenstarter:

beantworten | zitieren | melden

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! :baby:
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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
myCSharp.de - Member

Avatar #avatar-3187.jpg


Dabei seit:
Beiträge: 26
Herkunft: Paderborn

Themenstarter:

beantworten | zitieren | melden

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! :baby:
private Nachricht | Beiträge des Benutzers
deerhunter
myCSharp.de - Member



Dabei seit:
Beiträge: 92

beantworten | zitieren | melden

Zitat von JAck30lena
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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Zitat
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.
Zitat
Wie durchsuche ich denn den Quellcode der aller C# Dateien in meiner Projektmappe?

Siehe "Suchen und ersetzen in Visual Studio"
Zitat
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.
Zitat
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
myCSharp.de - Member

Avatar #avatar-3187.jpg


Dabei seit:
Beiträge: 26
Herkunft: Paderborn

Themenstarter:

beantworten | zitieren | melden

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! :baby:
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

beantworten | zitieren | melden

Die Antwort wurde dir bereits gegeben.
Zitat
Schnellersetzung (STRG + H)
Again what learned...
private Nachricht | Beiträge des Benutzers
Martakus
myCSharp.de - Member

Avatar #avatar-3187.jpg


Dabei seit:
Beiträge: 26
Herkunft: Paderborn

Themenstarter:

beantworten | zitieren | melden

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! :baby:
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 285
Herkunft: Ludwigshafen

beantworten | zitieren | melden

Zitat
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...
private Nachricht | Beiträge des Benutzers
Martakus
myCSharp.de - Member

Avatar #avatar-3187.jpg


Dabei seit:
Beiträge: 26
Herkunft: Paderborn

Themenstarter:

beantworten | zitieren | melden

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! :baby:
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Martakus
myCSharp.de - Member

Avatar #avatar-3187.jpg


Dabei seit:
Beiträge: 26
Herkunft: Paderborn

Themenstarter:

beantworten | zitieren | melden

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! :baby:
private Nachricht | Beiträge des Benutzers