expoweb/1623/258/tablize-qms.pl
2015-04-07 05:01:27 +01:00

185 lines
4.0 KiB
Perl

#!/usr/bin/perl -w
use strict;
use Getopt::Long;
((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. qm.csv)\n";
usage();
}
open (CSV, "< $ARGV[0]");
# Start writing table file, and write table header
open TABLE, "> qm.html" or die $!;
print TABLE << "END";
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- *** This file is auto-generated by $progname - edit $ARGV[0] instead -->
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="../../css/main2.css" />
<title>1623/204 Question Mark List</title>
</head>
<body>
<h1>Tunnocksschacht Question Mark list</h1>
<div>
<a href="#qmextant">Extant QM's</a>
-- <a href="#qmdone">Finished QM's</a>
-- <a href="258.html">258 index</a>
</div>
<hr />
<h2>Conventions</h2>
<p>For question mark list conventions, see <a href="../../qm.html">here</a>.</p>
<h2>Question Marks</h2>
END
<CSV>; # starting to read in csv file, eat header line
my ($number, $grade, $area, $desc, $ref, $station, $completion);
my $incomplete="";
my $complete="";
my $templine;
my $colon;
my @stationbits;
print "Progress: *";
my $thisyear = -1;
my $qmyear;
# While loop which reads in each line of csv file
while (<CSV>) {
chomp;
# Split single line into all the fields
($number, $grade, $area, $desc, $ref, $station, $completion) = &parse_csv($_);
if (!$completion) { $completion = ""; }
$completion =~ s/\r//;
if (!$station) { $station = ""; }
if (!$ref) { $ref = ""; }
if (!$grade) { $grade = ""; }
if (!$desc) { $desc = ""; }
if (!$area) { $area = ""; }
if (($completion ne "") and ($ref ne ""))
{
print "\n?? Backlink for completed $number\n";
print "Ref is '$ref' and completion is '$completion'\n";
}
$qmyear = substr($number, 1, 4);
if($qmyear != $thisyear)
{
$complete = "$complete\n<h3>$qmyear</h3>\n";
$incomplete = "$incomplete\n<h3>$qmyear</h3>\n";
$thisyear = $qmyear;
}
# Last field of CSV file can have weird form-feeds etc. Kill them
# Construct XHTML line
if ($ref) {
$templine = "<dt><a href=\"$ref#q$number\" id=\"$number\">$number</a>";
} else {
$templine = "<dt>$number";
}
$templine = "$templine $grade</dt><dd>";
$colon = "";
if ($completion || $desc) {
$colon = ": ";
}
@stationbits = split(/\./, $station);
if ($#stationbits > 0)
{
$station = "$stationbits[-2].$stationbits[-1]";
}
if ($station) {
if ($area) {
$templine = "$templine$area, near $station$colon";
} else {
$templine = "${templine}Near $station$colon";
}
} elsif ($area) {
$templine = "$templine$area$colon"
}
if ($completion) {
$complete = "$complete$templine$completion</dd>\n";
} else {
$incomplete = "$incomplete$templine$desc</dd>\n";
}
print "*";
}
print TABLE << "END";
<h3><a id="qmextant">Extant QMs</a></h3>
<dl>
$incomplete
</dl>
<h3><a id="qmdone">Completed QMs</a></h3>
<dl>
$complete
</dl>
<hr />
<ul>
<li><a href="204.html">Back to 258 index page</a></li>
<li><a href="../../smkridge.html#id258">Schwarzmooskogel ridge area index and description</a></li>
<li><a href="../../indxal.htm#id258">Full Index</a></li>
<li><a href="../../areas.htm">Other Areas</a></li>
<li><a href="../../index.htm">Back to Expedition Intro page</a></li>
</ul>
</body>
</html>
END
close TABLE;
print "\nInformation: Done\n";
# Parse the CSV file
sub parse_csv {
my @fields=split /\t/;
my @unquoted=();
foreach $_ (@fields) {
$_ =~ s/\"//g;
push (@unquoted, $_);
}
return @unquoted;
}
# Usage
sub usage {
print << "EOF";
USAGE: $progname [-options] <CSV file>
-q, --quiet Be quiet about progress
-h, --help Show this message
EOF
exit(0);
}