ハムログ SOTA-DB 変換ツール(ruby)
このスクリプトは2年前に公開したものの機能追加版です。Rubyもバージョンが進んで機能もよくなってきたのでバージョン2.6でモードや周波数(バンド)をテーブルで変換する機能を追加し、内部処理もHashからCSVモジュールを使って変更してみました。自分のHamLogデータ用なので、汎用性がありませんし、Actiator用だけの機能しかありませんが、変換テーブルを外付けのテキストファイルにしてありますので各局の運用形態に合わせて変更ができます。まあ、スクリプトなのでいかようにも変更できますが。
SOTA日本支部のHPに掲載されている、WindowsソフトではなくDOSのコマンドプロンプトでの動作なので、一般的で誰でもが使えるようなものではないのですが、SOTAに参加している人でRubyに興味をもっていただければと思い公開します。個人的な興味で作成していますので内容はいまいちです。最近はPythonで記述することが多くなっていますが、たまにはRubyもわすれない程度に触っておかなければ。GUIについては面倒なのでやめました。(2019/01/26)
変更内容
・SOTA-DB登録用のコールサイン,Remarks欄の位置,ハムログ出力のcvsファイル名は、定義ファイルに記述して読みこむ方式に変更。 運用上、この指定情報はほとんど変わらないため
・SOTA-DB登録で使うモードとハムログで投入するモードが違う場合があるようなので、変換テーブルで変換する方式とした。変換テーブルはテキストファイルなので、各局が運用に合わせて追加、修正が可能。
・SOTA-DB登録で使用するバンド(周波数)とハムログに投入している周波数が細部まで入力している場合に、JARL制定のバンドプランの周波数範囲に合わせて変換するように変換テーブルで変換する方式とした。変換テーブルはテキストファイルなので修正可能。
ファイル構成図
A)定義ファイルの内容 Config.txt
構成
SOTA-DB登録用コールサイン,Remarks欄位置,ハムログCSVファイル名(入力ファイル
内容
先頭行はHeaderです。削除しないこと
Mycall,RmksPoint,HamlogFileName 8J1JRL,2,Loglist.csv |
B)モード変換テーブルの内容 mod_tbl.txt
構成
ハムログ上のモード,SOTA-DBでのモード
内容
先頭行はHeaderです。削除しないこと
Hamlog_mode,SOTA_mode AM,AM SSB,SSB CW,CW FM,FM ATV,Data FAX,Data SSTV,Data RTTY,Data RTY,Data PSK,Data PSK31,Data PSK-31,Data DIG,Data DATA,Data PSK63,Data JT9,Data JT65,Data FT8,Data FSQ,Data DV,DV FUSION,DV DSTAR,DV D-STAR,DV DMR,DV C4FM,DV |
C)バンド変換テーブルの内容 frq_tbl.txt
構成
SOTA-DBでのバンド名,開始周波数,終了周波数
内容
先頭行はHeaderです。削除しないこと
SOTA-BAND,start-frq,end-frq 1.8,1.810,1.9125 3.5,3.5,3.687 7,7.0,7.2 10,10.1,10.15 14,14.0,14.35 18,18.068,18.168 21,21.0,21.450 24,24.890,24.990 28,28.0,29.70 50,50.0,54.0 144,144.0,146.0 433,430.0,440.0 1240,1200,1300 2.3G,2400,2450 5.6G,5650,5850 |
*変換テーブルの内容については、SOTA日本支部のHOTACAの説明文を参考にしました。
D)実行例
ハムログから出力した下記(ダミーです)のファイルを一括で読むと
8J1ABC,19/01/05,10:28J,59,59,1.82,CW,,,J,東村,小平市,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32 8J1DEF/1,19/01/05,10:33J,59,59,50,AM,,,J,木村,つくば市 丸山移動,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32 8J2ABC,19/01/05,10:37J,59,59,50,SSB,,,J,鈴木,足立区,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32 8J2DEF/1,19/01/05,10:44J,59,59,50,RTTY,,,J,小高,神奈川県中郡大磯町移動,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32 8J3ABC,19/01/05,10:46J,59,59,433.82,C4FM,,,J,松木,千葉市,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32 8J3IHC,19/01/07,09:52J,59,59,50,SSB,,,J,佐々木,東京都小平,,HOME,32 8J3SFR,19/01/14,09:55J,59,59,50,A1,,,J,和田,荒川区,”FT-817+2.5mH SKYDOOR”,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J5CXT,19/01/14,09:59J,59,59,50.200,SSB,,,J,矢代,成田市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J0QOP/1,19/01/14,10:03J,59,59,50,SSB,,,J,神田,船橋市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J1TFL,19/01/14,10:05J,51,51,50,CW,,,J,大須,茅ヶ崎市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J1UJG,19/01/14,10:10J,59,59,50,RTTY,,,J,北,鎌倉市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8H1UJA,19/01/14,10:11J,59,59,50,SSB,,,J,山崎,川崎市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J5FDB,19/01/14,10:14J,59,59,50,FT8,,,J,安西,栃木市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J8QXS,19/01/14,10:17J,59,59,50,SSB,,,J,須藤,銚子市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J9DBJ,19/01/14,10:20J,59,59,50,C4FM,,,J,志田,鎌倉市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J3HHW,19/01/14,10:22J,59,59,50,SSB,,,J,崎山,藤沢市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J7WSU,19/01/14,10:24J,59,59,50,DSTAR,,,J,伊藤,東京都中野区,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J9TKK,19/01/14,10:28J,59,59,50,SSB,,,J,久保田,鎌ヶ谷市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J5AYT,19/01/14,10:29J,59,59,50,SSB,,,J,大久保,木更津市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J4RXX,19/01/14,10:31J,59,59,50.622,AM,,,J,奥田,印西市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J0OUR,19/01/14,10:35J,59,59,50,SSB,,,J,今坂,東京都千代田区,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J1VIJ,19/01/14,10:45J,59,59,50,SSB,,,J,乾,行田市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8H5EDM,19/01/14,10:46J,59,59,1260,SSB,,,J,南風,柏市,”No QSL”,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8K1GJY/1,19/01/14,10:49J,59,59,432.86,SSB,,,J,川田,相模原市緑区,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J31VHS,19/01/14,10:55J,59,59,144.205,SSB,,,J,川上,熊谷市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32 8J9HXA,19/01/18,10:22J,58,59,430,FM,,,J,安藤,鴨川市,”RH-770 C520″,鴨川市 高鶴山(326m) ,32 8J9GRK,19/01/21,10:20J,59,59,7.120,SSB,,,J,上田,相模原市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 8J5AGK,19/01/21,10:24J,59,59,3.512,CW,,,J,杉,厚木市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 8J4SBM/1,19/01/21,10:28J,59,59,14.12,SSB,,,J,上岡,茨城県稲敷郡河内町,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 8J2XXC/1,19/01/21,10:31J,56,58,10.12,CW,,,J,川上,相模原市緑区,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 8J7FBD/1,19/01/21,10:38J,59,59,14.15,SSB,,,J,香取,霞ヶ浦市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 8J9PXD,19/01/21,10:46J,59,59,21.211,SSB,,,J,小林,かとり市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 8J8TUG,19/01/21,10:52J,59,59,24.891,SSB,,,J,上戸,常総市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 8J6AIG,19/01/21,10:55J,59,59,28.51,SSB,,,J,佐々木,佐野市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 8J5VMM,19/01/21,10:59J,59,59,50.205,SSB,,,J,中村,日立市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48 |
下記のファイルが「sotacsv」フォルダ内に作成されます。ファイル名は運用日(UTC)と運用場所で構成されます。
読み込んだファイルの中にあるSOTA運用以外のデータは無視されます。モードとバンドはテーブルにより変換されます。
ファイル名:2019_01_05_JA_IB-010.CSV
V2,8J1JRL/1,JA/IB-010,05/01/19,0128,1.8MHz,CW,8J1ABC V2,8J1JRL/1,JA/IB-010,05/01/19,0133,50MHz,AM,8J1DEF/1 V2,8J1JRL/1,JA/IB-010,05/01/19,0137,50MHz,SSB,8J2ABC V2,8J1JRL/1,JA/IB-010,05/01/19,0144,50MHz,Data,8J2DEF/1 V2,8J1JRL/1,JA/IB-010,05/01/19,0146,433MHz,DV,8J3ABC |
ファイル名:2019_01_14_JA_IB-003.CSV
V2,8J1JRL/1,JA/IB-003,14/01/19,0055,50MHz,Other,8J3SFR V2,8J1JRL/1,JA/IB-003,14/01/19,0059,50MHz,SSB,8J5CXT V2,8J1JRL/1,JA/IB-003,14/01/19,0103,50MHz,SSB,8J0QOP/1 V2,8J1JRL/1,JA/IB-003,14/01/19,0105,50MHz,CW,8J1TFL V2,8J1JRL/1,JA/IB-003,14/01/19,0110,50MHz,Data,8J1UJG V2,8J1JRL/1,JA/IB-003,14/01/19,0111,50MHz,SSB,8H1UJA V2,8J1JRL/1,JA/IB-003,14/01/19,0114,50MHz,Data,8J5FDB V2,8J1JRL/1,JA/IB-003,14/01/19,0117,50MHz,SSB,8J8QXS V2,8J1JRL/1,JA/IB-003,14/01/19,0120,50MHz,DV,8J9DBJ V2,8J1JRL/1,JA/IB-003,14/01/19,0122,50MHz,SSB,8J3HHW V2,8J1JRL/1,JA/IB-003,14/01/19,0124,50MHz,DV,8J7WSU V2,8J1JRL/1,JA/IB-003,14/01/19,0128,50MHz,SSB,8J9TKK V2,8J1JRL/1,JA/IB-003,14/01/19,0129,50MHz,SSB,8J5AYT V2,8J1JRL/1,JA/IB-003,14/01/19,0131,50MHz,AM,8J4RXX V2,8J1JRL/1,JA/IB-003,14/01/19,0135,50MHz,SSB,8J0OUR V2,8J1JRL/1,JA/IB-003,14/01/19,0145,50MHz,SSB,8J1VIJ V2,8J1JRL/1,JA/IB-003,14/01/19,0146,1240MHz,SSB,8H5EDM V2,8J1JRL/1,JA/IB-003,14/01/19,0149,433MHz,SSB,8K1GJY/1 V2,8J1JRL/1,JA/IB-003,14/01/19,0155,144MHz,SSB,8J31VHS |
ファイル名:2019_01_21_JA_IB-022.CSV
V2,8J1JRL/1,JA/IB-022,21/01/19,0120,7MHz,SSB,8J9GRK V2,8J1JRL/1,JA/IB-022,21/01/19,0124,3.5MHz,CW,8J5AGK V2,8J1JRL/1,JA/IB-022,21/01/19,0128,14MHz,SSB,8J4SBM/1 V2,8J1JRL/1,JA/IB-022,21/01/19,0131,10MHz,CW,8J2XXC/1 V2,8J1JRL/1,JA/IB-022,21/01/19,0138,14MHz,SSB,8J7FBD/1 V2,8J1JRL/1,JA/IB-022,21/01/19,0146,21MHz,SSB,8J9PXD V2,8J1JRL/1,JA/IB-022,21/01/19,0152,24MHz,SSB,8J8TUG V2,8J1JRL/1,JA/IB-022,21/01/19,0155,28MHz,SSB,8J6AIG V2,8J1JRL/1,JA/IB-022,21/01/19,0159,50MHz,SSB,8J5VMM |
添付しているスクリプトは、公開するようなものではないのですが、参考のために公開しますが内容は、Rubyの初心者レベルです。
ver2.2 添付したファイル
◆sota.rb Rubyのスクリプトファイル (テキスト形式)
◆config.txt コールサイン,Remarksへの投入位置,ハムログのCSVファイル名
◆regions_code.csv 県名,支部コードとリージョンコード,エリア数値の対応表
◆mod_tbl.txt モード,ハムログ投入モードの対応表
◆frq_tbl.txt バンド,周波数範囲(開始,終了)の対応表
ver1.0 添付したファイル内容
◆sota.rb Rubyのスクリプトファイル (テキスト形式)
◆regions_code.CSV 県名,支部コードとリージョンコード,数値の対応表
◆Hamlogo変換説明書.pdf 簡単な説明と実行例
・2019/08/07 cfg/regions_code.csv 岩手県データの区切り符号の誤りを修正
・Ver2.2 (2019年1月26日)HashからCSV.Tableに変更
・Ver2.1 (2019年1月24日)ver1.0よりPython版に合わせて下記の点を変更しました。
ruby(2.6)、Windows10で確認しました。
ver1.0 (2016年1月)
ソースファイル(スクリプト)にSOTAID(コールサイン)を埋め込んでいるので、その後の手間はかかりませんが、ツールの位置づけレベルです。GUIなし、例外処理もしていません。
ハムログのRemaksに記述されている情報からSOTAのデータを自動判断
- したがって読み込ませるデータにSOTA以外のデータがあってもOK、まとめて複数の移動ファイル作成に対応
- SOTAにアップロードするデータのIDの移動地/nはRemarksから自動作成
- JSTからUTCに自動変換して、ファイルは自動的に日付を分離して作成する
- 作成されるSOTAアップロード用ファイル名は、リージョンコード、日付をつけて自動作成(同時に複数作成可能)
- 作成するCSVファイルのデータは、時間でソートして、結果を外部ファイルを起動して確認、修正が可能。(時間でソートしていないとSOTA-DBにアップロード時点に確認メッセージが表示される)
このスクリプトの動作により不具合が発生しても一切の責任は当方にはありません。本スクリプトの著作権は、little-ctc.comが所有しますが、改造は自由に行ってください。
なお、外部読み込みファイ(regions_code.CSV)を構成する、SOTAのリージョンコードの権利は、SOTA日本支部に帰属します。