ruby ファイル読み込み [raspberrypi]
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 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 $
<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内容
gets_text.rb内容
:::::::::::::::::::::::::::
filename=ARGV[0]
file=open(filename)
while text=file.gets do
print text
end
file.close
:::::::::::::::::::::::::::
gets_text.rbを実行する
:::::::::::::::::::::::::::
gets_text.rbを実行する
ファイル内容を表示できた
ファイルを読み込み特定の文字列(この場合QSO_DATE)がある行のみを表示するrubyプログラム
ファイルを読み込み特定の文字列(この場合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の上の数字は文字の数、確認のためで最終的にはいらない
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に読み込ませることができそうだ。
コメント 0