#!/usr/bin/perl -w
# Parses Bibliofile files.
-# Usage: parse_db.pl TITLE.DB
-# Works fine on TITLE.DB, but misses the boat on other files; probably different block sizes or something.
+# Usage: parse_db.pl TITLE.DB [--ignore-indexes]
+# Choosing --ignore-indexes will find data you'd otherwise miss, but also grabs a lot of junk you'll need to filter out.
use strict;
use POSIX;
+use Getopt::Long;
+
+my $ignoreIndexes = '';
+
+my $opts = GetOptions('ignore-indexes' => \$ignoreIndexes);
$/ = undef;
$blocks++;
next if ($blocks == 1);
my $maxRecords = POSIX::floor($blockSize / $rowLength);
- my $indexIndicator1 = ord substr($data, 1, 1);
- next if ($indexIndicator1 != 0);
- my $indexIndicator2 = ord substr($data, 7, 1);
- next if ($indexIndicator2 == 0);
-
-# for (my $i = 1; $i <= scalar(@fieldLengths); $i++) {
-# print "Field $i has length $fieldLengths[$i-1]\n";
-# }
+ unless $ignoreIndexes {
+ my $indexIndicator1 = ord substr($data, 1, 1);
+ next if ($indexIndicator1 != 0);
+ my $indexIndicator2 = ord substr($data, 7, 1);
+ next if ($indexIndicator2 == 0);
+ }
for (my $r = 0; $r < $maxRecords; $r++) {
#print STDERR "Record " . ($r+1) . " of $maxRecords\n";
-
for (my $f = 0; $f < scalar(@fieldLengths); $f++) {
$field[$f] = substr($data, $initialOffset + ($r * $rowLength) + $pos, $fieldLengths[$f]);
if ($fieldTypes[$f] eq 'S') { $field[$f] = ord $field[$f]; }