############################################################################ #-- This PERL script creates the KVJ Bible indexing for 7500 complete copies #-- of the Bible contained within a single 114-GIG Flat File with 528 byte #-- fixed-length records. ############################################################################ #-- #-- INPUT: #-- #-- 66 Books, 1189 Chapters, 31102 Verses #-- DUMP 1 (edited) format: #-- "1|Genesis|Ge" #-- ... #-- "66|Revelation|Re" #-- ================== #-- DUMP 2 (unedited) format: #-- "1|1|31" #-- ... #-- "66|22|21" #-- ================== #-- DUMP 3 (unedited) format: #-- "1|50" #-- ... #-- "66|22 #-- #-- I used the Abingdon's/Strong's names & abbreviations for Bible Books #-- ################################################################################ use File::Basename; use SDBM_File; use Fcntl; print "Processing... Please wait..." . "\n"; $cwd=dirname($0); %BibleIDX=(); keys %BibleIDX = 8917567; #-- ((1189 * 7500) = 8917500) + 66 + 1 = 8917567 tie( %BibleIDX, "SDBM_File", '.\KJV_Bible_SDBM_528_31102_7500', O_RDWR|O_CREAT, 0666 ); $total_books=0; $total_chps=0; $total_vers=0; ################################################################################ open(IN, "< $cwd\\KJV_BIBLE_DUMP_1_edited.txt"); #-- unloaded from MS-Access while () { chomp; #-- remove CR/LF ($bk_nbr, $name, $abbrev)=split(/\|/, $_); $BibleIDX{$bk_nbr} = $name . "," . $abbrev; #-- 1=Genesis,Ge $total_books++; } close(IN); ################################################################################ @nbr_chapters=(); open(IN2, "< $cwd\\KJV_BIBLE_DUMP_2_unedited.txt"); #-- unloaded from MS-Access while () { chomp; #-- remove CR/LF push @nbr_chapters, $_; } close(IN2); ################################################################################ open(IN3, "< $cwd\\KJV_BIBLE_DUMP_3_unedited.txt"); #-- unloaded from MS-Access while () { chomp; #-- remove CR/LF ($bk_nbr, $nbr_chps)=split(/\|/, $_); $BibleIDX{$bk_nbr} = $BibleIDX{$bk_nbr} . "," . $nbr_chps; $total_chps+=$nbr_chps; } close(IN3); ################################################################################ $offset=0; for ($tran_nbr=1; $tran_nbr<=7500; $tran_nbr++) { print "Indexing the chapters for Bible copy number $tran_nbr of 7500\n"; foreach $chapter (@nbr_chapters) { ($bk_nbr, $chp_nbr, $nbr_verses)=split(/\|/, $chapter); $key=$tran_nbr . "|" . $bk_nbr . "|" . $chp_nbr; if ($key eq "1|1|1") { $BibleIDX{$key} = $offset . "," . $nbr_verses; #-- 1|1|1 = 0,31 $nextoffset=(528 * $nbr_verses); } else { $offset = $nextoffset; $BibleIDX{$key} = $offset . "," . $nbr_verses; $nextoffset=$offset + (528 * $nbr_verses); } $total_vers+=$nbr_verses; } } ################################################################################ $total_books+=(66 * 7499); $total_chps+=(1189 * 7499); print "Process complete:" . "\n\n"; print $total_books . "\n"; print $total_chps . "\n"; print $total_vers . "\n"; $BibleIDX{"STATS"} = "(1 to 7500) " . $total_books . "," . $total_chps . "," . $total_vers; print $BibleIDX{"STATS"} . "\n"; exit; ################################################################################ END { untie(%BibleIDX); close(IN); close(IN2); close(IN3); sleep 5; }