This is an automated email from the git hooks/post-receive script. js pushed a commit to annotated tag upstream/1.19 in repository libcatmandu-marc-perl.
commit f78321cc5e54206b183d276733d65309af7fa2bc Author: Patrick Hochstenbach <[email protected]> Date: Sun Jul 23 10:47:38 2017 +0200 Adding more POD in the tutorial --- lib/Catmandu/MARC.pm | 2 + lib/Catmandu/MARC/Tutorial.pod | 85 ++++++++++++++++++------------------------ 2 files changed, 39 insertions(+), 48 deletions(-) diff --git a/lib/Catmandu/MARC.pm b/lib/Catmandu/MARC.pm index 7b9920a..9a137a7 100644 --- a/lib/Catmandu/MARC.pm +++ b/lib/Catmandu/MARC.pm @@ -1342,6 +1342,8 @@ Catmandu::MARC - Catmandu modules for working with MARC data =over +=item * L<Catmandu::MARC::Tutorial> + =item * L<Catmandu::Importer::MARC> =item * L<Catmandu::Exporter::MARC> diff --git a/lib/Catmandu/MARC/Tutorial.pod b/lib/Catmandu/MARC/Tutorial.pod index 0e97114..75c20ec 100644 --- a/lib/Catmandu/MARC/Tutorial.pod +++ b/lib/Catmandu/MARC/Tutorial.pod @@ -49,18 +49,36 @@ The C<marc_map> Fix can get one or more subfields to extract from MARC: In the example below the 650a field can be repeated in some marc records. We will join all the repetitions in an comma delimited list for each record. -First we create a Fix file containing all the Fixes, then we execute the -catmandu command. + $ catmandu convert MARC to CSV --fix 'marc_map(650a,subject,join:","); retain(subject)' < data.mrc -Open a text editor and create the C<myfix.fix> file with content: +=head2 Create a list of all ISBN numbers in the data - marc_map(650a,subject.$append) - join_field(subject,",") - retain(subject) +In the previous example we saw how all subjects can be printed using a few Fix commands. +When a subject is repeated in a record, it will be written on one line joined by a comma: -And execute the command: + subject1 + subject2, subject3 + subject4 - $ catmandu convert MARC to CSV --fix myfix.fix < data.mrc +In the example over record 1 contained 'subject1', record 2 'subject2' and 'subject3' and +record 3 'subject4'. What should we use when we want a list of all values in a long list? + +In the example below we'll print all ISBN numbers in a batch of MARC records in one long list +using the Text exporter: + + $ catmandu convert MARC to Text --field_sep "\n" --fix 'marc_map(020a,isbn.\$append); retain(isbn)' < data.mrc + +The first new thing is the C<$append> in the marc_map. This will create in C<isbn> a +list of all ISBN numbers found in the C<020a> field. Because C<$> signs have a special meaning on +the command line they need to be escaped with a backslash C<\>. The C<Text> exporter with the C<field_sep> +option will make use all the list in the C<isbn> field are written on a new line. + +=head2 Create a list of all unique ISBN numbers in the data + +Given the result of the previous command, it is now easy to create a unique list of ISBN numbers +with the UNIX C<uniq> command: + + $ catmandu convert MARC to Text --field_sep "\n" --fix 'marc_map(020a,isbn.\$append); retain(isbn)' < data.mrc | uniq =head2 Create a list of the number of subjects per record @@ -68,6 +86,9 @@ We will create a list of subjects (650a) and count the number of items in this list for each record. The CSV file will contain the C<_id> (record identifier) and C<subject> the number of 650a fields. +Writing all Fixes on the command line can become tedious. In Catmandu it is possible +to create a Fix script which contains all the Fix commands. + Open a text editor and create the C<myfix.fix> file with content: marc_map(650a,subject.$append) @@ -78,37 +99,6 @@ And execute the command: $ catmandu convert MARC to CSV --fix myfix.fix < data.mrc -=head2 Create a list of all ISBN numbers in the data - -We will create first a Fix script which C<select>s only the records -that contain an ISBN field (022$a). All the isbns found we will -print inline using the C<add_to_exporter> Fix. - -Open a text editor and create the C<myfix.fix> file with content: - - marc_map(020a,isbn.$append) - - select exists(isbn) - - # Loop over the ISBNs and print them to a CSV exporter - do list(path:isbn,var:c) - move_field(c,result.isbn) - add_to_exporter(result,CSV) - end - -Execute the following catmandu command, notice that we ignore the normal -output with help of the C<Null> exporter (all output will be generated) -by the Fix script: - - $ catmandu convert MARC to Null --fix myfix.fix < data.mrc - -=head2 Create a list of all unique ISBN numbers in the data - -Here we can use the Fix script as in the previous example and use the -UNIX "sort -u" command: - - $ catmandu convert MARC to Null --fix myfix.fix < data.mrc | sort -u - =head2 Create a list of all ISBN numbers for records with type 920a == book In the example we need an extra condition for match the content of the @@ -119,18 +109,16 @@ Open a text editor and create the C<myfix.fix> file with content: marc_map(020a,isbn.$append) marc_map(920a,type) - select all_match(type,"book") - select exists(isbn) + select all_match(type,"book") # select only the books + select exists(isbn) # select only the records with ISBN numbers - # Loop over the ISBNs and print them to a CSV exporter - do list(path:isbn,var:c) - move_field(c,result.isbn) - add_to_exporter(result,CSV) - end + retain(isbn) # only keep this field + +All the text after the C<#> sign are inline code comments. And run the command: - $ catmandu convert MARC to Null --fix myfix.fix < data.mrc + $ catmandu convert MARC to Text --field_sep "\n" --fix myfix.fix < data.mrc =head2 Show which MARC record don't contain a 900a field matching some list of values @@ -168,7 +156,8 @@ And now run the command: =head1 Create a CSV file of all ISSN numbers found at any MARC field To process this information we need to create a Fix script like the -one below (line numbers are added here to explain the working of this script): +one below (line numbers are added here to explain the working of this script +but don't need to be included in the script): 01: marc_map('***',text.$append) 02: -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libcatmandu-marc-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits
