Структуры MarcRecord, RecordField и SubField

MarcRecord

Каждый экземпляр MarcRecord соответствует одной записи в базе данных ИРБИС. Он содержит следующие поля:

Поле

Тип

Назначение

Database

string

Имя базы данных, из которой загружена данная запись. Для вновь созданных записей пустая строка.

Mfn

int

Номер записи в мастер-файле. Для вновь созданных записей 0.

Status

int

Статус записи: логически удалена, отсутствует (см. ниже).

Version

int

Номер версии записи.

Fields

[]*RecordField

Слайс указателей на поля записи

Статус записи: набор флагов (определены как константы в Constants.go)

Имя

Число

Значение

LOGICALLY_DELETED

1

Логически удалена (может быть восстановлена).

PHYSICALLY_DELETED

2

Физически удалена (не может быть восстановлена).

ABSENT

4

Отсутствует.

NON_ACTUALIZED

8

Не актуализирована.

NEW_RECORD

16

Первый экземпляр записи (флаг фактически не используется).

LAST

32

Последняя версия записи.

LOCKED

64

Запись заблокирована на ввод.

AUTOIN_ERROR

128

Ошибка в Autoin.gbl.

FULLTEXT_NOT_ACTUALIZED

256

Полный текст не актуализирован.

func NewMarcRecord() *MarcRecord – конструктор, создаёт новый экземпляр записи в памяти клиента.

func (record *MarcRecord) Add(tag int, value string) *RecordField – добавляет в конец записи поле с указанными меткой и значением. Возвращает добавленное поле, поэтому может использоваться для “цепочечных” вызовов методов, добавляющих подполя в это поле (см. пример ниже).

func (record *MarcRecord) Clear() – очищает запись (удаляет все поля).

func (record *MarcRecord) Clone() *MarcRecord – клонирует запись со всеми полями.

func (record *MarcRecord) Decode(lines []string) – декодирование записи из протокольного представления.

func (record *MarcRecord) Encode(delimiter string) string – кодирование записи в протокольное представление.

func (record *MarcRecord) FM(tag int) string – получение значения поля с указанной меткой. Если поле не найдено, возвращается пустая строка.

func (record *MarcRecord) FSM(tag int, code rune) string – получение значения подполя с указанными меткой и кодом. Если подполе не найдено, возвращается пустая строка.

func (record *MarcRecord) FMA(tag int) []string – получение слайса со значениями полей с указанной меткой. Если поля не найдены, возвращается слайс нулевой длины.

func (record *MarcRecord) FSMA(tag int, code rune) []string – получение слайса со значениями подполей с указанными меткой и кодом. Если подполя не найдены, возвращается слайс нулевой длины.

func (record *MarcRecord) GetField(tag, occurrence int) *RecordField – получение указанного повторения поля с указанной меткой. Если поле не найдено, возвращает nil.

func (record *MarcRecord) GetFields(tag int) []*RecordField – получение слайса полей с указанной меткой. Если поля не найдены, возвращается пустой массив.

func (record *MarcRecord) GetFirstField(tag int) *RecordField – получение первого повторения поля с указанной меткой. Если поле не найдено, возвращается nil.

func (record *MarcRecord) HaveField(tag int) bool – выясняет, есть ли в записи поле с указанной меткой.

func (record *MarcRecord) InsertAt(i int, tag int, value string) *RecordField – вставляет поле в указанную позицию.

func (record *MarcRecord) IsDeleted() bool – проверка статуса, не удалена ли запись.

func (record *MarcRecord) RemoveAt(i int) *MarcRecord – удаляет поле в указанной позиции.

func (record *MarcRecord) RemoveField(tag int) *MarcRecord – удаляет все поля с указанной меткой.

func (record *MarcRecord) Reset() – сброс состояния записи, отвязка её от базы данных. Поля данных остаются при этом нетронутыми.

func (record *MarcRecord) SetField(tag int, value string) *MarcRecord – устанавливает значение первого повторения поля с указанной меткой. Если такого поля нет, оно создаётся.

func (record *MarcRecord) SetSubfield(tag int, code rune, value string) *MarcRecord – устанавливает значение подполя первого повторения поля с указанной меткой. Если необходимые поля или подполе отсутствуют, они создаются.

func (record *MarcRecord) String() string – выдаёт строковое представление записи.

record := NewMarcRecord()
record.Add(700, "").
    Add('a', "Миронов").
    Add('b', "А. В.").
    Add('g', "Алексей Владимирович")
record.Add(200, "").
    Add('a', "Заглавие книги").
    Add('e', "подзаголовочные сведения")

