便利な時代になったなあと実感する今日この頃
googleで”ruby ファイルに出力”で検索すると親切丁寧に教えてくれる


:::::::::::::::::::::::::text_write.rbの内容::::::::::::::::

filename = "20201103.adi"                    #ファイル名固定

pattern = Regexp.new("QSO_DATE")

file=open(filename)

file2=File.open('cqrtohamlog.csv',"w")       # "w":ファイル無いとき新規作成、存 在するとき内容を消去してから書き直す。

while text=file.gets do

    if pattern =~ text

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

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

          callnum = text[41,1].to_i

          callsign = text[43,callnum] + ","   #csvデータにするために,区切りにするため

          file2.print(callsign)               #

        else                            #文字数2桁

          callnum = text[41,2].to_i

          callsign = text[44,callnum] + ","

          file2.print(callsign)

        end

    end

end

file2.print("\n")

file.close
file2.close

:::::::::::::::::::::::::text_write.rbの内容終わり::::::::::::::::

これを実行すると20201103.adiを読み込んでコールサインだけをcqrtohamlog.csvに書き出してくれる。

以下を実行すると20201103.adiを読み込んでhamlogで読み込めるcsvデータを作成できる。ただし問題点がある。

:::::::::::::::::::::::::cqrtohamlog.rbの内容::::::::::::::::


filename = "20201103a.adi"                    #ファイル名固定

# filename = ARGV[0]                         #ファイルを引数で指定する場合

pattern = Regexp.new("QSO_DATE")


file=open(filename)

file2=File.open('cqrtohamlog.csv',"w")       # "w":ファイル無いとき新規作成、存 在するとき消去してから書き直す。

while text=file.gets do                      #ファイルから1行ずつ読み込む

    if pattern =~ text                       #読み込んだデータにQSO_DATEがあるか?

                                             #else文が無いのでQSO_DATEが無い行は破棄される

      #

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

      #:::::ここから "CallSign"

      if text[42,1] == ">"                  #42文字目が>であれば文字数1桁

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

        callnum = text[41,1].to_i

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

        callsign = text[43,callnum] + ","

        file2.print(callsign)

      else                                  #42文字目が数字であれば文字数2桁である

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

        callnum = text[41,2].to_i

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

        callsign = text[44,callnum] + ","

        file2.print(callsign)

      end

      #:::::ここまで"CallSign"

      #:::::ここからdate

      # 先頭から14文字めには年数下2桁, 16文字めには 月2桁 18文字めには 日にち 2桁

      #print text[14,2] + "/" + text[16,2] + + "/" + text[18,2] + "," + "\n"

      comdate = text[14,2] + "/" + text[16,2] + + "/" + text[18,2] + ","

      file2.print(comdate)

      # ::::ここまでdate

      #:::::ここからtime

      #print text[31,2] +  ":" + text[33,2] + "," + "\n" #時間表示

      file2.print(text[31,2] +  ":" + text[33,2] + ",")

      # ::::ここまでtime

      #:::::

      # 〔His〕は、相手に送ったレポートを入れます

      # :::::ここから RST_SENTの文字数

      #p "RST_SENT"

      # text.index("RST_SENT:") 文字列RST_SENTを検索してその先頭からの位置を返す

      #p text.index("RST_SENT:")              # RST_SENT:が記載してある先頭から の位置

      rstrclmn = text.index("RST_SENT:") + 9

      #p text[rstrclmn,1]

      rstrnum = text[rstrclmn,1]             # RST_SENTの文字数

      #p rstrnum

      #p text[rstrclmn+2,rstrnum.to_i]

      rsts = text[rstrclmn+2,rstrnum.to_i]   # RST_SENT

      #p rsts

      file2.print(rsts + "," )

      # :::::ここまで

      # 〔My〕は、相手からいただいたレポートを入れます

      # :::::ここから RST_RCVDの文字数

      #p "RST_RCVD"

      #p text.index("RST_RCVD:")              # RST_RCVD:が記載してある先頭から の位置

      rstrclmn = text.index("RST_RCVD:") + 9

      #p text[rstrclmn,1]

      rstrnum = text[rstrclmn,1]             # RST_RCVDの文字数

      #p rstrnum

      #p text[rstrclmn+2,rstrnum.to_i]

      rstr = text[rstrclmn+2,rstrnum.to_i]   # RST_RCVD

      #p rstr

      file2.print(rstr + "," )

      # :::::ここまで

      # :::::ここから freqの文字数

      #p "周波数"

      #p text.index("FREQ:")                  # freqが記載してある先頭からの位置

      freqclmn = text.index("FREQ:") + 5

      #p text[freqclmn,1]

      freqnum = text[freqclmn,1]             # freqの文字数

      #p freqnum

      #p text[freqclmn+2,freqnum.to_i]

      freq = text[freqclmn+2,freqnum.to_i]   # freq

      #p freq

      file2.print(freq + "," )

      # :::::ここまで

      # :::::ここから modeの文字数

      #p "MODE"

      #p text.index("MODE:")                  # modeが記載してある先頭からの位置

      modeclmn = text.index("MODE:") + 5

      #p text[modeclmn,1]

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

      #p modenum

      #p text[modeclmn+2,modenum.to_i]

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

      #p mode

      file2.print(mode + "," )

# :::::ここまで

# :::::ここから code,GL,QSL,Name,QTH,Rem1,Rem2,は空欄とする DC12には0を入れる?

      file2.print(",,,,,,,0\n")

# :::::ここまで

    end

end

file.close

file2.close


:::::::::::::::::::::::::cqrtohamlog.rbの内容終わり::::::::::::::::