문자열을 구문 분석하여 PathSegmentCollection을 만들어야합니다. 이 문자열은 혼수 상태 및/또는 (공백 문자, 탭 등의) 공백으로 구분 된 숫자로 구성되며 숫자는 과학 표기법을 사용하여 작성할 수도 있습니다. 문자열에서 숫자 추출
이
은 예이다 :"9.63074,9.63074 -5.55708e-006 0 ,0 1477.78"
그리고 포인트는 숫자 I를 추출 P1 (9.63074, 9.63074), P2 (-0,555708, 0), P3 (0, 1477.78)
정규 표현식 사용 : 그것은 작동
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
을,하지만 난 십만 개 (또는 그 이상)의 문자열에 대한 구문 분석해야하고, 이런 식으로 너무 느립니다. 더 효율적인 솔루션을 찾고 싶습니다 : 대부분의 경우 숫자가 과학 표기법으로 작성되지 않았으며 더 나은 방법이라고 생각하면 C/C++를 사용하는 C++/CLI로 작성된 어셈블리를 사용할 때 아무런 문제가 없습니다. 관리되지 않는 코드 또는 C#의 안전하지 않은 코드
관심이있는 언어로 태그를 추가해야합니다. 많은 사람들이 "문자열"을 주제로 추적하지 않는다고 생각하지만 많은 사람들이 C# , VB 또는 C++ (또는 귀하의 질문과 관련 있다고 생각되는 다른 언어). – assylias
완료되었습니다 (.NET 및 C++/CLI와 관련성 있음). 감사합니다. – gliderkite
그런데'-5.55708e-006'는'-0,555708'이 아니며'-000000555708'입니다. – Vlad