C# String auswerten

second.name

Lieutenant
🎅Rätsel-Elite ’24
Registriert
Sep. 2009
Beiträge
713
Hallo Forum,
ich denke, dass ich bei folgendem zu umständlich vorgehe:

Ich lese eine Datei zeilenweise in ein String-Array ein...

Auszug dieser txt-Datei:
Code:
    Q305=+0    ;NR. IN TABELLE ~
    Q333=+Q25  ;BEZUGSPUNKT ~
    Q303=+0    ;MESSWERT-UEBERGABE
43 L  Z+499 FMAX M91 M9
44 TOOL CALL 30 Z S( VC = 220 )
45 * - TOOL 30 ZWEISCHNEIDER-D96
46 CALL PGM TNC:\FF.H
47 L  A-90  C+0 FMAX

...und möchte die Zahl hinter "TOOL CALL" interpretieren. (Problem: manchmal steht dort keine Zahl, manchmal gibt es mehrere Leerzeichen in einer Zeile u. der rechte Teil neben der Zahl variiert stark.)

Bis jetzt zerpflücke ich die ganze Zeile und ich frage mich, ob das noch anders/einfacher geht:
Code:
        private int DetectOriginalToolRange()
        {
            int ToolRange = 0;

            foreach (String line in FileLines)
            {
                if (line.Contains("TOOL CALL"))
                {
                    string[] substring = line.Split();

                    for (int i = 0; i < substring.Length; i++)
                    {
                        if (substring[i] == "CALL" & substring.Length >= i + 1)
                        {
                            ToolRange = Int32.Parse(substring[i + 1]);
                        }
                    }
                }
            }

            return ToolRange;
 
Schaue dir mal bitte folgende c#-Funktionen an:
Code:
string.IndexOf(string,int);
string.Split(char[]);
string.IsNullOrWhitespace();
Sollte das noch nicht genug Gedankenstütze sein, dann frag gerne nochmal :)
 
Danke! :-) Zwei gute Anstöße! :daumen:
 
Wahnsinn Bagbag! Gibt einen Daumen - das hab ich auch noch nicht gewusst! :schluck:
 
Mit Regex kannst du - bis auf ganz wenigen Ausnahmen - so ziemlich alles parsen, was du dir an Parsingaufgaben erträumen kannst.
 
Bagbag schrieb:
Mit Regex kannst du - bis auf ganz wenigen Ausnahmen - so ziemlich alles parsen, was du dir an Parsingaufgaben erträumen kannst.
Naja. Etwas herausfischen via RegExp hat weniger mit Parsing zu tun als mit Mustererkennung.
Nicht umsonst verwendet man bei Parsern eben i.d.R. keine regulären Ausdrücke.
 
Hallo nochmal,
an einer Stelle komm ich leider nicht weiter:

Mit Code:
Code:
private MatchCollection DetectMatchesOfToolCalls()
        {
            Regex testReg = new Regex(@"TOOL\s+CALL\s+(\d+)");

            MatchCollection matches = testReg.Matches(FileContent);

            return matches;
        }
Filtere ich alle "TOOL CALL" aus meinem String und die Zahl hinter "TOOL CALL" (oben z.B. 30, welche ich auswerten und modifizieren muss) bekomme ich mit:
Code:
match.Groups[1]

Wie aber ändere ich tatsächlich match.Groups[1]? ...Wahrscheinlich mit .replace, allerdings liegt mein Hit ja in einer groups[x].

Kann mir jemand helfen?
 
Zuletzt bearbeitet:
Bitte nochmal erklären was du machen willst.
 
Sry. :rolleyes:

Die Datei die ich einlese ist mehrere MB groß und dazwischen gibt es mehrere hundert Zeilen, die so aussehen:

"192242 TOOL CALL 143 Z S1400"

All diese "TOOL CALL"-Zeilen filtere ich mit folgender Methode in eine Collection.

Code:
private MatchCollection DetectMatchesOfToolCalls()
        {
            Regex tcReg = new Regex(@"TOOL\s+CALL\s+(\d+)");

            MatchCollection matches = tcReg.Matches(FileContent);

            return matches;
        }

Anschließend möchte ich die Zahl hinter dem "TOOL CALL" (in diesem Fall 143) modifizieren und alle Änderungen wieder in die Datei zurückschreiben?

Aber wie?
 
Ich würde per StreamReader einfach jede Zeile durchgehen, dann matchen und dann mit groups[1].index und group[1].length Außenrum ausschneiden und ein neuen string mit deinem neuen Wert erstellen und per StreamWriter in eine neue Datei schreiben.

Später könnte ich dir dazu auch Code geben, hab jetzt auf dem aktuellen Rechner kein VS installiert.
 
Zurück
Oben