Compare commits
2 commits
18607a5ee8
...
0cefb3ca19
Author | SHA1 | Date | |
---|---|---|---|
Wolfgang | 0cefb3ca19 | ||
Wolfgang | 0ebec3bb20 |
74
README.md
74
README.md
|
@ -1,13 +1,69 @@
|
||||||
# adif-pota2sig
|
# adif-pota2sig
|
||||||
|
|
||||||
Convert POTA fields in adif files to SIG and SIG_INFO fields
|
Process adif file for POTA uploads
|
||||||
|
|
||||||
Parse adif file, if a record has one or more POTA_REF entries (delimited by a
|
## SYNOPSIS
|
||||||
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 -i `in.adi` -o `out.adi`
|
||||||
```sh
|
|
||||||
adif-pota2sig.pl logfile.adi > extended-logfile.adi
|
adif-pota2sig.pl < `in.adi` > `out.adi`
|
||||||
```
|
|
||||||
|
adif-pota2sig.pl -r K-TEST -t `out_REF.adi` -i `in.adi`
|
||||||
|
|
||||||
|
adif-pota2sig.pl -r K-TEST -t `out_REF.adi` < `in.adi`
|
||||||
|
|
||||||
|
adif-pota2sig.pl -h
|
||||||
|
|
||||||
|
## DESCRIPTION
|
||||||
|
|
||||||
|
**adif-pota2sig** will read an 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 or a file.
|
||||||
|
|
||||||
|
If used with **-r** and **-t** options a number of files with contents described
|
||||||
|
above will be created. One file for each POTA reference. For output filenames
|
||||||
|
see **-t**.
|
||||||
|
|
||||||
|
With **-r** you can also include the location in the format REFERENCE@LOCATION,
|
||||||
|
which is handy for trails. E. g. -r DE-0622@DE-HH
|
||||||
|
|
||||||
|
## OPTIONS
|
||||||
|
|
||||||
|
- **-h|--help**
|
||||||
|
|
||||||
|
Print a brief help message and exits.
|
||||||
|
|
||||||
|
- **-i `in.adi`|--input=`in.adi`**
|
||||||
|
|
||||||
|
Use `in.adi` as input (default: - for stdin).
|
||||||
|
|
||||||
|
- **-o `out.adi`|--output=`out.adi`**
|
||||||
|
|
||||||
|
Use `out.adi` as output (default: - for stdout).
|
||||||
|
|
||||||
|
- **-r MY\_POTA\_REF|--reference=MY\_POTA\_REF**
|
||||||
|
|
||||||
|
Use MY\_POTA\_REF as own POTA reference. If there are more than one (for a
|
||||||
|
n-fer) create a list with commas, e. g. **-r** K-TEST1,K-TEST2,K-TEST3.
|
||||||
|
|
||||||
|
Also set the entries MY\_SIG and MY\_SIG\_INFO matching the reference in the
|
||||||
|
output files. By default already existing entries with MY\_SIG and MY\_SIG\_INFO
|
||||||
|
won't be overwritten and the program will stop. Using **-f** will overwrite the
|
||||||
|
entries.
|
||||||
|
|
||||||
|
**-t** is mandatory for this option.
|
||||||
|
|
||||||
|
- **-t `out_REF.adi`|--template=`out_REF.adi`**
|
||||||
|
|
||||||
|
Use `out_REF.adi` as output filename template for multiple references. REF
|
||||||
|
will be replaced by a POTA reference. Multiple filenames will be created.
|
||||||
|
|
||||||
|
**-o** is not allowed for this option.
|
||||||
|
|
||||||
|
**-r** is mandatory for this option.
|
||||||
|
|
||||||
|
- **-f|--force**
|
||||||
|
|
||||||
|
By default filenames selected with **-o** and **-t** won't be overwritten and the
|
||||||
|
program will stop. Using **-f** will overwrite output files.
|
||||||
|
|
|
@ -19,13 +19,13 @@ adif-pota2sig - Process adif file for POTA uploads
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
adif-pota2sig.pl -i in.adi -o out.adi
|
adif-pota2sig.pl -i F<in.adi> -o F<out.adi>
|
||||||
|
|
||||||
adif-pota2sig.pl < in.adi > out.adi
|
adif-pota2sig.pl < F<in.adi> > F<out.adi>
|
||||||
|
|
||||||
adif-pota2sig.pl -r K-TEST -t out_REF.adi -i in.adi
|
adif-pota2sig.pl -r K-TEST -t F<out_REF.adi> -i F<in.adi>
|
||||||
|
|
||||||
adif-pota2sig.pl -r K-TEST -t out_REF.adi < in.adi
|
adif-pota2sig.pl -r K-TEST -t F<out_REF.adi> < F<in.adi>
|
||||||
|
|
||||||
adif-pota2sig.pl -h
|
adif-pota2sig.pl -h
|
||||||
|
|
||||||
|
@ -39,21 +39,35 @@ use Pod::Usage;
|
||||||
|
|
||||||
my $input_file = "";
|
my $input_file = "";
|
||||||
my $output_file = "";
|
my $output_file = "";
|
||||||
my $my_ref = "";
|
my $my_refs = "";
|
||||||
my $output_template = "";
|
my $output_template = "";
|
||||||
my $force_output = 0;
|
my $force_output = 0;
|
||||||
|
|
||||||
GetOptions (
|
GetOptions (
|
||||||
"i|input=s" => \$input_file,
|
"i|input=s" => \$input_file,
|
||||||
"o|output=s" => \$output_file,
|
"o|output=s" => \$output_file,
|
||||||
"r|reference=s" => \$my_ref,
|
"r|reference=s" => \$my_refs,
|
||||||
"f|force" => \$force_output,
|
|
||||||
"t|template=s" => \$output_template,
|
"t|template=s" => \$output_template,
|
||||||
|
"f|force" => \$force_output,
|
||||||
"h|help" => sub {pod2usage(-verbose => 2)}
|
"h|help" => sub {pod2usage(-verbose => 2)}
|
||||||
) or die("Error in command line arguments\n");
|
) or die("Error in command line arguments");
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
B<adif-pota2sig> will read an 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 or a file.
|
||||||
|
|
||||||
|
If used with B<-r> and B<-t> options a number of files with contents described
|
||||||
|
above will be created. One file for each POTA reference. For output filenames
|
||||||
|
see B<-t>.
|
||||||
|
|
||||||
|
With B<-r> you can also include the location in the format REFERENCE@LOCATION,
|
||||||
|
which is handy for trails. E. g. -r DE-0622@DE-HH
|
||||||
|
|
||||||
=head1 OPTIONS
|
=head1 OPTIONS
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
@ -73,14 +87,19 @@ Use F<out.adi> as output (default: - for stdout).
|
||||||
=item B<-r MY_POTA_REF|--reference=MY_POTA_REF>
|
=item B<-r MY_POTA_REF|--reference=MY_POTA_REF>
|
||||||
|
|
||||||
Use MY_POTA_REF as own POTA reference. If there are more than one (for a
|
Use MY_POTA_REF as own POTA reference. If there are more than one (for a
|
||||||
n-fer) create a list with commas, e. g. S<B<-r> K-TEST1,K-TEST2,K-TEST3>
|
n-fer) create a list with commas, e. g. S<B<-r> K-TEST1,K-TEST2,K-TEST3>.
|
||||||
|
|
||||||
|
Also set the entries MY_SIG and MY_SIG_INFO matching the reference in the
|
||||||
|
output files. By default already existing entries with MY_SIG and MY_SIG_INFO
|
||||||
|
won't be overwritten and the program will stop. Using B<-f> will overwrite the
|
||||||
|
entries.
|
||||||
|
|
||||||
B<-t> is mandatory for this option.
|
B<-t> is mandatory for this option.
|
||||||
|
|
||||||
=item B<-t F<out_REF.adi>|--template=F<out_REF.adi>>
|
=item B<-t F<out_REF.adi>|--template=F<out_REF.adi>>
|
||||||
|
|
||||||
Use out_REF.adi as output filename template for multiple references. REF will
|
Use F<out_REF.adi> as output filename template for multiple references. REF
|
||||||
be replaced by a POTA reference. Multiple filenames will be created.
|
will be replaced by a POTA reference. Multiple filenames will be created.
|
||||||
|
|
||||||
B<-o> is not allowed for this option.
|
B<-o> is not allowed for this option.
|
||||||
|
|
||||||
|
@ -95,11 +114,11 @@ program will stop. Using B<-f> will overwrite output files.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
if (($my_ref ne "") && ($output_template eq "")) {
|
if (($my_refs ne "") && ($output_template eq "")) {
|
||||||
die "-t is mandatory for -r";
|
die "-t is mandatory for -r";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($output_template ne "") && ($my_ref eq "")) {
|
if (($output_template ne "") && ($my_refs eq "")) {
|
||||||
die "-r is mandatory for -t";
|
die "-r is mandatory for -t";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,17 +137,17 @@ if (($input_file eq "-") || ($input_file eq "")) {
|
||||||
open($FH_IN, '<', $input_file) or die "$input_file: $!";
|
open($FH_IN, '<', $input_file) or die "$input_file: $!";
|
||||||
}
|
}
|
||||||
|
|
||||||
my @output_filenames;
|
my %filenames_ref = ();
|
||||||
|
|
||||||
if ($my_ref ne "") {
|
if ($my_refs ne "") {
|
||||||
foreach (split(/,/, $my_ref)) {
|
foreach (split(/,/, $my_refs)) {
|
||||||
push(@output_filenames, $output_template =~ s/REF/$_/r);
|
$filenames_ref{$output_template =~ s/REF/$_/r} = $_;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
push(@output_filenames, $output_file);
|
$filenames_ref{$output_file} = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $output_filename (@output_filenames) {
|
foreach my $output_filename (keys %filenames_ref) {
|
||||||
seek $FH_IN, 0, 0;
|
seek $FH_IN, 0, 0;
|
||||||
|
|
||||||
my $FH_OUT;
|
my $FH_OUT;
|
||||||
|
@ -158,21 +177,35 @@ foreach my $output_filename (@output_filenames) {
|
||||||
push @entry, $_;
|
push @entry, $_;
|
||||||
if (m/<EOR>\s+$/i) {
|
if (m/<EOR>\s+$/i) {
|
||||||
# entry complete
|
# entry complete
|
||||||
|
|
||||||
|
# maybe add MY_SIG
|
||||||
|
my $my_ref = $filenames_ref{$output_filename};
|
||||||
|
if ($my_ref ne "") {
|
||||||
|
my $last = pop(@entry);
|
||||||
|
push(@entry, "<MY_SIG:4>POTA\r\n");
|
||||||
|
push(@entry, "<MY_SIG_INFO:" . length($my_ref) . ">" . $my_ref . "\r\n");
|
||||||
|
push(@entry, $last);
|
||||||
|
}
|
||||||
|
|
||||||
|
# print whole entry
|
||||||
if (scalar(@pota_refs) > 0) {
|
if (scalar(@pota_refs) > 0) {
|
||||||
|
# maybe print entry multiple times
|
||||||
# add sig_info to each pota reference
|
# add sig_info to each pota reference
|
||||||
foreach my $ref (@pota_refs) {
|
foreach my $ref (@pota_refs) {
|
||||||
# print all except last
|
# print all except last
|
||||||
print @entry[0 .. $#entry - 1];
|
print @entry[0 .. $#entry - 1];
|
||||||
# insert POTA SIG
|
# insert POTA SIG
|
||||||
print "<SIG:4>POTA\n";
|
print "<SIG:4>POTA\r\n";
|
||||||
print "<SIG_INFO:" . length($ref) . ">" . $ref . "\n";
|
print "<SIG_INFO:" . length($ref) . ">" . $ref . "\r\n";
|
||||||
# print last
|
# print last
|
||||||
print $entry[-1];
|
print $entry[-1];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# no park reference in this entry
|
# no park reference in this entry
|
||||||
|
# print entry only once
|
||||||
print @entry;
|
print @entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
# clear entry and pota refs for next entry
|
# clear entry and pota refs for next entry
|
||||||
@entry = ();
|
@entry = ();
|
||||||
@pota_refs = ();
|
@pota_refs = ();
|
||||||
|
@ -183,23 +216,15 @@ foreach my $output_filename (@output_filenames) {
|
||||||
# fill pota_refs with references
|
# fill pota_refs with references
|
||||||
@pota_refs = split(/,/, $val);
|
@pota_refs = split(/,/, $val);
|
||||||
chomp @pota_refs;
|
chomp @pota_refs;
|
||||||
|
} elsif (m/^<MY_SIG(_INFO)?:/) {
|
||||||
|
if ($force_output) {
|
||||||
|
# remove MY_SIG and MY_SIG_INFO
|
||||||
|
pop(@entry);
|
||||||
|
} else {
|
||||||
|
die "MY_SIG exists. Overwrite with --force";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close($FH_OUT);
|
close($FH_OUT);
|
||||||
}
|
}
|
||||||
close($FH_IN);
|
close($FH_IN);
|
||||||
|
|
||||||
__END__
|
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
|
||||||
|
|
||||||
B<adif-pota2sig> will read an 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 or a file.
|
|
||||||
|
|
||||||
If used with B<-r> and B<-t> options a number of files with contents described
|
|
||||||
above will be created. On file for each POTA reference. For output filenames
|
|
||||||
see B<-t>.
|
|
||||||
|
|
||||||
=cut
|
|
||||||
|
|
Loading…
Reference in a new issue