BatchMarc procesa archivos marc en go + js

¡Todo castor!
¡Hoy es viernes, y eso significa tiempo para hacer un balance!

Continuando con los temas de nuestro club de bibliotecas, me apresuro a hacer que todos los involucrados estén un poco felices: ¡lo hice!

Después de un mar de células nerviosas gastadas, después de una gran cantidad de documentación sobre formatos MARC y un montón de muletas, todavía armé un convertidor relativamente sano (pero aún con un código terrible :)) (+ controlador + todo lo que es suficiente para la fantasía) para formatos MARC.

https://github.com/HerzenLibRu/BatchMarc (controlador, las reglas están escritas en js)

https://github.com/t0pep0/marc21 (biblioteca en Go para trabajar con formatos marc)



Puede ejecutarlo así:
vaya a ejecutar main.go inputFile.ldb outputFile.ldb rules.js Las

reglas se aplican a cada entrada marc en el archivo.
La documentación aún no se ha escrito, pero ¿está todo por delante? =)

Algunos de los matices de la biblioteca (y, en consecuencia, del convertidor):
  • los subcampos se almacenan en una lista vinculada con la clasificación cuando se agregan (las solicitudes específicas de colegas no permitieron el uso de hashmap)
  • Nombrar banderas de líder que quizás no te gusten


Características de las reglas de escritura:
cuando su regla comienza a ejecutarse, ya hay dos objetos: orig y res - orig - el registro original, res - lo que eventualmente se escribirá en el archivo de salida, y cuando comienza su regla, res es un objeto vacío, recién inicializado, en mientras que orig está lleno de datos

  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();


Cuando sus reglas funcionen, Go tomará los datos de res y los escribirá en un archivo.

Atencion El código no está optimizado, considérelo como el producto viable más pequeño.

Un ejemplo de las reglas se puede encontrar en el repositorio de BatchMarc.

PullRequest, IssueRequest: aceptado por

UPD: js para escribir reglas se selecciona como el idioma más ampliamente distribuido (en el entorno de la biblioteca, incluido)

Source: https://habr.com/ru/post/es395377/


All Articles