¡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 Lasreglas 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 porUPD: js para escribir reglas se selecciona como el idioma más ampliamente distribuido (en el entorno de la biblioteca, incluido)