hi I need a Pseudo code or a description of what a program is saying from this spec and code:
Just so i can understand how this solution was achieved, thanks
here is the spec:
Specifications are as follows:-
The books records are stored in one csv file and the layout and the contents are contained in File 1.
There are four categories of books: sports, computing, children's and horror. We should determine the category and then write a series of 3 records to the appropiate file.
The files need to be created in the program and their names will be: children, horror, sports and computing. The format of four files is contained in File 2.
Records which do not belong to any of the above categories should be printed to the screen as an error.
The summary report should be displayed on the screen and will contain the following information:
- Date
- names of files created (including path name)
- total number of boks processed
- total value of books
***************************
File 1 - CSV File sample
ISBN, Title, Category, cost, NO of copies
978-0340681138, Five Get into TRouble (Famous Five), Enid Blyton, Childrens, 6, 3
978-0142301883, The Little Match Girl, Hans Christian Anderson, Childrens, 3, 2
978-0304921532, cell, Stephen King, Horror, 7, 1
978-0596100292, Unix in a Nutshell Scripting, Arnold Robbins, Computing, 17, 2
****************
File 2 - Format of output files
ISBN: 978-0340681138
Author: Enid Blyton
Title: Five Get into Trouble (Famous Five)
And here is a model answer::
#!/usr/bin/perl
# classify_books.pl
my $csv_file = shift;
my %categories = ( 'childrens' => 'childrens_books.txt',
'horror' => 'horror_books.txt',
'sports ' => 'sports_books.txt',
'computing' => 'computing_books.txt');
my @childrens_file, @horror_file, @sports_file, @computing_file;
open(CSV_FILE, '<', $csv_file) or die "Failed to read file $csv_file : $! \n";
while (my $line = <CSV_FILE>) {
next unless ($line =~ m/^\d{3}-\d+,/);
my ($isbn, $title, $author, $category) = split(/,/, $line);
$title =~ s/^\s+//;
$author =~ s/^\s+//;
$category = lc($category);
$category =~ s/^\s+//;
unless (exists($categories{$category})) {
print STDERR "\nUndefined category $category for book $title by $author having ISBN $isbn \n";
next;
}
if ($category =~ m/childrens/) {
push(@childrens_file, "ISBN: $isbn\nAuthor: $author\nTitle: $title\n\n");
}
elsif ($category =~ m/horror/) {
push(@horror_file, "ISBN: $isbn\nAuthor: $author\nTitle: $title\n\n");
}
elsif ($category =~ m/sports/) {
push(@sports_file, "ISBN: $isbn\nAuthor: $author\nTitle: $title\n\n");
}
elsif ($category =~ m/computing/) {
push(@computing_file, "ISBN: $isbn\nAuthor: $author\nTitle: $title\n\n");
}
}
close(CSV_FILE);
if (@childrens_file) {
open (CHL_FILE, '>', $categories{'childrens'}) or die "Failed to write file $categories{'childrens'} : $! \n";
print CHL_FILE @childrens_file;
close (CHL_FILE);
}
if (@horror_file) {
open (CHL_FILE, '>', $categories{'horror'}) or die "Failed to write file $categories{'horror'} : $! \n";
print CHL_FILE @horror_file;
close (CHL_FILE);
}
if (@sports_file) {
open (CHL_FILE, '>', $categories{'sports'}) or die "Failed to write file $categories{'sports'} : $! \n";
print CHL_FILE @sports_file;
close (CHL_FILE);
}
if (@computing_file) {
open (CHL_FILE, '>', $categories{'computing'}) or die "Failed to write file $categories{'computing'} : $! \n";
print CHL_FILE @computing_file;
close (CHL_FILE);
}
__END__