String

Alf

Mitglied
Hallo,

ich habe einen String von der Form:
string strBase = "{FRAME: X 1040.000, Y 0.0, Z 1480.000, A -128.1222, B -55.30833, C -61.01118}";

Ich brauche aber nur die reinen Zahlen also 1040.000, 0.0 usw. um dieses zu bekommen ist mir eingefallen mit strBase.IndexOf die Position der ersten Zahl zu finden und dann mit Substring(.......) auszuschneiden. Finde diese Lösung aber ziemlich dürftig. Hast du eine bessere Idee?


Gruß
Alf
 
Ja, ich habe eine bessere Idee:

Mit regulären Ausdrücken:

Alles, was du benötigst, findest du im Namespace "System.Text.RegularExpressions".

Ich kanns dir leider nur in VB.NET zeigen:
Code:
imports Syste.Text.RegularExpressions

Dim Nummern as MatchCollection
Nummern = RegEx.Matches(DeinString, "(?<key>[A-Z])\x20(?<value>-{0,1}\d{0,}\x2E{0,1}\d{0,})")
Dim Nummer as Match
For Each Nummer in Nummern
     Dim key as String = Nummer.Groups("key").Value
     Dim value as Double = Double.Parse(Nummer.Groups.("value").Value)
     '// Was immer du damit machen willst
Next Nummer

Diese Methode hat den Vorteil, dass sich dieser String auch ändern kann; mehr oder weniger Angaben haben könnte.
Kommst du damit klar?
 
Hallo,

wenn ich ehrlich bin, habe ich keinen Plan was du da machst! Versuche es in C# umzusetzten und scheiter elendig. Was bedeutet: "((?<key>[A-Z])\x20(?<value>-{0,1}\d{0,}\x2E{0,1}\d{0,}))"? Und die anderen Zeilen!

Gruß
Alf
 
Eines kann ich dir dazu sagen:
die einzelnen Zeichen hintereinander ist eine Regular Expression.
Damit kann man schnell und leicht(wenn man die RegEx' beherrscht) Strings bearbeiten. Ich kenn diese aus Perl, wusste jedoch nicht, dass das im .net auch funktionieren.
 
In jeder guten Sprache wirst du RegEx finden da du damit sehr gut Strings bearbeiten kannst, und eben auch validieren! (Schaut euch in ASP.net das ValidierungsWebForm an, arbeitet auch mit RegEx.)

Die andere Methode wäre eben die mit Substring und IndexOf.
 
Hi,

ich habe nun auch eine Lösung in C# gefunden:

strBase = "{FRAME: X 123123.123456, Y 123456.12345, Z .000, A -128.1222, B -55.30833, C -61.01118}";
string p = @"(\d+\.\d+|-\d+\.\d+|\.\d+)";
Match m = Regex.Match(strBase, p);
while (m.Success)
{

Console.WriteLine("Match=" + m.ToString());

}

Gruß
Alf
 
Zurück