كل سمور!اليوم هو يوم الجمعة ، وهذا يعني الوقت لتقييم!استمرارًا لموضوعات نادي المكتبات لدينا ، سارعت إلى جعل جميع المشاركين سعداء بعض الشيء: لقد فعلتها!بعد بحر من الخلايا العصبية المستهلكة ، وبعد جحيم من الوثائق حول تنسيقات مارك ، ومجموعة من العكازات ، ما زلت أجمع محولًا عاقلًا نسبيًا (ولكن لا يزال مع رمز فظيع :)) (+ معالج + كل ما يكفي للخيال) لتنسيقات مارك.https://github.com/HerzenLibRu/BatchMarc (معالج ، القواعد مكتوبة في js)https://github.com/t0pep0/marc21 (مكتبة على Go للعمل باستخدام تنسيقات مارك)يمكنكتشغيله على النحو التالي : go run main.go inputFile.ldb outputFile.ldb Rules.jsيتم تطبيق القواعد على كل إدخال في الملف.لم تتم كتابة التوثيق بعد ، ولكن هل ينتظرنا كل شيء؟ =)بعض الفروق الدقيقة في المكتبة (وبالتالي المحول):- يتم تخزين الحقول الفرعية في قائمة مرتبطة مع الفرز عند إضافتها (لم تسمح طلبات محددة من الزملاء باستخدام التجزئة)
- تسمية أعلام زعيم قد لا تعجبك
ميزات كتابة القواعد:عندما يبدأ تنفيذ قاعدتك ، هناك بالفعل شيئان: orig و res - orig - السجل الأصلي ، res - ما سيتم كتابته في النهاية إلى ملف الإخراج ، وعندما تبدأ قاعدتك ، يكون res كائنًا فارغًا ، تمت تهيئته للتو ، في بينما يمتلئ orig بالبيانات  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();
عندما تعمل قواعدك ، ستأخذ Go البيانات من الدقة ، وتكتبها في ملف.إنتباه! لم يتم تحسين الرمز ، واعتبره أصغر منتج قابل للتطبيق.يمكن العثور على مثال للقواعد في مستودع BatchMarc.PullRequest ، IssueRequest - مقبولة منUPD: يتم اختيار js لكتابة القواعد باعتبارها اللغة الأكثر انتشارًا (في بيئة المكتبة ، بما في ذلك) اللغة