Laden...

Alle String-Literale aus einer C#-Quellcodedatei auslesen

Erstellt von Ploetzi vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.721 Views
Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren
Alle String-Literale aus einer C#-Quellcodedatei auslesen

Hallo,
wie kann ich aus einem C# Code Strings erkennen?
und das automisch...?`
Wuerd gern Zeile+String ausgeben...

Ich hab keine Idee wie man das ausliest.
Es kann auch sein dass in einem C# Code mehrere Strings in einer Zeile sind,...

lg

Andreas

1.696 Beiträge seit 2006
vor 14 Jahren

Hallo,

wie meinst du denn das? Könntest du etwas näher erläutern?

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren

Ich will eine C# Datei einlesen mit meinem C# Programm auslesen.

Und dann ausgeben wo sich strings in der C# Datei befinden z.b.
Eingelesen:
String text="asdasdasd";
MessageBox.show("asdf","asdasd");
Ausgabe dann:
Zeile 1:
"asdasdasd"
Zeile2:"asdf"
Zeile2:"asdasd"

Dieses macht ja Visual Studio auch. Es gibt diese Strings dann gruen aus.

1.696 Beiträge seit 2006
vor 14 Jahren

Am einfachsten mit RegEx; du hast ja die " als Begrenzung.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren

ok 😃
auch wenn ich mehrere " in einer Zeile habe?

1.696 Beiträge seit 2006
vor 14 Jahren

ja, du mußt gieriges Verhalten unterdrücken.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

1.361 Beiträge seit 2007
vor 14 Jahren

vielleicht auch folgendes regex:

"([^"]|(?<=\\)")*"

wobei die raw-strings (mit @ davor) nicht drinne sind.

beste Grüße
zommi

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren

das oben haut nicht hin ,...das is dann kein string mehr...

hier meine variante:
*&quot;[A-Za-z0-9]&quot;*
geht die nicht wieso?

1.696 Beiträge seit 2006
vor 14 Jahren

probiere mal:

string pattern = "\"[^\"]*\"";

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren

Habs jetzt mit
http://www.txt2re.com/ gemacht



        public string containsstring(String strToCheck)
        {
            string re1 = ".*?";	// Non-greedy match on filler
            string re2 = "(\".*?\")";	// Double Quote String 1
            Regex r = new Regex(re1 + re2, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            Match m = r.Match(strToCheck);
            return m.Groups[1].ToString();
        }
       
1.361 Beiträge seit 2007
vor 14 Jahren

das oben haut nicht hin ,...das is dann kein string mehr...

Das ist ja auch der String an sich. Und nicht, wie du ihn in C# reinschreibst 😃
Alle Zeichen, die escaped werden müssen, müssen natürlich escaped werden. Sollte dann so aussehen:

string pattern = "\"([^\"]|(?<=\\\\)\")*\""; 

Eure beiden Varianten (von vbprogger wie auch von txt2re) haben probleme, wenn innerhalb des zu erfassenden Strings escapede &quot; vorkommt.

Deshalb das obige Pattern, was zwischen zwei Anführungszeichen entweder ein Nicht-anführungszeichen [^"] erwartet, oder aber ein Anfürhungszeichen mit vorhergehendem Backslash (?≤\)". (mittels positive look-behind).

Aber wie gesagt, man müsste es noch um raw-strings mit @ davor erweitern.

beste Grüße
zommi

PS: wenn es nicht nur ums Syntax-Highlighten geht, sondern du wirklich den gefundenen String haben möchtest, musst du natürlich die escapeden Zeichen selber umwandeln

1.696 Beiträge seit 2006
vor 14 Jahren

Eure beiden Varianten (von vbprogger wie auch von txt2re) haben probleme, wenn innerhalb des zu erfassenden Strings escapede &quot; vorkommt.

Das hat Ploetzi nicht verlangt, außerdem etwas sollte er auch tun 😃

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

1.361 Beiträge seit 2007
vor 14 Jahren

Das hat Ploetzi nicht verlangt

... najaaaa aber wer String-Literale aus ner C#-Datei auslesen will, der sollte schon damit rechnen, dass da Escape-Sequenzen enthalten sind.
(spätestens wenn man den Regex-Code auf die eigene Code-Datei anwendet 😄)

außerdem etwas sollte er auch tun

Nagut, da sind wir uns einig 🙂
Deshalb verrat ich auch nicht, dass er einfach ein @+ vor das Ausdruck stellen muss, um auch die verbatim-string-Literale (hab grad nachgeguckt, so heißen die offiziell) zu erfassen. 😉

viele Grüße
zommi

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo zusammen,

da muss man noch auf etwas mehr aufpassen, z.B. (vereinzelte) Anführungszeichen in Kommentaren und Anführungszeichen in einem Charakter-Literal. Mir Regex alleine wird das m.E. nichts.

herbivore