Skip to content

Instantly share code, notes, and snippets.

@rsinger
Created September 24, 2010 18:34
Show Gist options
  • Save rsinger/595806 to your computer and use it in GitHub Desktop.
Save rsinger/595806 to your computer and use it in GitHub Desktop.
def parse_iii_marc(marc_text)
record = MARC::Record.new
marc_text.split("\n").each do |line|
if line =~ /^LEADER\s/
record.leader = line.sub(/^LEADER\s/, '').chop
elsif line =~ /^[0-9]{3}\s/
tag = line[0,3]
if tag < "010"
record << MARC::ControlField.new(tag,line[7..-1].chop)
else
ind1 = line[4,1]
ind2 = line[5,1]
data_field = MARC::DataField.new(tag, ind1, ind2)
line[7..-1].chop.split(/\|/).each_with_index do |subfield, i|
if i == 0
data_field.append(MARC::Subfield.new('a',subfield))
else
data_field.append(MARC::Subfield.new(subfield[0,1],subfield[1..-1]))
end
end
record << data_field
end
end
end
record
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment