Add description and initial commit for script

This commit is contained in:
Wolfgang Kroener 2024-05-14 20:20:38 +02:00
parent cc46bc3825
commit b2ad8854df
2 changed files with 74 additions and 1 deletions

View file

@ -1,3 +1,11 @@
# adif-pota2sig
Convert POTA fields in adif files to SIG and SIG_INFO fields
Convert POTA fields in adif files to SIG and SIG_INFO fields
Parse adif file, if a record has one or more POTA_REF entries (delimited by a
comma), add SIG POTA and SIG_INFO with reference. Multiply record such, that
every POTA_REF entry is a separate record with own SIG_INFO.
Extended adif file will be printed to stdout.
Usage:
adif-pota2sig.pl logfile.adi > extended-logfile.adi

65
adif-pota2sig.pl Executable file
View file

@ -0,0 +1,65 @@
#!/usr/bin/env perl
#
# SPDX-License-Identifier: Beerware
# Wolfgang DM5WK Kroener wrote this file. As long as you retain this notice you
# can do whatever you want with this stuff. If we meet some day, and you think
# this stuff is worth it, you can buy me a beer in return.
#
# modified from perlmonks - TedPride - http://www.perlmonks.org/?node_id=559222
# modified from https://scruss.com/blog/2011/05/23/parsing-adif-with-perl/
#
# Description:
# Parse adif file, if a contact has one or more POTA_REF entries (delimited by
# a comma), add SIG POTA and SIG_INFO with reference. Multiply contact such,
# that every POTA_REF entry is a separate contact with own SIG_INFO.
# Extendet adif file will be printed to stdout.
#
# Usage:
# adif-pota2sig.pl logfile.adi > new-logfile.adi
use strict;
use warnings;
# use filename.adi as parameter
open(my $FH, '<', $ARGV[0]) or die "$ARGV[0]: $!";
while (<$FH>) {
print;
# fast forward past header
last if m/<EOH>\s+$/i;
}
my @entry = ();
my @pota_refs = ();
while (<$FH>) {
push @entry, $_;
if (m/<EOR>\s+$/i) {
# entry complete
if (scalar(@pota_refs) > 0) {
# add sig_info to each pota reference
foreach my $ref (@pota_refs) {
# print all except last
print @entry[0 .. $#entry - 1];
# insert POTA SIG
print "<SIG:4>POTA\n";
print "<SIG_INFO:" . length($ref) . ">" . $ref . "\n";
# print last
print $entry[-1];
}
} else {
# no park reference in this entry
print @entry;
}
# clear entry and pota refs for next entry
@entry = ();
@pota_refs = ();
} elsif (m/^<POTA_REF:/) {
# get last element of split >
my $val = (split(/>/))[-1];
chomp($val);
# fill pota_refs with references
@pota_refs = split(/,/, $val);
chomp @pota_refs;
}
}
close($FH);