Skip to content

Instantly share code, notes, and snippets.

@tsukanov-as
Created October 5, 2018 19:05
Show Gist options
  • Save tsukanov-as/173746696b2b43814d48110838da0321 to your computer and use it in GitHub Desktop.
Save tsukanov-as/173746696b2b43814d48110838da0321 to your computer and use it in GitHub Desktop.
Парсинг скобочника методами DataReader (в два раза медленнее чем в рукопашку)
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