NAME
Ham::WSJTX::Logparse - Parses ALL.TXT log files from Joe Taylor K1JT's WSJT-X, to extract CQ and calling station information for all entries in a given amateur band.
ACKNOWLEDGEMENTS
Much inspiration was gained from povaX's ALLmon at https://github.com/poxaV/ALLmon/blob/master/ALLmon Thank you, povaX!
VERSION
Version 0.01
SYNOPSIS
Extract all log entries for a given band:
use Ham::WSJTX::Logparse;
my $log = Ham::WSJTX::Logparse->new();
# Looks in the default location for the ALL.TXT file
# or...
my $log = Ham::WSJTX::Logparse->new("/path/to/an/ALL.TXT");
# or, can parse multiple logs...
my $log = Ham::WSJTX::Logparse->new("/tmp/ALL.TXT.one", "/tmp/ALL.TXT.two"); # etc., etc....
...
# Define a callback
my $callback = sub {
my $date = shift;
my $time = shift;
my $power = shift;
my $offset = shift;
my $mode = shift;
my $callsign = shift;
my $grid = shift;
print "date $date time $time power $power offset $offset mode $mode callsign $callsign grid $grid\n";
# sure you can do something interesting with this!
};
$log->parseForBand("20m", $callback);
# many entries are printed....
EXPORT
No functions exported; this has a purely object-oriented module.
SUBROUTINES/METHODS
new(optional list of files)
Constructs a new parser, given an optional list of files. If no files are given, the default locations will be checked for a WSJT-X ALL.TXT file. Returns a blessed hash.
Note that this module has only been tested on OSX, and the location of default files on non-OSX/Windows platforms is not known to the author at this time; if you know, please inform me as new will die if it tries to load a default file on a platform I haven't coded for.
files($self)
Returns the list of files that the parser was configured with, or the default file as discovered if no files were supplied in the constructor.
parseForBand($self, $bandOfInterest, $callback)
Parses all discovered or supplied files, correctly determining the date of each 'heard station' entry, and if the entry relates to the band of interest, calls the callback with the entry details.
The 'band of interest' is of the form nnnm, e.g. 20m, 2m, 160m, 2200m. Only one band can be filtered at any time.
The callback is a sub as shown above in the synopsis.
Take care with the 'grid' data in your callback: This is extracted from the logged content of a message, and must be two characers followed by two digits - but if the message was 'M0CUV SV2XYZ RR73', then the grid would be decoded as 'RR73', which is not a valid grid square (of course, this is 'RR 73', but has been concatenated by the SV2 station). Similarly with TU73. In my callback, I use:
if ($grid =~ /(TU|RR)73/) {
warn "dodgy data from $date $time $callsign\n";
return;
}
Better validation may be considered for a later release.
An entry is considered a 'heard station' entry if it has some text (maybe CQ or a callsign), followed by some text (most likely a callsign), followed by a grid square (two characters, two digits - see the note of caution in the previous paragragh).
AUTHOR
Matt Gumbley, devzendo at cpan.org>
BUGS
Please report any bugs or feature requests to bug-ham-wsjtx-logparse at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Ham-WSJTX-Logparse. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Ham::WSJTX::Logparse
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
LICENSE AND COPYRIGHT
Copyright 2016 Matt Gumbley.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
L<http://www.apache.org/licenses/LICENSE-2.0>
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.