diff --git a/Changes b/Changes index 6ed54c3..68dc7b0 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,6 @@ 0.05 - Add -f option to print frequency. + - Add support for leader. - Improve doc in marc-list. - Remove pointless uniq from code. diff --git a/List.pm b/List.pm index d2cd8de..19c87fa 100644 --- a/List.pm +++ b/List.pm @@ -45,7 +45,7 @@ sub run { print STDERR "\t-h\t\tPrint help.\n"; print STDERR "\t--version\tPrint version.\n"; print STDERR "\tmarc_xml_file\tMARC XML file.\n"; - print STDERR "\tfield\t\tMARC field.\n"; + print STDERR "\tfield\t\tMARC field (field number or 'leader' string).\n"; print STDERR "\tsubfield\tMARC subfield (for datafields).\n"; return 1; } @@ -53,7 +53,8 @@ sub run { $self->{'_marc_field'} = shift @ARGV; $self->{'_marc_subfield'} = shift @ARGV; - if (int($self->{'_marc_field'}) > 9 + if ($self->{'_marc_field'} ne 'leader' + && int($self->{'_marc_field'}) > 9 && ! defined $self->{'_marc_subfield'}) { err 'Subfield is required.'; @@ -82,16 +83,21 @@ sub run { } $previous_record = $record; - my @fields = $record->field($self->{'_marc_field'}); - foreach my $field (@fields) { - if (defined $self->{'_marc_subfield'}) { - my @subfield_values = $field->subfield($self->{'_marc_subfield'}); - foreach my $subfield_value (@subfield_values) { - $ret_hr->{$subfield_value}++; + if ($self->{'_marc_field'} eq 'leader') { + my $leader = $record->leader; + $ret_hr->{"'".$leader."'"}++; + } else { + my @fields = $record->field($self->{'_marc_field'}); + foreach my $field (@fields) { + if (defined $self->{'_marc_subfield'}) { + my @subfield_values = $field->subfield($self->{'_marc_subfield'}); + foreach my $subfield_value (@subfield_values) { + $ret_hr->{$subfield_value}++; + } + } else { + my $data = $field->data; + $ret_hr->{$data}++; } - } else { - my $data = $field->data; - $ret_hr->{$data}++; } } $num++; diff --git a/TODO b/TODO index 2baa577..79f6016 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,6 @@ TODO ==== 3. Support multiple params. marc-list 490 a 490 b 4. Fix message of issue with MARC record. -5. Add support for leader. 7. Add check for input field (field or leader string). 8. @@ -17,3 +16,6 @@ OK [20220518] skim 6. Add freq to output structure. Add option to sort via freq. OK [20250128] skim + +5. Add support for leader. +OK [20250128] skim diff --git a/t/App-MARC-List/04-run.t b/t/App-MARC-List/04-run.t index e4efed1..d2c58d0 100644 --- a/t/App-MARC-List/04-run.t +++ b/t/App-MARC-List/04-run.t @@ -6,7 +6,7 @@ use English; use Error::Pure::Utils qw(clean); use File::Object; use File::Spec::Functions qw(abs2rel); -use Test::More 'tests' => 12; +use Test::More 'tests' => 13; use Test::NoWarnings; use Test::Output; use Test::Warn; @@ -143,6 +143,23 @@ stdout_is( 'Run list for MARC XML file with 1 record (260b, with frequency).', ); +# Test. +@ARGV = ( + $data_dir->file('ex3.xml')->s, + 'leader', +); +$right_ret = <<'END'; +' nam a22 4500' +END +stdout_is( + sub { + App::MARC::List->new->run; + return; + }, + $right_ret, + 'Run list for MARC XML file with 1 record (260b, with frequency).', +); + # Test. @ARGV = ( $data_dir->file('ex2.xml')->s, @@ -181,7 +198,7 @@ Usage: $script [-f] [-h] [--version] marc_xml_file field [subfield] -h Print help. --version Print version. marc_xml_file MARC XML file. - field MARC field. + field MARC field (field number or 'leader' string). subfield MARC subfield (for datafields). END