brackets

package module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 18, 2021 License: MIT Imports: 6 Imported by: 1

README

Brackets-parser

Библиотека для парсинга внутрисистемного формата файлов 1С. Предприятие

Функционал

  • brackets.NewParser(reader io.Reader) Создание парсера скобко файла
  • parser.NextNode() brackets.Node Выполняет парсинг следующей ноды/объекта
  • parser.ReadAllNodes() brackets.Nodes Выполняет парсинг всего скобко файла и возвращает все ноды/объекты

Примеры

Чтение последовательное скобко файла следующую ноду/объект
package main

import (
	"log"
	"os"
	"v8platform/brackets"
)

func main() {

	filename := "./20200412130000.lgp"

	file, err := os.OpenFile(filename, os.O_RDONLY, 0644)

	if err != nil {
		log.Panicln(err)
	}

	parser := brackets.NewParser(file)

	for node := parser.NextNode(); node != nil; node = parser.NextNode() {

		log.Printf("readed node <%s>", node)

	}
}

Работы с нодой и адресами других нод
package main

import (
	"fmt"
	"v8platform/brackets"
)

func main() {

	data := []byte("{20200412134348,N,\n{0,13},1,1,1,1,1,I,\"\",0,\n{\"U\"},\"\",1,1,0,1,0,\n{0}\n}")
	//                      ^       ^    ^  ^     ....                 ^
	// Адрес ноды           0       1   2,0 2,1   ....                11,0
	parser := brackets.NewParser(bytes.NewReader(data))

	node := parser.NextNode()

    node0, _ := node.GetNodeE(0)
    fmt.Printf("node <%s>\n", node0.String()) // 20200412134348

    node1 := node.Get(1)
    fmt.Printf("node <%s>\n", node1) // N

    node21 := node.Int64(2, 1)
    fmt.Printf("node <%d>\n", node21) // {0,13} -> 13

    node11 := node.GetNode(11)
    fmt.Printf("node <%s>\n", node11) // {"U"}

    _, err := node.GetNodeE(1, 2) // Отсутствующий адрес ноды
    fmt.Printf("err <%s>\n", err) // {0,13} -> 13

    // Output:
    // node <20200412134348>
    // node <N>
    // node <13>
    // node <{U}>
    // err <address node is broken>
}

Полное последовательное чтение скобко файла в массив нод/объектов
package main

import (
	"log"
	"os"
	"v8platform/brackets"
)

func main() {

	filename := "./20200412130000.lgp"

	file, err := os.OpenFile(filename, os.O_RDONLY, 0644)

	if err != nil {
		log.Panicln(err)
	}

	parser := brackets.NewParser(file)

	nodes := parser.ReadAllNodes()

	log.Printf("readed nodes %d", len(nodes))
}

Documentation

Index

Examples

Constants

View Source
const (
	NullRune           = '\uFFFD'
	OpenBracketRune    = '{'
	CloseBracketRune   = '}'
	QuoteRune          = '"'
	SpaceRune          = ' '
	CommaRune          = ','
	NewLineRune        = '\n'
	CarriageReturnRune = '\r'
)

Variables

View Source
var ErrNodeAddress = errors.New("address node is broken")

Functions

func EmptyNode added in v0.2.0

func EmptyNode(n Node) bool

Types

type Node

type Node interface {

	// GetNode получение вложенных нов по их адресу в массиве норд
	GetNode(address ...int) Node
	GetNodeE(address ...int) (Node, error)

	// Get получение значение ноды по адресу
	Get(address ...int) string

	// String получение строкового значение ноды
	//	Для нод без вложенных нод выводиться их значение
	//	Для всех остальных выводиться строковое представление ноды
	String() string

	// Int64 получение числового значение ноды
	Int(address ...int) int

	// Int64 получение числового значение ноды
	Int64(address ...int) int64
	// Bool получение булевного значение ноды
	Bool(address ...int) bool
	// Int получение числового с запятой значение ноды
	Float64(address ...int) float64
	// contains filtered or unexported methods
}

Node интерфес для работы с нодой

	Нода представляет собой структуру типа:

	{
		0,
     {0,0},
		"Text",
		{"text", 0}
	}

type Nodes

type Nodes []Node

Nodes Массив Node с функцией String()

func (Nodes) String

func (b Nodes) String() string

type Parser

type Parser struct {
	// contains filtered or unexported fields
}

func NewParser

func NewParser(r io.Reader) *Parser

NewParser создает новый парсер для скобко файла

func (Parser) NextNode

func (p Parser) NextNode() (Node, int)

ReadAllNodes выполняет последовательное чтение нод/объектов скобко файла

Example (Bytes)
package main

import (
	"bytes"
	"github.com/v8platform/brackets"
	"log"
)

func main() {

	data := []byte("{20200412134348,N,\n{0,0},1,1,1,1,1,I,\"\",0,\n{\"U\"},\"\",1,1,0,1,0,\n{0}\n},\n{20200412134356,N,\n{0,0},1,1,2,2,1,I,\"\",0,\n{\"U\"},\"\",1,1,0,2,0,\n{0}\n},")

	parser := brackets.NewParser(bytes.NewReader(data))

	for node, size := parser.NextNode(); node != nil; node, size = parser.NextNode() {

		log.Printf("readed node <%s> size<%d>", node, size)

	}

}
Example (File)
package main

import (
	"github.com/v8platform/brackets"
	"log"
	"os"
)

func main() {

	filename := "./20200412130000.lgp"

	file, err := os.OpenFile(filename, os.O_RDONLY, 0644)

	if err != nil {
		log.Panicln(err)
	}

	parser := brackets.NewParser(file)

	for node, size := parser.NextNode(); node != nil; node, size = parser.NextNode() {

		log.Printf("readed node <%s> size<%d>", node, size)

	}

}

func (Parser) ReadAllNodes

func (p Parser) ReadAllNodes() (Nodes, int)

ReadAllNodes выполняет чтение всех нод/объектов скобко файла

Example (Bytes)
package main

import (
	"bytes"
	"github.com/k0kubun/pp"
	"github.com/v8platform/brackets"
)

func main() {

	data := []byte("{20200412134348,N,\n{0,0},1,1,1,1,1,I,\"\",0,\n{\"U\"},\"\",1,1,0,1,0,\n{0}\n},\n{20200412134356,N,\n{0,0},1,1,2,2,1,I,\"\",0,\n{\"U\"},\"\",1,1,0,2,0,\n{0}\n},")

	parser := brackets.NewParser(bytes.NewReader(data))
	nodes, size := parser.ReadAllNodes()

	pp.Println("readed nodes", len(nodes), "size", size)
	pp.Println(nodes)

}
Example (File)
package main

import (
	"github.com/k0kubun/pp"
	"github.com/v8platform/brackets"
	"log"
	"os"
)

func main() {

	filename := "./20200412130000.lgp"

	file, err := os.OpenFile(filename, os.O_RDONLY, 0644)

	if err != nil {
		log.Panicln(err)
	}

	parser := brackets.NewParser(file)

	nodes, size := parser.ReadAllNodes()

	log.Printf("readed nodes %d, size: %d", len(nodes), size)
	pp.Println(nodes)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL