Sprawdzanie znaku

W programie zastosowano kod sprawdzania znaku zaprogramowany przez Dave Robbins, K1TTT's. W monecie gdy wpiszesz znak zostanie on sprawdzony na zgodność z pewnymi zasadami aby dać znać operatorowi o możliwym błędzie. Jeśli wykryto błąd w znaku to zostaniesz ostrzeżony. Ostrzeżenie o możliwym błędzie zostanie podane w oknie check window.

Być może moje słownictwo tu zastosowane nie będzie odpowiadać aktualnie przyjętemu w Polsce. Jest to bardzo nieudolne tłumaczenie tego rozdziału z uwagi na specyfikę komputerowa tego zagadnienia. Słowo "character" oznacza nie tylko literę ale i cyfrę. Często tłumaczę "character" jako LITERĘ ale może to się odnosić tez i to CYFR. Proszę wiec kolegów o pomoc i sprostowanie na adres va3pl@rac.ca

     

Ta opcja sprawdzania znaku może poprawić twój UBN jeśli zostaną zastosowane dobre zasady dla znaków!

Uwaga: Sprawdzanie znaku na zgodność z pewnymi zasadami działa tylko na KF (bez WARC) oraz na CW/SSB i tylko wtedy jeśli nic nie zostało znalezione w oknie  CHECK window. Ta funkcja wiec nie działa na RTTY itp. oraz nie działa na UKF i wyżej!

****OSTRZEŻENIE**** Jeśli program ostrzeże o błędzie w znaku to nie oznacza to ze masz usunąć ten znak z logu. Sprawdź dobrze ten znak bo zasady wydawania znaków przez pewne kraje się zmieniły od czasu ustalenia tego szablonu (pattern) dla znaków, jak również zostają wydawane pewne specjalne znaki tylko na zawody lub z jakiejś okazji.

Uaktualnienie pliku szablonu (pattern file)

Wiele krajów zmieniło znaki w ciągu ostatnich kilku lat i na pewno pewne kraje zmienia znaki lub proces ich wydawania w ciągu nadchodzących lat. Dlatego szablon obecnie wpisany może już być nie aktualny lub będzie nieaktualny. Szablon dla sprawdzania ważności znaku znajduje się w pliku *.pat w katalogu programu. Szablon ten należy stale uaktualniać. Jeśli znasz szablon znaków dla swego kraju lub szablon nie zgadza się obecnie dla twego kraju to daj nam o tym znać przez wysłanie e-mail na grupę dyskusyjna N1MM Logger.

Weź pod uwagę następujące sprawy:

Gdy przeglądasz szablon zwracaj przede wszystkim uwagę na tekst, który powinien dać tobie podstawowe wiadomości co znaczy ten szablon. Jeśli masz zamiar wysłać e-mail do grupy dyskusyjnej to podaj krotki opis jak powinien wyglądać szablon w stylu podobnym jak to już jest zrobione. Napisz dłuższy opis jeśli zachodzi takowa potrzeba aby wyjaśnić szczegóły zasad znaku. Jeśli nie potrafisz zrobić cześć zakodowana dla tego schematu znaków czy znaku to po prostu przyślij wszystko a my tobie pomożemy. Jeśli szablon znaku w pliku już jest nie aktualny to przyślij nam obie linie z wyjaśnieniem, dlaczego ten szablon znaku już nie jest aktualny. .

Obecnie plik zawiera 200 szablonów, lecz łatwo może być rozszerzony.

Prosimy aby nie pisać szablonów tylko dla samego siebie. Masz tu możliwość podzielenia się z grupa swoimi wiadomościami na temat szablonu (standardu) wydawania znaków w twoim kraju.

Plik szablonu - The pattern file

Szablon 'pattern' opisuje źle znaki litera po literze. W momencie gdy znak zgodzi się z pewnym szablonem cala ta procedura jest kontynuowana. Jeśli szablon skończy się po wpisaniu całego znaku to oznacza ze znak jest zły. Jeśli znak nie zgodzi się z szablonem to oznacza ze znak jest dobry.

