2018年8月14日火曜日

JTDXのADIFファイルをハムログCSVファイルにコンバート

最近、FT8の運用時に、ハムログ、JTLinker、JTAlertは起動せず、JTDX のみにしている。 桜時計は最初に起動して時計を合わせたら閉じる。

ハムログ入力は、ADIFファイルをハムログCSVファイルに変換して、ハムログにインポートしている。

現在、QRZ.com,  eQSL, LoTW に送信するADIFファイルは、ハムログの「複合検索と印刷」で、作成して送信し、QSLカードもハムログで印刷している。

CSV変換ソフトは探してみたけどなかったので、GAS script でマクロ自作。

EXCELがなくてもCHROMEブラウザがあれば、QSLデータの変換ができるので超便利。

【お約束】
このマクロを使用して、いかなる損害が出たとしても当局は
一切の責任を負いません。 
※交信成立時にJTDXの交信データを転送する機能がハムログに追加されたので、解説したマクロは不要となりました。(21/05/02追加)

元データと変換データが合致してるか、必ず確認してください。
ハムログにデータをインポートするときは、必ずバックアップをとっておき、
失敗しても,リストアできるようにしておきましょう。
当局の使用環境は、PCのOS:Wondows10 Pro 
Chrome バージョン: 68.0.3440.106(Official Build) (64 ビット) 



スプレッドシートを起動して、「ファイル」「インポート」「ファイルをインポート」で「アップロード」クリック。 

wsjtx_log.adiから作成したテキストファイルをドラッグ&ドロップ。

(wsjtx_log.adi は C:\Users\ユーザー名\AppData\Local\JTDX にある。)

下の画面で「新しいシート挿入する」をチェック、「区切り文字」で「カスタム」をチェック、半角で ">" 不等号のより大きいを入力、「テキストを数値や日付にに変換」で「いいえ」をチェックして、「データをインポート」をクリック。



「ツール」「スクリプトエディタ」「コード.gs」に以下のスクリプトをコピペして実行。

function WsjtxADItoHamlogCSV(){
  /* wsjtx_log.adiをハムログCSVデータに変換すscript。
    wsjtx_log.adiの必要部分でtxtファイルを作成し、
    このシートにアップロードして、実行。
    ダウンロードして、ハムログにインポートする。  */  
var sheet=SpreadsheetApp.getActiveSheet();
   //変数sheetにアクティブシートを得る。 
 sheet.deleteColumns(1);
 sheet.deleteColumns(8,3);
 sheet.deleteColumns(9,2);
   //不要列削除
 sheet.moveColumns(sheet.getRange('F:G'), 2); 
 sheet.moveColumns(sheet.getRange('F:G'), 4); 
 sheet.moveColumns(sheet.getRange('H:H'), 6); 
 sheet.moveColumns(sheet.getRange('H:H'), 7); 
 sheet.moveColumns(sheet.getRange('H:H'), 10); 
  //ハムログのCSVデータ順に列入れ替え  
  
var lastRow=sheet.getLastRow();
   //変数lastRowにデータの最終行を得る。
var cd=sheet.getRange(1,1,lastRow,14).getValues();
   //配列変数cdに1行目1列から最終行14列までのデータ格納。
var ld=sheet.getRange(lastRow+1,1,lastRow,14).getValues();
   //配列変数ldにcdと同数の空データ格納。
sheet.getRange(lastRow+1,3,lastRow,5).setNumberFormat('@');
  //レポートdataが -00形式で表示されるように、書式なしテキストに
var md;  
for (var i=0;i<cd.length;i++ ){
 for (var j=0;j<14;j++ ){  
   cd[i][j] = cd[i][j].split('<', 1);
   // <の左側の文字列のみ得る
   ld[i][j] = cd[i][j].toString().replace(/(^\s+)|(\s+$)/g, "");
   //文字列前後の空白文字削除
    if(j==1){
    md=cd[i][j].toString();
     ld[i][j]=md.substr(2,2)+"/"+md.substr(4,2)+"/"+md.substr(6,2);
   //日付を yy/mm/dd に   
    }else if(j==2){
    md=cd[i][j].toString();
     ld[i][j]=md.substr(0,2)+":"+md.substr(2,2)+"U";
   //時刻を hh:mmU に  
    }else if(j==9){
    ld[i][j]="N";
   //QSL欄の初期値 Jなど適当に変更
   }else if(j==13){
   ld[i][j]="$A=DP$ $P=10$ $R=FT991M$ $H=6$ %TNX QSO CUAGN!%"
   // Remarks2 に入力する文字列 適当に変更
   
   } //if
 } //j

} //i
    sheet.getRange(lastRow+1,1,lastRow,14).setValues(ld);
   //最終行の次の行に変換データ追加     
}  


初めてマクロを実行する場合、承認を求められる。


「続行」をクリックし、次の画面でアカウントを選択。
さらに次の画面左下の「詳細」をクリック。

左下「マクロ名(安全でないページ)に移動」をクリック
次の画面で「許可」をクリックでマクロが実行される。

元データが4行の例

実行すると、元データ最終行の次に変換データが追加される


元データ行を行削除して、「ファイル」「形式を指定してダウンロード」「カンマ区切りの値」でダウンロード。
ハムログを起動して、「オプション」「データ保守」「データのインポート」「CSVファイルから」をチェックして、「開く」ボタンクリック。 DLしたCSVファイルを指定して「開く」をクリック。
一旦閉じるので,ハムログを再起動。 データが追加されている。

このあと、日付順にしたい場合は、「オプション」「データ保守」「日付時間順にソート」でソートしておく。

解説動画を作ったのでアップしときます。





0 件のコメント:

コメントを投稿