Gegeben:

Rohdaten aus Logbuch Export im ADI-Format aus MSHV 2.41

Gesucht:

Eine Möglichkeit zur Auswertung und weiteren Verarbeitung der Logdatei in Excel 2016. Das sollte auch in einer O365-Umgebung funktionieren.

Gefunden:

Damit mir die Zeilen nicht irgendwann einmal abhanden kommen, schreibe ich sie mir hier nieder.

Sub Import_adi()
    Dim j, k, length  As Long
    Dim varName As Variant
    Dim arLines() As String
    Dim Line As Variant
    Dim column As Variant
    Dim arColumns As Variant
    
    ' suppress screen activities during import
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
            
    ' Open File
    varName = Application.GetOpenFilename("ADIF-Dateien (*.adi),*.adi,Alle Dateien, *.*")
    If varName = False Then Exit Sub
    
    ' ADIF has no CRLF, only LF,
    ' so split the file data to lines and put them into an array
    arLines = Split(ReadFile(varName), Chr(10))
    
    
    ' Exported columns from MSHV 2.41 in ADIF Version 3.1.0
    ' Non-standard fields: "APP_N1MM_EXCHANGE1", "ARRL_SECT", "APP_N1MM_RUN1RUN2"
    arColumns = Array("STATION_CALLSIGN", "MY_GRIDSQUARE", "CALL", "GRIDSQUARE", "MODE", "RST_SENT", "RST_RCVD", "QSO_DATE", "TIME_ON", "QSO_DATE_OFF", "TIME_OFF", "BAND", "FREQ", "PROP_MODE", "COMMENT", "SRX", "STX", "APP_N1MM_EXCHANGE1", "ARRL_SECT", "APP_N1MM_RUN1RUN2")
    
  
    ' define head line
    For k = 0 To UBound(arColumns)
        Cells(1, k + 1).Value = arColumns(k)
    Next
    
    ' start import at line j (1 = title line)
    j = 2
    
    ' go through each line of the file
    For Each Line In arLines
        ' only lines containing <EOR> seem to be a valid line for QSO logging, others to ignore
        If InStr(Line, "<EOR>") Then
            k = 1
            ' now check data to be imported depending on the given length
            For Each column In arColumns
                Line = Mid(Line, InStr(Line, "<" + column + ":") + Len(column) + 2)
                length = Val(Line)
                Cells(j, k).Value = Mid(Line, IIf(length > 9, 4, 3), length)
                k = k + 1
            Next
            j = j + 1
        End If
    Next
    
    ' set Autofilter
    Range("A1:U1").AutoFilter
    
    ' set Autofit
    Range("A:U").columns.AutoFit
    
    ' set FreezePane
    ActiveWindow.FreezePanes = False
    Application.Goto ActiveSheet.Cells(1, 1)
    With ActiveWindow
        .SplitColumn = 2
        .SplitRow = 1
        .FreezePanes = True
    End With

End Sub

' standard function for reading a file
' thanks to the internet
Public Function ReadFile(ByVal strFileName As String) As String
    Dim intHandle As Integer
    intHandle = FreeFile
    Open strFileName For Input As #intHandle
    ReadFile = Input(LOF(intHandle), #intHandle)
    Close #intHandle
End Function

Die Liste der Spalten kann leicht an andere Umgebungen angepasst werden. Die Beschreibung des ADI-Formats ist ausführlich erklärt und bei https://adif.org erhältlich.

 

ISM Funksensoren mit RTL-Stick und rtl_433 auslesen
Taupunkt berechnen

Diskussion

  • Kommentatoren-Avatar
    Holger — 02.02.2021 13:28 um 13:28

    Mit welcher Visual Basic version wurde das Programm verfasst?

  • Kommentatoren-Avatar
    Arthur — 23.06.2021 11:20 um 11:20

    Ich habe das Skript in Office 365 mit unterschiedlichen ADIF Dateien ausprobiert und es funktioniert leider überhaupt nicht. Es werden zwar schöne Überschriften angelegt, aber die Daten werden entweder gar nicht oder falsch in die Tabelle geschrieben. Ich vermute mal, dass das Skript eine ADIF Datei nur mit ganz bestimmten Daten erwartet. Da aber viele Programme mal mehr und mal weniger Daten in die Datei schreiben, klappt das dann irgendwie nicht. Ich bin kein VBA Experte, aber vermutlich wäre es einfacher, zunächst die erste ADIF Zeile zu lesen und daraus die Überschriften und Felder zu generieren und zu konfigurieren. Dann nochmal beim ersten Satz starten und die Daten befüllen.

    • Kommentatoren-Avatar
      admin — 24.06.2021 08:33 um 08:33

      Hi Arthur,
      das obige Skript ist bezogen auf die ADIF-Ausgabe aus dem Programm MSHV 2.41. Deshalb kann ich deinen Einwand nicht nachvollziehen.
      Jedes Logbuch Programm hat andere Dateistrukturen. Das Skript ist in der Zeile 24 (arColumns) anpassbar.
      Am besten schaust du dir die Struktur der ADIF-Datei an und änderst die Felder in Zeile 24 entsprechend.
      Falls jemand Interesse daran hat deinem Vorschlag zu folgen und das Skript anpassen möchte, so kann er/sie das gerne tun.

      Im Namen des Hamspirit erhebe ich keinen Anspruch auf geistiges Eigentum. So ist das Skript weltweit nutzbar. Änderungen aber werde ich selbst nicht mehr daran durchführen.
      Danke für Deine Info!
      73 Carsten

    • Kommentatoren-Avatar
      Jürgen — 21.07.2021 15:23 um 15:23

      Hallo,

      ich habe auch erst eine weile gebraucht. Dazu habe ich adif2Excel2Adif.xls verwendet, die es damals noch zum Download gab. Die Uhrzeit muss als Text mit “.” eingegeben werden – “7.15”. Dann muss man die erste Zeile in dem Programm auf der Startseite der der eigenen Datei anpassen. So kannst Du NR TIME CALL RS-SEND NUM usw. angeben und das Programm macht es dann ordentlich. Die Tabelle zum Umwandeln muss natürlich in das Programm auf der Seite 2 eingefügt werden und grau unterlegt sein. Zusatztexte diverser Art gehen nicht. So hatte ich meine Daten und den Contestnamen mit angegeben, keine Übersetzung. Dafür ist wohl adif auch nicht gedacht. Es wäre schön, wenn der Initiator das Programm-die Exceltabelle wieder zum Download einstellt und eine bessere Anleitung verfasst. Das Grundproblem ist nicht die Software, sondern die Anleitung dazu. Geprüft habe ich bisher nur Excel zu Adif.
      Solltest Du an der Software interessiert sein und sie wird hier nicht eingestellt – unter qrz.com findest Du bei DE1JST meine Mail.

      vy 73 Jürgen

Kommentar hinterlassen

Your email address will not be published. Required fields are marked *

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.