#!/usr/bin/perl -w use strict; use File::Path; use Getopt::Long; # no_info col is redundant. FIXME # WTF is dl compact? ((my $progname = $0) =~ s/^.*(\/|\\)//ig); # basename $0 # Parse options my $no_verbose_progress = 0; my $usage = 0; GetOptions('quiet' => \$no_verbose_progress, # be quiet 'help' => \$usage # help! ); # Print usage if ($usage) { usage(); } unless ($ARGV[0]) { print "Specify a CSV file name as the program's argument(e.g. CAVETAB2.CSV)\n"; usage(); } open (CSV, "< $ARGV[0]"); # Start writing index file open INDXAL, ">..\/indxal.htm" or die $!; print INDXAL << "END";
Back to CUCC Home page
Back to Expedition Intro page
Index to Expo information pages
Description of CUCC's area and split to subareas
List of (links to) published reports and logbooks
Text only Index
Index pages (with thumbnails)
Table of members of CUCC expeditions 1976-99
Other groups who have worked in the area.
Adjacent area 1626
END
close INDXAL;
print "Information: Done\n";
# Process a line of the CSV file
# First argument is contents of line to process
# Second argument is "cave" or "entrance"
# 3rd arg is the Kataster number of the cave an entrance belongs to (optional)
# 4th arg is the Other number of the cave an entrance belongs to (optional)
# Returns nothing
sub do_this_line {
# Split single line into all the fields
my ($kat_num, $kat_status, $ents, $other_number, $mult_ents, $file, $linkfile, $name, $unofficial_name, $comment, $area, $no_info, $explorers, $u_description, $equipment, $qmlist, $katstatus, $references, $u_centre_line, $u_drawn_survey, $survex_file, $length, $depth, $extent, $header, $footer, $notes, $ent_name, $tag_punkt, $other_punkt, $desc_other_punkt, $exact_punkt, $fix_type, $gpspresa, $gpspostsa, $northing, $easting, $altitude, $bearings, $map, $location, $approach, $ent_desc, $ent_photo, $marking) = &parse_csv($_[0]);
# If we have been called to process an entrance, we may have been given the cave's Kataster number or Other number
if ($_[2] and ! $kat_num) {
$kat_num = $_[2];
}
if ($_[3] and ! $other_number) {
$other_number = $_[3];
}
# Generate $number variable to hold kataster no. or other no. if no kataster no. present
my $number = $kat_num;
my $other_number_no_brackets = $other_number;
if ($kat_num and $other_number) {
$other_number = "($other_number)"; # wrap it in brackets, so it doesn't appear to be official
} elsif ($other_number and ! $kat_num) {
$number = $other_number;
}
# Determine the number of directorys deep the caves main page is at in order to link to area descriptions and indxal
my $toroot = 'Q'; # hey; it's magic
my $counter = ($file =~ tr/\///);
while ($counter) {
$toroot = join('', $toroot, "/..");
$counter--;
}
$toroot =~ s/Q\///;
# If it's a cave, then insert it in the index file
if ($_[1] eq "cave") {
my $e = $ents;
$e =~ s/ +/ /g;
print INDXAL "
"; if ($kat_num) { print FILE "$kat_num"; } if ($ents) { print FILE " - $ents"; } if ($other_number) { print FILE " $other_number"; } print FILE " | "; print FILE "$name"; if ($unofficial_name) { print FILE " ($unofficial_name)"; } print FILE " | "; if ($kat_status) { print FILE "$kat_status | "; } print FILE "
---|
"; } if ($length) { print FILE "Length: $length "; } if ($depth) { print FILE "Depth: $depth "; } if ($extent) { print FILE "Extent: $extent "; } # Entrance specific bit unless ($mult_ents eq "yes") { # If there is only one entrance if ($tag_punkt or $other_punkt or $exact_punkt or $gpspostsa or $gpspresa or $easting or $northing or $altitude or $fix_type or $desc_other_punkt or $ent_name) { print FILE "\n\n
";
unless ($ent_name) {
print FILE "Entrance:\n
\n";
}
}
# Process the location data for the entrance
do_ent($tag_punkt,$other_punkt,$exact_punkt,$gpspostsa,$gpspresa,$easting,$northing,$altitude,$ent_name,$fix_type,$desc_other_punkt);
} else {
# If there are multiple entrances
multi_ents($file, $kat_num, $other_number, $other_number_no_brackets, $toroot);
}
# Cave general bit
if ($location) {
print FILE "\n\n
Location: $location"; } if ($bearings) { print FILE "\n\n
Bearings: $bearings"; } if ($approach) { print FILE "\n\n
Approach: $approach"; } if ($map) { print FILE "\n\n
Map: $map"; } if ($ent_desc) { print FILE "\n\n
Entrance Description: $ent_desc"; } if ($ent_photo) { print FILE "\n\n
Entrance Photo: $ent_photo"; } if ($marking and $marking ne "\r" and $marking ne "\r\n" and $marking ne "\n") { # bodgelicious. print FILE "\n\n
Marking: $marking"; } if ($references) { print FILE "\n\n
References: $references"; } if ($u_description) { print FILE "\n\n
Underground Description: $u_description"; } if ($equipment) { print FILE "\n\n
Equipment: $equipment"; } if ($qmlist) { print FILE "\n\n
QM list: $qmlist"; } if ($u_drawn_survey) { print FILE "\n\n
Survey: $u_drawn_survey"; } if ($notes) { print FILE "\n\n
Notes: $notes"; } if ($explorers) { print FILE "\n\n
Explorers: $explorers"; } if ($katstatus) { print FILE "\n\n
Kataster Status: $katstatus"; } if ($u_centre_line) { print FILE "\n\n
Centre Line: $u_centre_line"; } if ($survex_file) { print FILE "\n\n
Survex file: $survex_file"; } print FILE "\n\n\n
"; if ($footer) { print FILE "$footer\n
";
}
# Find the area the cave is in, and add appropriate links
if ($area =~ /(1a|1b|1c|1d)/) {
print FILE "\n";
print FILE "Plateau area index and description
";
}
if ($area =~ /(2a|2b)/) {
# we repeat this each time due to cave 39
print FILE "\n";
print FILE "Schwarzmooskogel ridge area index and description
";
}
if ($area =~ /3/) {
print FILE "";
print FILE "\nBräuning Alm area index and description
";
}
if ($area =~ /4/) {
print FILE "";
print FILE "\nKratzer valley index and description
";
}
if ($area =~ /5/) {
print FILE "\n";
print FILE "Schwarzmoos-Wildensee area index and description
";
}
if ($area =~ /6/) {
print FILE "\n";
print FILE "Far plateau area index and description
";
}
if ($area =~ /7/) {
print FILE "\n";
print FILE "Egglgrube area index and description
";
}
if ($area =~ /(8a|8b|8c|8d)/) {
print FILE "\n";
print FILE "Loser/Augst See area index and description
";
}
if ($area =~ /9/) {
print FILE "\n";
print FILE "Gschwandt area index and description
";
}
if ($area =~ /10/) {
print FILE "\n";
print FILE "N & NE shore of Altauseer See
";
}
if ($area =~ /11/) {
print FILE "\n";
print FILE "Augstbach area index and description
";
}
unless ($area) {
print FILE "\n";
print FILE "Go Back (Javascript)
"; # ACCK! ACCK! Evil JavaScript!
}
# Finish writing to file
print FILE << "END";
Full Index
Other Areas
Back to Expedition Intro page
END
close FILE;
}
# Parse a line of CSV data
# Argument is the line of data to be processed
# Returns array of the separated variables
sub parse_csv {
my $line = $_[0];
my @parsedline = ();
my $field = '';
while ($line =~ m{ \G(?:^|,)
(?: "((?> [^"]*) (?> "" [^"]*)*)" | ([^",]*)) }gx) {
if ($2) {
$field = $2;
} elsif ($1) {
$field = $1;
$field =~ s/""/"/g;
} else {
$field = '';
}
push(@parsedline, $field);
}
return(@parsedline);
}
# Process the location data for the entrance
# Returns nothing
sub do_ent {
my $punkt;
my $calc_easting;
my $calc_northing;
my $calc_altitude;
my $desc;
my $tag_punkt = $_[0];
my $other_punkt = $_[1];
my $exact_punkt = $_[2];
my $gpspostsa = $_[3];
my $gpspresa = $_[4];
my $easting = $_[5];
my $northing = $_[6];
my $altitude = $_[7];
my $ent_name = $_[8];
my $fix_type = $_[9];
my $desc_other_punkt = $_[10];
# Write out info for entrance
if ($ent_name) {
print FILE "Entrance Name: $ent_name\n\n
";
}
if ($altitude) {
print FILE "Recorded Alt: $altitude ";
}
if ($northing) {
print FILE "Recorded as N$northing ";
}
if ($easting) {
print FILE "Recorded as E$easting ";
}
if ($fix_type) {
print FILE "Fix type: $fix_type ";
}
if ($tag_punkt) {
print FILE "Tag point: $tag_punkt ";
}
if ($other_punkt) {
print FILE "Point: $other_punkt ";
if ($desc_other_punkt) {
print FILE "Point description: $desc_other_punkt ";
} else {
print FILE "Point description: none ";
}
}
if ($exact_punkt) {
print FILE "Exact entrance: $exact_punkt ";
}
if ($gpspresa) {
print FILE "GPS pre sa: $gpspresa ";
}
if ($gpspostsa) {
print FILE "GPS post sa: $gpspostsa ";
}
# Decide which punkt to lookup
if ($tag_punkt) {
$punkt=$tag_punkt;
$desc = "tag point";
} elsif ($other_punkt) {
$punkt = $other_punkt;
$desc = "point";
} elsif ($exact_punkt) {
$punkt = $exact_punkt;
$desc = "exact point";
} elsif ($gpspostsa) {
$punkt = $gpspostsa;
$desc = "GPS (pre SA)";
} elsif ($gpspresa) {
$punkt = $gpspresa;
$desc = "GPS (post SA)";
}
# Find the position of that punkt
if ($punkt) {
for my $surveypoint (@pos) {
if ($surveypoint =~ m/\( *([0-9\.\-]*), *([0-9\.\-]*), *([0-9\.\-]*) \) $punkt(\r\n|\n|\r)/){
$calc_easting=$1;
$calc_northing=$2;
$calc_altitude=$3;
}
}
if ($calc_easting) {
print FILE "
Lookup values for $desc data: ";
print FILE "Alt: $calc_altitude ";
print FILE "N$calc_northing ";
print FILE "E$calc_easting ";
} else
{ print "Warning: Lookup point for $desc data not found: $punkt\n"; }
}
}
# Handle multiple entrances
# 1st arg is the file name of the cave to which the entrance belongs
# 2nd arg is the Kataster number of the cave
# 3rd arg is the Other number of the cave (which may have been put in brackets)
# 4th arg is the Other number of the cave without any brackets
# 5th arg is the path to return to the root from the cave
sub multi_ents {
my $file = $_[0];
my $kat_num = $_[1];
my $other_number = $_[2];
my $other_number_no_brackets = $_[3];
my $toroot = $_[4];
print FILE "\n\n
Entrances:"; print FILE "\n
"; } # Usage sub usage { print << "EOF"; USAGE: $progname [-options]