Created
October 5, 2018 19:05
-
-
Save tsukanov-as/173746696b2b43814d48110838da0321 to your computer and use it in GitHub Desktop.
Парсинг скобочника методами DataReader (в два раза медленнее чем в рукопашку)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Procedure RunAtServer() | |
Reader = New DataReader("C:\temp\20180713000000.lgp"); | |
Start = CurrentUniversalDateInMilliseconds(); | |
If Reader.SkipTo("{") >= 0 Then | |
Delimeters = New Array; | |
Delimeters.Add(""""); | |
Delimeters.Add("{"); | |
Delimeters.Add("}"); | |
Delimeters.Add(","); | |
List = Parse(Reader, Delimeters); | |
Reader.Close(); | |
EndIf; | |
Message((CurrentUniversalDateInMilliseconds() - Start) / 1000); | |
EndProcedure | |
Function Parse(Reader, Delimeters) | |
List = New Array; | |
Skip = False; | |
Result = Reader.ReadTo(Delimeters); | |
While Result.MarkerFound Do | |
If Result.MarkerIndex = 0 Then // " | |
Skip = Not Skip; | |
ElsIf Not Skip Then | |
If Result.MarkerIndex = 1 Then // { | |
List.Add(Parse(Reader, Delimeters)); | |
ElsIf Result.MarkerIndex = 2 Then // } | |
List.Add(Result.GetBinaryData()); | |
Return List; | |
ElsIf Result.MarkerIndex = 3 Then // , | |
List.Add(Result.GetBinaryData()); | |
EndIf; | |
EndIf; | |
Result = Reader.ReadTo(Delimeters); | |
EndDo; | |
Return Undefined; | |
EndFunction |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment