SSブログ

ruby ファイル読み込み [raspberrypi]

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

読み込むファイルの内容

2020-11-11.png

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を実行する
2020-11-11 (2).png
ファイル内容を表示できた

ファイルを読み込み特定の文字列(この場合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を実行する
2020-11-11 (1).png
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 $
2020-11-11 (3).png
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 $
実行してみる
2020-11-11 (4).png
CWとかSSBとかmodeも取り出せた。あとはこれらを組み合わせればcqrlogからadifファイルをエクスポートしてこのプログラムで整形してcsvファイルを作ればhamlogに読み込ませることができそうだ。


nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。