--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use Getopt::Long;
+use Time::HiRes qw/time/;
+use MARC::Record;
+use MARC::File::XML ( BinaryEncoding => 'utf-8' );
+
+# THIS FILE EXTRACTS NONMATCHING RECORDS
+
+# configuration hashref
+my $conf = ();
+#initialize($conf);
+
+my $idfile = shift;
+my $marcfile = shift;
+my $import = shift;
+my $shelve = shift;
+
+my %id;
+
+open F, "<$idfile";
+while (<F>) {
+ chomp;
+ $id{$_} = 1;
+}
+
+close F;
+
+my $M; my $I; my $S;
+open $M, '<:utf8', $marcfile;
+open $I, '>:utf8', $import;
+open $S, '>:utf8', $shelve;
+
+my $starttime = time;
+my $count = 0;
+my $icount = 0;
+my $scount = 0;
+while (<$M>) {
+ /tag="903" ind1=" " ind2=" ">.*?<subfield code="a">(\d+)</;
+ if ( $id{$1} ) {
+ print $S $_;
+ $scount++;
+ } else {
+ print $I $_;
+ $icount++;
+ }
+ $count++;
+
+ unless ($count && $count % 100) {
+ print STDERR "\r$count\t(shelved: $scount, import: $icount)\t". $count / (time - $starttime);
+ }
+}
+
+=head2 initialize
+
+Performs boring script initialization. Handles argument parsing,
+mostly.
+
+=cut
+
+sub initialize {
+ my ($c) = @_;
+ my @missing = ();
+
+ # set mode on existing filehandles
+ binmode(STDIN, ':utf8');
+
+ my $rc = GetOptions( $c,
+ 'incoming',
+ 'incumbent',
+ 'incoming-tag|incot=i',
+ 'incoming-subfield|incos=s',
+ 'incumbent-tag|incut=i',
+ 'incumbent-subfield|incus=s',
+ 'output|o=s',
+ 'help|h',
+ );
+ show_help() unless $rc;
+ show_help() if ($c->{help});
+
+ $c->{'incoming-tag'} = 903;
+ $c->{'incoming-subfield'} = 'a';
+ $c->{'incoming-matchfile'} = '';
+ $c->{'incoming-nomatchfile'} = '';
+ $c->{'incumbent-tag'} = 901;
+ $c->{'incumbent-subfield'} = 'a';
+ $c->{'incumbent-matchfile'} = '';
+ $c->{'incumbent-nomatchfile'} = '';
+ my @keys = keys %{$c};
+ show_help() unless (@ARGV and @keys);
+ for my $key ('renumber-from', 'tag', 'subfield', 'output')
+ { push @missing, $key unless $c->{$key} }
+ if (@missing) {
+ print "Required option: ", join(', ', @missing), " missing!\n";
+ show_help();
+ }
+
+}
+
+
+=head2 show_help
+
+Display usage message when things go wrong
+
+=cut
+
+sub show_help {
+print <<HELP;
+Usage is: $0 [REQUIRED ARGS]
+Req'd Arguments
+ --renumber-from=N -rf First id# of new sequence
+ --tag=N -t Which tag to use
+ --subfield=X -s Which subfield to use
+ --output=<file> -o Output filename
+
+Any number of input files may be specified; one output file will result.
+HELP
+exit 1;
+}
# edit(), below
my %commands = ( c => \&print_context,
C => \&print_linecontext,
- k => \&kill_line,
o => \&show_original,
+ f => \&flip_lines,
+ k => \&kill_line,
m => \&merge_lines,
n => \&next_line,
p => \&prev_line,
message($msg, 1);
print_context();
+ # stow original problem line
+ $conf->{origline} = $record[$recptr];
+
while (1) {
my $line = $term->readline('marc-cleanup>');
my @chunks = split /\s+/, $line;
@record = (@a, @b);
# move record pointer to previous line
prev_line();
+ print_linecontext();
return 0;
}
return 0;
}
-sub commit_edit { return 1 }
-
sub show_original {
my ($line_in) = @_;
- print $OUT "\n$line_in\n";
+ print $OUT "\n", $conf->{origline}, "\n";
return 0;
}
+sub commit_edit { return 1 }
+
sub help {
print $OUT <<HELP;
use strict;
use Getopt::Long;
-#use Time::HiRes qw/time/;
-#use MARC::Record;
-#use MARC::File::XML ( BinaryEncoding => 'utf-8' );
+use Time::HiRes qw/time/;
+use MARC::Record;
+use MARC::File::XML ( BinaryEncoding => 'utf-8' );
# configuration hashref
my $conf = ();
-initialize($conf);
+#initialize($conf);
my $idfile = shift;
my $marcfile = shift;
close F;
-my $M;
+my $M; my $I; my $S;
open $M, '<:utf8', $marcfile;
open $I, '>:utf8', $import;
open $S, '>:utf8', $shelve;