On Sun, Jan 20, 2013 at 06:43:38PM +0100, samuel desseaux wrote:
> *the goal is to join properly items with biblio records.
Let's assume that you have these two files:
(B) Three MARC bibliographic records
1. 001 = 1029
2. 001 = 3884
3. 001 = 1650
(etc.)
(I) Seven MARC item records
1. 001 = 1029
2. 001 = 1650
3. 001 = 1029
4. 001 = 3884
5. 001 = 3884
6. 001 = 1650
7. 001 = 1650
Do you want to produce a *new* file of three records, like this?
1. I1 + I3
2. I4 + I5
3. I2 + I6 + I7
Is this really what you want to have in the end?
> As we have to separate files, it's a bit hard. With MarcEdit, if i
> merge these two files, it's limited: marcedit doesn't understand that
> one biblio record can have more than one item :-). I won't say any
> more about my library and his exotical old ils i've moved for koha.
It sounds as though what you *really* want in the end is a *single* file
of three MARC records, like this:
B1 + I1 + I3
B2 + I4 + I5
B3 + I2 + I6 + I7
Is that right? Here's a rough start in Perl:
-------->8-------->8-------->8-------->8-------->8-------->8-------->8--------
use MARC::File;
my ($file, %records);
$file = MARC::File::USMARC->in($bib_records_file);
while (my $bib_marc = read_next_record_from($file) {
my $sysnum = sysnum($bib_marc);
$records{$sysnum} = [ $bib_marc ];
}
$file->close;
$file = MARC::File::USMARC->in($bib_records_file);
while (my $item_marc = read_next_record_from($file) {
my $sysnum = sysnum($item_marc);
push @{ $records{$sysnum} }, $item_marc;
}
$file->close;
print @$_ for values %records;
-------->8-------->8-------->8-------->8-------->8-------->8-------->8--------
Let us know if you need help writing read_next_record_from() or
sysnum().
Paul.
--
Paul Hoffman <[email protected]>