Składniki

Składniki szablonu, które stwarzają pewne formuły są jak następuje:

Pojedyncza litera:
A
sprawdź i porównaj literę 'A'
1
sprawdź i porównaj cyfrę '1'

Itp.
 
Oznaczenie powtórek - Repetition flags
Następnie występuje litera lub cyfra - These must be followed by a character type specifier:
Aby powstała fraza (tekst?) typu: - To make up phrases like:
:
Jedna zgodność -Match one  
N
Zgodność jakiejkolwiek litery lub cyfry - match any character (A-Z, 0-9)  
:D
Zgodność jednej z wielu cyfr - match one of any digit
+
Jedna lub więcej zgodności - Match one or more  
A
Zgodność jakiejkolwiek litery  - match any letter(A-Z)  
+A
Zgodność jednej z wielu cyfr - match one of any digit
*
Zero zgodności lub więcej - match zero or more  
D
Zgodność jakiejkolwiek cyfry - match any digit (0-9)  
*N
Zgodność zero lub więcej liter lub cyfr - match zero or more letters or digits
-
Dodatkowa zgodność - optional match  

   
-D
Dodatkowa zgodność jednej cyfry - optionally match one digit
 
Zgodność grupy liter - Groups of characters to match:
Które stworzą frazę (tekst?) typu - Which can make up phrases like
[]
Zgodność - match  
[ABCFXZ]
Zgodność a,b,c,f,x lub z - match a,b,c,f,x, or z
!
Zgodność jakiejkolwiek litery nie znalezionej na liście - match any characters not in list  
[!ABC]
Zgodność wszystkiego oprócz a,b,lub c - match anything other than a,b, or c
-
Zgodność pewnego przedziału liter - match a range of characters  
[!A-R]
Zgodność z wszystkim oprócz liter a do r - match anything other than letters a to r

Sprawdzanie pasm oraz emisji podane jest poniżej.

Poniżej podano pewne proste przykłady oraz ich zgodność lub nie z szablonami (patterns)

Szablon - Pattern
Zgodność z szablonem - Pattern matches
Nie zgodność z szablonem - Pattern doesn't match
:A:D
 
A1
Z0
Q8

AA
19
1A

+A:D
 
A1
AA1
ABC1

AA
19
1A

*A:D
 
1
19
A1
AA1
ABC1

AA
1A

F:D
 
F1
F2
F9

A1
Z0
1A

[ABC]B:D
 
AB1
CB1
BB9

AC1
DB9
CZ0

[!ABC]B:D
 
ZB1
DB9
QB0

AC1
AB1
CB1
BB9
CZ0

Jaka zgodność staramy się znaleźć?

Po pierwsze. Co się dzieje jeśli jest zgodność (z szablonem? przyp. VA3PL)?? Jeśli znak zgodzi się z jakimś szablonem to wtedy tekst zostaje pokazany w oknie check window. Wobec tego stworzymy regulamin który określa jaki znak jest zły. Jak na przykład:

  1. Znaki zaczynające się na 3 litery
  2. Znak zaczynający się na literę B dla innych prefiksów niż BT,BV,BY,BZ
  3. Francuskie znaki zawierające cyfry 1 lub 6 ale nie maja 3 literowego sufiksu.
  4. Wschodnio Niemieckie znaki kończące się na inna literę niż A do O (Wschodnie Niemcy już nie istnieją ale podane to jest tu jako doskonały przykład znajdowania zgodności z szablonem)

W związku z tym staramy się ustawić szablon dla znaków pasujących do tego szablonu.

