Class: RMARC::MarcStreamWriter
- Inherits:
-
Object
- Object
- RMARC::MarcStreamWriter
- Defined in:
- lib/rmarc/marc_stream_writer.rb
Overview
Class for writing MARC record objects in ISO 2709 format.
The following example reads a file with MARC XML records and outputs the record set in ISO 2709 format:
writer = RMARC::MarcStreamWriter.new(STDOUT)
reader = RMARC::MarcXmlReader.new("file.xml")
while reader.has_next
record = reader.next()
writer.write_record(record)
end
Instance Method Summary collapse
-
#initialize(output) ⇒ MarcStreamWriter
constructor
Default constructor.
-
#write_record(record) ⇒ Object
Writes a single record to the given output stream.
Constructor Details
#initialize(output) ⇒ MarcStreamWriter
Default constructor.
39 40 41 |
# File 'lib/rmarc/marc_stream_writer.rb', line 39 def initialize(output) @output = output end |
Instance Method Details
#write_record(record) ⇒ Object
Writes a single record to the given output stream.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rmarc/marc_stream_writer.rb', line 44 def write_record(record) data = "" dir = "" prev = 0 record.fields.each { |field| if field.tag.to_i < 10 data << field.data << Constants.FT else data << field.ind1 << field.ind2 field.subfields.each { |subf| data << Constants.US << subf.code << subf.data } data << Constants.FT end len = data.length dir << field.tag << "%04d" % (len - prev) << "%05d" % prev prev = len } dir << Constants.FT leader = record.leader leader.base_address = 24 + dir.length leader.record_length = leader.base_address + data.length + 1 @output.write(leader.to_s << dir << data << Constants.RT) end |