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)