#!/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"; 1623:204 Question Mark List

Steinbrückenhöhle Question Mark list

Extant QM's -- Finished QM's -- 204 index

Conventions

For question mark list conventions, see here.

Area codes

ArisAriston Series
InsigInsignificant Chamber and Bonsai Crawl
NENear End
NPNGNo Pain No Gain
TreeTrunk route from The Colonnade via Treeumphant Passage to Cave Tree Chamber
WEWhite Elephant Series
WolpWolpertinger Way and 110 A Day level
PDPleasure Dome and pitches below
SwSwings and Roundabouts

Question Marks

END ; # 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 () { chomp; # Split single line into all the fields ($number, $grade, $area, $desc, $ref, $station, $completion) = &parse_csv($_); if ($completion and $ref) { print "\n?? Backlink for completed $number\n"; } $qmyear = substr($number, 1, 4); if($qmyear != $thisyear) { $complete = "$complete\n

$qmyear

\n"; $incomplete = "$incomplete\n

$qmyear

\n"; $thisyear = $qmyear; } # Last field of CSV file can have weird form-feeds etc. Kill them $completion =~ s/\r//; # Construct XHTML line if ($ref) { $templine = "
$number"; } else { $templine = "
$number"; } $templine = "$templine $grade
"; $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
\n"; } else { $incomplete = "$incomplete$templine$desc\n"; } print "*"; } print TABLE << "END";

Extant QMs

$incomplete

Completed QMs

$complete

END close TABLE; print "\nInformation: Done\n"; # Parse the CSV file 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); } # Usage sub usage { print << "EOF"; USAGE: $progname [-options] -q, --quiet Be quiet about progress -h, --help Show this message EOF exit(0); }