#!/usr/bin/perl # Count the number of unique callsigns per band/mode of an NAQP formatted # Cabrillo file. # # Lines are of the form: # QSO: 3920 PH 2011-08-27 1400 N0N 59 MSH WA0AUX 59 IA use v5.10.1; use strict; use warnings; no if $] >= 5.017011, warnings => 'experimental::smartmatch'; my $qso; my %mults; my @fields; # my %bands; my $cnty; my $mult; my $pos = 0; my $line_no = 0; my $qsos = 0; my %ph_80; my %cw_80; my %ry_80; my %ph_40; my %cw_40; my %ry_40; my %ph_20; my %cw_20; my %ry_20; my %ph_15; my %cw_15; my %ry_15; my %ph_10; my %cw_10; my %ry_10; my $phpts; my $cwpts; my $rypts; my $phqs; my $cwqs; my $ryqs; my @ks_counties = qw( ALL AND ATC BAR BRT BOU BRO BUT CHS CHT CHE CHY CLK CLY CLO COF COM COW CRA DEC DIC DON DOU EDW ELK ELL ELS FIN FOR FRA GEA GOV GRM GRT GRY GLY GRE HAM HPR HVY HAS HOG JAC JEF JEW JOH KEA KIN KIO LAB LAN LEA LCN LIN LOG LYO MRN MSH MCP MEA MIA MIT MGY MOR MTN NEM NEO NES NOR OSA OSB OTT PAW PHI POT PRA RAW REN REP RIC RIL ROO RUS RSL SAL SCO SED SEW SHA SHE SMN SMI STA STN STE SUM THO TRE WAB WAL WAS WIC WIL WOO WYA ); my @canada = qw( AB BC MB NB NL NT NS NU ON PE QC SK YT ); my @usa = qw( AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY ); open(CABLOG, '<', "./N0NB.cbr") or die $!; while () { $qso = $_; $line_no++; # Look for lines that begin with 'QSO:' if ($qso =~ /^QSO:/) { $qsos++; chomp $qso; @fields = split(/\s+/, $qso); # Calculate multipliers # Kansas counties are three letters--MSH, WAS, NEM, etc. if (length($fields[10]) == 3) { if ($fields[10] ~~ @ks_counties) { $mults{KS} += 1; } else { say "Erroneous county logged: ", $fields[10], " at line ", $line_no; } } # US states, Canadian provinces, and DX are loged with two letter codes. elsif (length($fields[10]) == 2) { if ($fields[10] ~~ @usa or $fields[10] ~~ @canada or $fields[10] eq 'DX') { $mults{$fields[10]} += 1; } else { say "Erroneous multiplier logged: ", $fields[10], " at line ", $line_no; } } else { say "Invalid multiplier length: ", $fields[10], " at line ", $line_no; } # 80m if ($fields[1] < 4000 && $fields[1] > 3500) { if ($fields[2] eq 'PH') { $ph_80{$fields[8]} +=1; } elsif ($fields[2] eq 'CW') { $cw_80{$fields[8]} +=1; } elsif ($fields[2] eq 'RY') { $ry_80{$fields[8]} +=1; } } # 40m if ($fields[1] < 7300 && $fields[1] > 7000) { if ($fields[2] eq 'PH') { $ph_40{$fields[8]} +=1; } elsif ($fields[2] eq 'CW') { $cw_40{$fields[8]} +=1; } elsif ($fields[2] eq 'RY') { $ry_40{$fields[8]} +=1; } } # 20m if ($fields[1] < 14350 && $fields[1] > 14000) { if ($fields[2] eq 'PH') { $ph_20{$fields[8]} +=1; } elsif ($fields[2] eq 'CW') { $cw_20{$fields[8]} +=1; } elsif ($fields[2] eq 'RY') { $ry_20{$fields[8]} +=1; } } # 15m if ($fields[1] < 21450 && $fields[1] > 21000) { if ($fields[2] eq 'PH') { $ph_15{$fields[8]} +=1; } elsif ($fields[2] eq 'CW') { $cw_15{$fields[8]} +=1; } elsif ($fields[2] eq 'RY') { $ry_15{$fields[8]} +=1; } } # 10m if ($fields[1] < 29000 && $fields[1] > 28000) { if ($fields[2] eq 'PH') { $ph_10{$fields[8]} +=1; } elsif ($fields[2] eq 'CW') { $cw_10{$fields[8]} +=1; } elsif ($fields[2] eq 'RY') { $ry_10{$fields[8]} +=1; } } } } print "\nNumber of mults: ", scalar(keys %mults), "\n"; print "\nMults/QSOs:\n"; foreach $mult (sort keys %mults) { if ($pos >= 70) { print "\n"; $pos = 0; } printf "%s: %3d ", $mult, $mults{$mult}; $pos += 9; } print "\n\n"; printf "80m CW: %-10dSSB: %-10dDigital: %-10d\n", scalar(keys %cw_80), scalar(keys %ph_80), scalar(keys %ry_80); printf "40m CW: %-10dSSB: %-10dDigital: %-10d\n", scalar(keys %cw_40), scalar(keys %ph_40), scalar(keys %ry_40); printf "20m CW: %-10dSSB: %-10dDigital: %-10d\n", scalar(keys %cw_20), scalar(keys %ph_20), scalar(keys %ry_20); printf "15m CW: %-10dSSB: %-10dDigital: %-10d\n", scalar(keys %cw_15), scalar(keys %ph_15), scalar(keys %ry_15); printf "10m CW: %-10dSSB: %-10dDigital: %-10d\n", scalar(keys %cw_10), scalar(keys %ph_10), scalar(keys %ry_10); print "\nTotals\n"; $phqs = (scalar(keys %ph_80) + scalar(keys %ph_40) + scalar(keys %ph_20) + scalar(keys %ph_15) + scalar(keys %ph_10)); $cwqs = (scalar(keys %cw_80) + scalar(keys %cw_40) + scalar(keys %cw_20) + scalar(keys %cw_15) + scalar(keys %cw_10)); $ryqs = (scalar(keys %ry_80) + scalar(keys %ry_40) + scalar(keys %ry_20) + scalar(keys %ry_15) + scalar(keys %ry_10)); printf "All: %-5dDuped: %-5d\n", $qsos, $cwqs + $phqs + $ryqs; printf "CW: %-5dSSB: %-5dDigital: %-5d\n", $cwqs, $phqs, $ryqs; $phpts = $phqs * 2; $cwpts = $cwqs * 3; $rypts = $ryqs * 3; print "\nPoints:\n"; printf "Pts CW: %-12dSSB: %-12dDigital: %-12dTotal: %d\n", $phpts, $cwpts, $rypts, $phpts + $cwpts + $rypts; print "\nTotal claimed score: ", ($phpts + $cwpts + $rypts) * scalar(keys %mults), "\n"; close(CABLOG);