I have to parse a String to create a PathSegmentCollection. The string is composed of numbers separated by comas and/or (any) whitespaces (like newline, tab, etc...), also the numbers can be written using scientific notation.
This is an example: "9.63074,9.63074 -5.55708e-006 0 ,0 1477.78"
And the points are: P1(9.63074, 9.63074), P2(-0,555708, 0), P3(0, 1477.78)
To extract numbers I use a regular expression:
Dim RgxDouble As New Regex("[+-]?\b[0-9]+(\.[0-9]+)?(e[+-]?[0-9]+)?\b")
Dim Matches As MatchCollection = RgxDouble.Matches(.Value)
Dim PSegmentColl As New PathSegmentCollection
Dim PFigure As New PathFigure
With Matches
If .Count < 2 OrElse .Count Mod 2 <> 0 Then Exit Sub
PFigure.StartPoint = New Point(.Item(0).Value, .Item(1).Value)
For i As UInteger = 2 To .Count - 1 Step 2
Dim x As Double = .Item(i).Value, y As Double = .Item(i + 1).Value
PSegmentColl.Add(New LineSegment With {.Point = New Point(x, y)})
Next
End With
It works, but I have to parse about a hundred thousand (or more) strings, and in this way is too slow. I want to find a more efficient solution whereas: most of the times the numbers are not written in scientific notation and, if you think that's a better way, I have no problem to use an assembly written in C++/CLI that use C/C++ not managed code, or C# unsafe code.