Dodatkowo na nieszczęście pewne państwa utrudniają zadanie przez wydawania pewnych znaków przypisanych do pewnych pasm lub nawet emisji. Na przykład prefiks HJ zezwala na prace tylko na CW na 40m lub SSB na 80m. Wiec musimy ustawić pewny szablon dla takich znaków. W tym wypadki zrobiłem tak ze dodałem do tych znaków informacje o pasmach i emisjach nim znak zostanie poddany sprawdzeniu. Wygląda to wiec tak:  "BY1AA=4S" gdzie  '=' jest dodane na końcu znaku, następnie numer pasma (1=160m, 2=80m, ... 6=10m) oraz typ emisji (S=SSB, C=CW, O=Inne emisje). Możemy wiec stworzyć formule (rules) przypisany do specyficznych pasma ale nie zawierają innych mechanizmów do zapamiętania. To również pozwala oznaczyć koniec znaku symbolem  '=' , wiec możemy obecnie posortować znaki które musza mieć pewna długość. (uff!! Czy ma to jakiś sens? Może kiedyś do tego wrócę i lepiej to napisze. Przyp. VA3PL)

Oznacza to ze następująca kombinacja może być zrobiona dla oznaczenie pasm i emisji:
=3C    przypasuj dla '3' (40meters) następnie dla "C" dla CW, Znak będzie zły na 40m CW.
=4       przypasuj dla '4' dla 20m jakakolwiek emisja, znak będzie zły na 20m jakakolwiek emisja.
=:DS   przypasuje jakikolwiek pasmo, lecz tylko dla SSB, znak będzie zły na SSB na jakimkolwiek paśmie.

Wobec tego zgodnie z naszymi formułami ważnymi tylko dla CW lub 40/80 SSB, oznacza ze znak jest zły na każdym innym paśmie lub na SSB wiec możemy zrobić:
=[1456]S   oznacza ze znak jest zły na 160, 20, 15, oraz 10m SSB

Dodatkowo nim znak jest sprawdzany każda cześć portable jest usunięta. Wobec tego /QRP, /A, /MM, /CT3 itp. nie ma wpływu na sprawdzenie głównego znaku.

Wobec tego wróćmy do pewnych przykładów wspomnianych wyżej i spróbujmy stworzyć formuły dla nich.

1. Znaki zaczynające się na 3 litery - Calls that start with 3 letters
Jest to stosunkowo łatwo. Potrzeba tylko ustawić formule aby sprawdzało czy występują pierwsze 3 litery. Wiec :A oznacza znajdź "match" jakąś literę wiec możemy tu użyć:
:A:A:A
Zauważ, ze sprawdzamy tu tylko na pierwsze 3 litery znaku wiec nie musimy dalej się zagłębiać w ważność znaku. Pozwala wiec tu użyć co wcześniej zaznaczyliśmy ze jeśli formuła skończy się wcześniej niż znak to reszta jest uważana jako zgodna z formułą.

2. Znak zaczynający się litera B dla innych znaków niż BT, BV, BY, BZ - Call with first letter B with prefix other than BT,BV,BY,BZ
To zadanie jest trochę trudniejsze, lecz przynajmniej mamy tu do czynienie tylko z pierwszymi dwoma literami znaku. Po pierwsze. Formuła jest ważna tylko dla znaków zaczynających się na literę B. Następnie druga litera nie może należeć do grupy 'TVYZ' wiec będzie się zgadzało 'match'. Wobec tego formuła będzie wyglądała:
B[!TVYZ]
Wiec z godnie z tym co powiedzieliśmy wcześniej: Jeśli zgodzi się (match) z 'B', oraz następna litera nie należy do grupy "TVYZ" wiec nie dbamy jaka jest dalsza cześć znaku.

