Todo castor!Hoje é sexta-feira, e isso significa tempo para fazer um balanço!Continuando os temas do nosso clube de bibliotecas, apresso-me a deixar todos os envolvidos um pouco felizes: consegui!Depois de um mar de células nervosas gastas, depois de muita documentação em formatos de marc e várias muletas, eu ainda monto um conversor relativamente sadio (mas ainda com um código terrível :)) (+ manipulador + tudo o que é suficiente para fantasia) para formatos de marc.https://github.com/HerzenLibRu/BatchMarc (manipulador, regras escritas em js)https://github.com/t0pep0/marc21 (biblioteca do Go para trabalhar com formatos de marc)Você pode executá-lo assim:vá executar main.go inputFile.ldb outputFile.ldb rules.js Asregras são aplicadas a cada entrada de marc no arquivo.A documentação ainda não foi escrita, mas está tudo à nossa frente? =)Algumas das nuances da biblioteca (e, consequentemente, do conversor):- subcampos são armazenados em uma lista vinculada com classificação quando adicionados (solicitações específicas de colegas não permitiram o uso de hashmap)
- Nomeando Bandeiras Líderes que Você Pode Não Gostar
Recursos das regras de gravação:Quando sua regra começa a ser executada, já existem dois objetos: orig e res - orig - o registro original, res - o que será gravado no arquivo de saída e, quando sua regra iniciar, res é um objeto vazio, apenas inicializado, em enquanto orig é preenchido com dados  function VariableSubField(name, data){
      this.Name = name;
      this.Data = data;
    }
    function VariableField(tag, indicatorOne, indicatorTwo) {
      this.Tag = tag;
      this.IndicatorOne = indicatorOne;
      this.IndicatorTwo = indicatorTwo;
      this.RawData = [];
      this.SubField = [];
    }
    function Leader() {
        this.Status = "";
        this.Type = "";
        this.BibLevel = "";
        this.ControlType = "";
        this.CharacterEncoding = "";
        this.IndicatorCount = "";
        this.SubfieldCodeCount = "";
        this.EncodingLevel = "";
        this.CatalogingForm = "";
        this.MultipartLevel = "";
        this.LengthOFFieldPort = "";
        this.StartCharPos = "";
        this.LengthImplemenDefine = "";
        this.Undefine = "";
    }
    function MarcRecord(){
      this.Leader = new Leader()
      this.VariableField = []
    };
    orig = new MarcRecord();
    res = new MarcRecord();
Quando suas regras funcionam, o Go pega os dados de res e os grava em um arquivo.Atenção! O código não está otimizado, considere o menor produto viável.Um exemplo das regras pode ser encontrado no repositório do BatchMarc.PullRequest, IssueRequest - aceito peloUPD: js para escrever regras é selecionado como o idioma mais amplamente distribuído (no ambiente da biblioteca, incluindo)