RecordField

Поле

Тип

Назначение

Tag

int

Метка поля.

Value

string

Значение поля до первого разделителя.

Subfields

[]*SubField

Слайс указателей на подполя.

func NewRecordField(tag int, value string) *RecordField – конструктор поля, создаёт поле с указанными меткой и значением.

func (field *RecordField) Add(code rune, value string) *RecordField – добавляет подполе с указанными кодом и значением к полю. Возвращает field, так что может испольоваться для “цепочечных” вызовов.

func (field *RecordField) AddNonEmpty(code rune, value string) *RecordField – добавляет подполе, при условии, что его значение не пустое.

func (field *RecordField) Clear() *RecordField – очищает поле (удаляет значение и все подполя). Метка поля остаётся нетронутой. Возвращает field.

func (field *RecordField) Clone() *RecordField – клонирует поле со всеми подполями.

func (field *RecordField) DecodeBody(body string) – декодирует только текст поля и подполей (без метки).

func (field *RecordField) Decode(text string) – декодирует поле из протокольного представления (метку, значение и подполя).

func (field *RecordField) Encode() string – кодирует поле в протокольное представление (метку, значение и подполя).

func (field *RecordField) EncodeBody() string – кодирует поле в протокольное представление (только значение и подполя).

func (field *RecordField) GetEmbeddedFields() []*RecordField – получает слайс встроенных полей из данного поля.

func (field *RecordField) GetFirstSubField(code rune) *SubField – возвращает первое вхождение подполя с указанным кодом или `nil.

func (field *RecordField) GetFirstSubFieldValue(code rune) string – возвращает значение первого вхождения подполя с указанным кодом или пустую строку.

func (field *RecordField) GetValueOrFirstSubField() string – выдаёт значение для ^*.

func (field *RecordField) HaveSubField(code rune) bool – выясняет, есть ли подполе с указанным кодом.

func (field *RecordField) InsertAt(i int, code rune, value string) – вставляет подполе в указанную позицию.

func (field *RecordField) RemoveAt(i int) – удаляет подполе в указанной позиции.

func (field *RecordField) RemoveSubfield(code rune) –удаляет все подполя с указанным кодом.

func (field *RecordField) ReplaceSubfield(code rune, oldValue, newValue string) *RecordField – заменяет значение подполя.

func (field *RecordField) SetSubfield(code rune, value string) *RecordField – устанавливает значение первого повторения подполя с указанным кодом. Если value==nil, подполе удаляется.

func (field *RecordField) String() string – возвращает строковое представление данного поля.

func (field *RecordField) Verify() bool – проверяет, правильно ли сформировано поле (и все его подполя).

field := NewRecordField(700, "")
field.Add('a', "Миронов").
    Add('b', "А. В.").
    Add('g', "Алексей Владимирович")

SubField

Поле|Тип|Назначение —-|---|———- Code | rune | Код подполя Value | string | Значение подполя

func NewSubField(code rune, value string) *SubField – конструктор подполя, создаёт подполе с указанными кодом и значением.

func (subfield *SubField) Clone() *SubField – клонирует подполе.

func (subfield *SubField) Decode(text string) – декодирует подполе из протокольного представления.

func (subfield *SubField) Encode() string – кодирует подполе в протокольное представление.

func (subfield *SubField) String() string – выдаёт текстовое представление подполя.

func (subfield *SubField) Verify() bool – проверяет, правильно ли сформировано подполе.

subfield := NewSubField('a', "Подполе A")
fmt.Println(subfield.String())

RawRecord

Запись с нераскодированными полями/подполями.

Поле|Тип|Назначение ———|------------|———- Database | string | Имя базы данных, из которой загружена данная запись. Для вновь созданных записей пустая строка. Mfn | int | Номер записи в мастер-файле. Для вновь созданных записей 0. Status | int | Статус записи: логически удалена, отсутствует (аналогично MarcRecord). Version | int | Номер версии записи. Fields | []string | Слайс полей записи в “сыром” виде.

func NewRawRecord() *RawRecord – конструктор, создаёт новый экземпляр записи в памяти клиента.

func (record *RawRecord) Decode(lines []string) – декодирует запись из протокольного представления.

func (record *RawRecord) Encode(delimiter string) string – кодирует запись в протокольное представление.

func (record *RawRecord) IsDeleted() bool – проверка статуса, не удалена ли запись.

func (record *RawRecord) Reset() – сброс состояния записи, отвязка её от базы данных. Поля данных остаются при этом нетронутыми.

func (record *RawRecord) String() string – выдаёт строковое представление записи.