marc is a ruby library for reading and writing MAchine Readable Cataloging
(MARC). More information about MARC can be found at http://www.loc.gov/marc.

Usage

require'marc'# reading records from a batch file
reader=MARC::Reader.new('marc.dat',:external_encoding=>"MARC-8")forrecordinreader# print out field 245 subfield a
putsrecord['245']['a']end# creating a record
record=MARC::Record.new()record.append(MARC::DataField.new('100','0','',['a','John Doe']))# writing a record
writer=MARC::Writer.new('marc.dat')writer.write(record)writer.close()# writing a record as XML
writer=MARC::XMLWriter.new('marc.xml')writer.write(record)writer.close()# encoding a record
MARC::Writer.encode(record)# or record.to_marc

MARC::Record provides #to_hash and #from_hash implementations that deal in ruby
hash's that are compatible with the
marc-in-json
serialization format. You are responsible for serializing the hash to/from JSON yourself.

Installation

geminstallmarc

Or if you're using bundler, add to your Gemfile

gem'marc'

Character Encodings in 'binary' ISO-2709 MARC

The Marc binary (ISO 2709) Reader (MARC::Reader) has some features for helping you deal with character encodings in ruby 1.9. It is always recommended to supply an explicit :external_encoding option to MARC::Reader; either any valid ruby encoding, or the string "MARC-8". MARC-8 input will by default be transcoded to a UTF-8 internal representation.

MARC::Reader does not currently have any facilities for guessing encoding from MARC21 leader byte 9, that is
ignored.

Consult the MARC::Reader class docs for a more complete discussion and range of options.

The MARC binary Writer (MARC::Writer) does not have any encoding-related features -- it's up to you the developer to make sure you create MARC::Records with consistent and expected char encodings, although MARC::Writer will write out a legal ISO 2709 either way, it just might have corrupted encodings.

Miscellany

Developers, release new version of gem to rubygems with rake release
(bundler-supplied task). Note that one nice thing this will do is automatically
tag the version in git, very important for later figuring out what's going on.