3. Francuskie znaki z numerem 1 lub 6 ale maja mniej niż 3 literowy sufiks - French calls with a 1 or 6 that don't have 3 character suffix
Jest to już prawdziwy test możliwości tych formuł oraz jak dobrze je zrozumiałeś. Po pierwsze znak musi zaczynać się na 'F', następnie cyfra '1' lub '6'. Następnie musimy dopasować jedno lub dwu literowy sufiks aby odrzucić sufiks jako za krotki. Do tego celu użyjemy jedna z dodatkowych 'optional' dopasowanie (matches) dla drugiej litery sufiksu aby dostać:
F[16]:A-A=
Zauważ ze mamy tu ":A-A" co dopasuje jedna literę, oraz dodatkowo druga literę. Nie możemy tu użyć "+A" ponieważ to również dopasuje 3 litery. Następnie mamy '=' co oznaczy koniec formuły wiec jeśli byłaby trzecia litera w sufiksie, wiec nie zostanie znalezione dopasowanie (match) '=' i w tym wypadki znak zostanie zaliczony jako dobry. Na nieszczęście Francuzi używają jeszcze innych prefiksów jak FB, FD, FE, FF podlegających tej samej zasadzie. Lecz nie maga tu być zaliczone ponieważ są inne znaki zaczynające się na literę F lecz nie musza mieć 3 literowy sufiks. Takie znaki jak FR, FS, FJ, FC, FT nie pasują do formuły o 3 literowym sufiksie. Wobec tego potrzebujemy dodatkowa formule aby określić pozostałe Francuskie znaki z 3 literowymi sufiksami. Aby to osiągnąć możemy zastosować:
F[BDEF][16]:A-A=
Będzie to sprawdzało Francuskie dwu literowe prefiksy z cyfra '1' lub '6' na jedno lub dwu literowe sufiksy.

4. Wschodnio Niemiecki znaki które nie kończą się na A do O - East German calls that don't end in A to O
Teraz mamy do czynienie z prawdziwym problemem. Na szczęście wszystkie te znaki już nie istnieją, wiec użyte jest to tu jako przykład. Prawdopodobnie ten przykład podobny jest do wielu Rosyjskich znaków podlegających pewnym podobnym przepisom co to sufiksów.  Po pierwsze chcemy sprawdzać znaki zaczynające się na literę Y, następnie jest cyfra od 2 do 9, następnie następna cyfra od 0 do 9, następnie może być jedno, dwu oraz w rzadkich przypadkach trzy literowy sufiks, który musi kończyć się na literę z przedziału 'A' do 'O'. Biorąc to wszystko pod uwagę możemy ustawić następujące formuły:
Y[2-9]:D[!A-O]=     Dla jedno literowych sufiksów
Y[2-9]:D:A[!A-O]=     Dla 2 literowych sufiksów
Y[2-9]:D:A:A[!A-O]=     Dla rzadkich 3 literowych sufiksów
W tym wypadku mamy kilka formol (rules). Gdybyśmy użyli '+A' lub '*A' musiało by to dopasowywać ostatnie litery które chcemy sprawdzać osobno.

Jeśli przyglądniesz się plikowi CALLSIGN.PAT to zobaczysz w nim wszystkie te formuły (rules) które stworzyłem. Do każdej formuły (rule) jest przypisana linia z wyjaśnieniem. Ta linia pokazywana jest w oknie check window. Zauważ ze pewne linie mówią tylko ze znak jest rzadko używany.

Teraz każdy z was powinien być specem w tworzeniu formoly dla złych znaków. Jeśli stworzysz nowa formule możesz ja przetestować przez wpisanie złego znaku w pole znaku głównego okna logowania.

Jest możliwe ze stworzysz formule (rules) która nie możesz zastosować w pliku. Na przykład dla znaku "HI500ABC", który zawsze będzie odrzucany jako znak za długi  "CALL TOO LONG", przez formule blisko początku pliku, wiec musimy stworzyć specyficzna formule mówiąca ze "saying that HI500 calls only have 2 letter suffixes you would not get to it unless you put it before the rule for maximum callsign length." Zostawiłem w oryginale bo nie kapuje o co tu chodzi. Przyp. VA3PL

"Some of the 'Generic' rules will reject calls that may be good. The special calls using extra long numbers, like the "HI500ABC" above may very well be a legal call. But since these should be relatively few, especially during a contest, I feel it is better to have them shown in the check window and let the operator determine if they are correct than to try to come up with rules that may only be used once." Zostawilem w oryginale bo nie kapuje o co tu chodzi. Może kiedyś do tego wrócę albo ktoś zaproponuje lepsze wyjaśnienie wcześniej. Przyp. VA3PL