pod documentation, new options, much nicer output
[MARC-Fast] / scripts / dump_fastmarc.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use blib;
5
6 use MARC::Fast;
7 use Getopt::Std;
8 use Data::Dumper;
9
10 =head1 NAME
11
12 dump_fastmarc.pl - display MARC records
13
14 =head2 USAGE
15
16   dump_fastmarc.pl /path/to/dump.marc
17
18 =head2 OPTIONS
19
20 =over 16
21
22 =item -n number
23
24 dump just record C<number>
25
26 =item -l limit
27
28 import just first C<limit> records
29
30 =item -h
31
32 dump result of C<to_hash> on record
33
34 =item -d
35
36 turn debugging output on
37
38 =back
39
40 =cut
41
42 my %opt;
43 getopts('dn:l:h', \%opt);
44
45 my $file = shift @ARGV || die "usage: $0 [-n number] [-l limit] [-h] [-d] file.marc\n";
46
47 my $marc = new MARC::Fast(
48         marcdb => $file,
49         debug => $opt{d},
50 );
51
52
53 my $min = 1;
54 my $max = $marc->count;
55
56 if (my $mfn = $opt{n}) {
57         $min = $max = $mfn;
58         print STDERR "Dumping $mfn only\n";
59 } elsif (my $limit = $opt{l}) {
60         print STDERR "$file has $max records, using first $limit\n";
61         $max = $limit;
62 } else {
63         print STDERR "$file has $max records...\n";
64 }
65
66 for my $mfn ($min .. $max) {
67         my $rec = $marc->fetch($mfn) || next;
68         print "rec is ",Dumper($rec) if ($opt{d});
69         print "REC $mfn\n";
70         foreach my $f (sort keys %{$rec}) {
71                 my $dump = join('', @{ $rec->{$f} });
72                 $dump =~ s/\x1e$//;
73                 $dump =~ s/\x1f/\$/g;
74                 print "$f\t$dump\n";
75         }
76         print "\n";
77         print "hash is ",Dumper($marc->to_hash($mfn)) if ($opt{h});
78 }