Skip to content

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

License

Notifications You must be signed in to change notification settings

v8platform/brackets

Repository files navigation

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))
}

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published