ADIF <-> Log - Amateurfunk-Station DK1IO

Direkt zum Seiteninhalt

Hauptmenü

ADIF <-> Log

PureBasic

Log -> ADIF

Für den Datenaustausch zwischen Amateurfunkanwendungen gibt es mehrere Formate.
Allen aber gemeinsam ist, dass es sich um simple Textdateien handelt. Unterschiedlich ist nur die Aufbereitung der Daten.
Bei Cabrillo, CSV usw. ist die Reihenfolge der Daten fest vorgegeben, bei ADIF nicht.
ADIF weist allen Daten einen Namen zu und übermittelt auch die Länge der Daten. Dadurch ist dieses Format aufwändiger, aber auch flexibler als andere.
Am Beispiel eines Programms soll gezeigt werden, wie Daten aus dem eigenen Log in einer SQLite-Datenbank in eine ADIF-Datei exportiert werden, z. B. zum Hochladen auf eQSL.

Das Programm


; Log -> ADIF für eQSL

EnableExplicit

Global iDB
Define int1, int2, int3
Define.s str1, str2, str3, sMode, sPower, sMsg, sRecSce

UseSQLiteDatabase()
iDB = OpenDatabase(#PB_Any, "C:DK1IO.db3", "", "")

DeleteFile("C:DK1IO.ADIF")
OpenFile(0, "C:UsersIO.ADIF")

WriteStringN(0, "<ADIF_VER:5>2.2.7")
WriteStringN(0, "<EQSL_USER:5>DK1IO")
WriteStringN(0, "<EQSL_PSWD:9>XXXXXXXXX")
WriteStringN(0, "<PROGRAMID:9>Log DK1IO")
WriteStringN(0, "<EOH>")

sRecSce = "SELECT RowID, Datum, UTC, Rufzeichen, Band, Mode, RSTs FROM Tab_Log WHERE eQSL ISNULL"
DatabaseUpdate(iDB, "BEGIN TRANSACTION")
DatabaseQuery(iDB, sRecSce)
While NextDatabaseRow(iDB)
 str1 = GetDatabaseString(iDB, DatabaseColumnIndex(iDB, "Datum"))
 str1 = Left(str1, 4) + Mid(str1, 6, 2) + Right(str1, 2)
 str2 + "<QSO_DATE:8>" + str1
 str1 = GetDatabaseString(iDB, DatabaseColumnIndex(iDB, "UTC"))
 str2 + "<TIME_ON:4>" + str1
 str1 = GetDatabaseString(iDB, DatabaseColumnIndex(iDB, "Rufzeichen"))
 str2 + "<CALL:" + Str(Len(str1)) + ">" + str1
 str1 = GetDatabaseString(iDB, DatabaseColumnIndex(iDB, "Band"))
 str2 + "<BAND:" + Str(Len(str1) + 1) + ">" + str1 + "m"
 str1 = GetDatabaseString(iDB, DatabaseColumnIndex(iDB, "Mode"))
 sMode = str1
 If Left(str1, 4) = "BPSK" : str1 = Right(str1, Len(str1) - 1) : EndIf
 str2 + "<MODE:" + Str(Len(str1)) + ">" + str1
 str1 = GetDatabaseString(iDB, DatabaseColumnIndex(iDB, "RSTs"))
 str2 + "<RST_SENT:" + Str(Len(str1)) + ">" + str1
 sMsg = "Tnx QSO, 73"
 str2 + "<QSLMSG:" + Str(Len(sMsg)) + ">" + sMsg
 str2 + "<EOR>"
 WriteStringN(0, str2)
 int1 = GetDatabaseQuad(iDB, 0)
 str2 = "" : sMode = "" : sMsg = ""
 DatabaseUpdate(iDB, "UPDATE Tab_Log SET eQSL = -1 WHERE RowID = " + int1)
Wend
DatabaseUpdate(iDB, "END TRANSACTION")
FinishDatabaseQuery(iDB)
CloseFile(0)
CloseDatabase(iDB)
MessageRequester("Log -> ADIF", "Konvertierung erfolgreich")



ADIF -> Log

Hier nun ein Beispiel, wie eine ADIF-Datei in ein Log importiert werden kann, z. B. das Log einer Mobil- oder Portabelaktivität.


Das Programm


 ADIF$ = OpenFileRequester("ADIF-Datei auswählen", "C:, "", 0)
 str$ = InputRequester("ADIF-Import", "Den Lognamen eingeben", "Tab_Log")
 Define i, j, k = 1, i$, j$, k$, str1.s, Query$, Dat$, Rufz$, Band$, Mode$, RSTr$, RSTs$, Name$, QTH$, Loc$, DXCC$, EigRufz$, EETPA$, MP$, ELoc$, Px$, Op$
 OpenFile(0, ADIF$)
 Repeat
   str1 = ReadString(0)
 Until UCase(str1) = "<EOH>"
 While Not Eof(0)
   str1 = ""
   Repeat
     str1 + ReadString(0)
   Until UCase(Right(str1, 5)) = "<EOR>"
   Debug str1
   Repeat
     i = FindString(str1, "<", k)
     j = FindString(str1, ":", i)
     If Not j : Break : EndIf
     k = FindString(str1, ">", j)
     i$ = Mid(str1, i + 1, j - i - 1)
     j$ = Mid(str1, j + 1, k - j - 1)
     k$ = Mid(str1, k + 1, Val(j$))
     Debug i$
     Select UCase(i$)
       Case "QSO_DATE"
         Dat$ = Left(k$, 4) + "-" + Mid(k$, 5, 2) + "-" + Right(k$, 2)
       Case "TIME_OFF"
         UTC$ = k$
       Case "TIME_ON"
         UTC$ = k$
       Case "CALL"
         Rufz$ = k$
       Case "CALLCOMMENT"
         Op$ = k$
       Case "BAND"
         Band$ = Left(k$, Len(k$) - 1)
       Case "MODE"
         Mode$ = k$
         If Left(k$, 3) = "PSK" : Mode$ = "B" + k$ : EndIf
       Case "RST_RCVD"
         RSTr$ = k$
       Case "RST_SENT"
         RSTs$ = k$
       Case "NAME"
         Name$ = k$
       Case "QTH"
         QTH$ = k$
       Case "GRIDSQUARE"
         Loc$ = k$
       Case "DXCC"
         DXCC$ = k$
       Case "APP_Log_DK1IO_EigRufz"
         EigRufz$ = k$
       Case "APP_Log_DK1IO_EETPA"
         EETPA$ = k$
       Case "APP_Log_DK1IO_MP"
         MP$ = k$
       Case "APP_Log_DK1IO_ELoc"
         ELoc$ = k$
       Case "APP_Log_DK1IO_Px"
         Px$ = k$
     EndSelect
   ForEver
   Query$ = "INSERT INTO '" + str$ + "' (Datum, UTC, Rufzeichen, Band, Mode, RSTr, RSTs, Name, QTH, Loc, DXCC, EigRufz, EETPA, MP, ELoc, Px, Op) "
   Query$ + "VALUES('" + Dat$ + "','" + UTC$ + "','" + Rufz$ + "','" + Band$ + "','" + Mode$ + "','"
   Query$ + RSTr$ + "','" + RSTs$ + "','" + Name$ + "','" + QTH$ + "','" + Loc$ + "'," + DXCC$ + ",'" + EigRufz$ + "','" + EETPA$ + "','" + MP$ + "','" + ELoc$ + "','" + Px$ + "','" + Op$ + "')"
   DatabaseUpdate(iDB, Query$)
   k = 1
   Dat$ = "" : UTC$ = "" : Rufz$ = "" : Band$ = "" : Mode$ = "" : RSTr$ = "" : RSTs$ = "" : Name$ = "" : QTH$ = "" : Loc$ = "" : DXCC$ = ""
 Wend

 
Zurück zum Seiteninhalt | Zurück zum Hauptmenü