20201103.adiというファイルを読み込みモニタに表示するプログラム

読み込むファイルの内容


pi@raspberrypi3:~/src $ cat 20201103.adi
ADIF export from CQRLOG for Linux version 2.4.0 (001)
Copyright (C) 2020 by Petr, OK7AN and Martin, OK1RR
Internet: http://www.cqrlog.com

<ADIF_VER:5>2.2.1
<PROGRAMID:6>CQRLOG
<PROGRAMVERSION:11>2.4.0 (001)
<EOH>
<QSO_DATE:8>20201103<TIME_ON:4>0555<CALL:10>JG1XDE/777<MODE:2>CW<FREQ:5>7.02
<BAND:3>40M<RST_SENT:3>599<RST_RCVD:3>598
<QSO_DATE:8>20201104<TIME_ON:4>0655<CALL:6>JG1XDE<MODE:2>CW<FREQ:5>7.025<BAND:3>40M<RST_SENT:3>499<RST_RCVD:3>598
<EOR>
pi@raspberrypi3:~/src $



ファイルを読み込み表示するrubyプログラム
gets_text.rb内容

:::::::::::::::::::::::::::

filename=ARGV[0]

file=open(filename)

while text=file.gets do

    print text

end

file.close
:::::::::::::::::::::::::::
gets_text.rbを実行する


ファイル内容を表示できた

ファイルを読み込み特定の文字列(この場合QSO_DATE)がある行のみを表示するrubyプログラム

gets_text3.rb

filename=ARGV[0]

pattern=Regexp.new("QSO_DATE")


file=open(filename)

while text=file.gets do

    if pattern =~ text

        print text

    end    

end

file.close


::::::::::::::::::

gets_text3.rbを実行する

10行あった元データから2行のみ表示できた


固定長のデータでできているので先頭からの場所が決まっているデータを取り出すプログラム

pi@raspberrypi3:~/src $ cat gets_callsign.rb

filename="20201103.adi"

pattern=Regexp.new("QSO_DATE")

file=open(filename)

while text=file.gets do

    if pattern =~ text

        # adifファイルの先頭から41文字にはコールサインの文字数が書かれている42文字目が>であれば1桁である

        if text[42,1] == ">"           #文字数1桁

          print text[41,1] + "\n"

          callnum = text[41,1].to_i

          print text[43,callnum] + "\n"

        else

          print text[41,2] + "\n"

          callnum = text[41,2].to_i

          print text[44,callnum] + "\n"

        end

    end

end

file.closepi@raspberrypi3:~/src $

callsignだけ取り出すことができた。ちなみにcallsignの上の数字は文字の数、確認のためで最終的にはいらない

コールサインの文字数が変化するので周波数とかモードは先頭から何文字目と決め打ちできないので検索してからデータを取り出すプログラム(読み込むファイル名決め打ちにした)

pi@raspberrypi3:~/src $ cat gets_mode.rb

filename="20201103.adi"

pattern=Regexp.new("QSO_DATE")


file=open(filename)

while text=file.gets do

    if pattern =~ text

                p text.index("MODE:")                  # mode:がかかれている位置           

                modeclmn = text.index("MODE:") + 5     # modeの文字数がががれている位置

                modenum = text[modeclmn,1]             # modeの文字数

                mode = text[modeclmn+2,modenum.to_i]   # mode種別 CW SSB FT8等

                print mode + "\n"

    end

end

file.closepi@raspberrypi3:~/src $

実行してみる

CWとかSSBとかmodeも取り出せた。あとはこれらを組み合わせればcqrlogからadifファイルをエクスポートしてこのプログラムで整形してcsvファイルを作ればhamlogに読み込ませることができそうだ。