Class: RMARC::MarcStreamWriter

Inherits:
Object
  • Object
show all
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

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