Kirjoittaja Aihe: ADIF-tiedostot CSV muotoon(Ratkaistu)  (Luettu 4397 kertaa)

Timo Virtanen

  • Käyttäjä
  • Viestejä: 2083
    • Profiili
ADIF-tiedostot CSV muotoon(Ratkaistu)
« : 04.04.08 - klo:22.57 »
Löytyisikö joku bittiritari, joka osaisi tehdä ohjelmanpätkän, jolla radioamatöörien käyttämä ADIF tiedostomuoto kääntyisi CSV muotoon. Saisin Glabel ohjelman tulostamaan radioyhteystiedot tarroille. Tarrat liimaisin QSL-kortteihin. Kortit lähtevät vasta-asemille todisteeksi yhteydestä. Meitä hamsseja on muutama miljoona, joten markkinoita olisi. Tällaista muunto-ohjelman pätkää ei ole vielä tehty, tietääkseni. ADIFista löytyy tietoa netistä googlaamalla ja annan mielelläni lisätietoa. terveisin Timo
« Viimeksi muokattu: 07.04.08 - klo:18.37 kirjoittanut oh7jha »
"Linux, made in Finland"

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #1 : 05.04.08 - klo:00.54 »
Tein jonkinlaisen viritelmän Tcl:n avulla. Ohjelma ottaa ensimmäisenä parametrina tulostettavien kenttien nimet pilkuilla eroteltuna ja toisena parametrina ADIF-tiedoston nimen. Ohjelma tulostaa kentät CSV-muodossa stdout:iin. CSV-tuki on vaillinainen mikä näkyy rikkinäisenä tulostuksena jos kenttien arvot sisältävät erikoistapauksiin kuuluvia merkkejä (lähinnä lainausmerkki).

Ohjelma vaatii toimiakseen Tcl:n.

Ajoesimerkki:
Koodia: [Valitse]
$ ./adif2csv.tcl call,qso_date,time_on,time_off,operator,qslmsg,dxcc trx.adi

Ohjelmalistaus:
Koodia: [Valitse]
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# Compatibility with Tcl 8.4
# http://wiki.tcl.tk/1530
if { [info procs lassign] eq "" } {
    proc lassign {values args} {
        uplevel 1 [list foreach $args [linsert $values end {}] break]
            lrange $values [llength $args] end
    }
}


proc readTags {data} {
    set tags {}
    set pos 0
    while 1 {
        if { [regexp -nocase -start $pos -- \
                {\<([a-z0-9_]+)(?::(\d+)(?::(\w+))?)?\>} $data \
                -> tag len type] } {
            if { $len == "" } { set len 0 }

            set pos [expr { [string first ">" $data $pos] + 1 }]
            set pos2 [expr { $pos + $len - 1}]

            set tag [string tolower $tag]
            set value [string range $data $pos $pos2]

            set pos [expr { $pos2 + 1}]
            lappend tags $tag $value
        } else {
            break
        }
    }

    return $tags
}

proc processFile {fileName fields} {
    set fp [open $fileName]
    set data [read $fp]
    close $fp

    set skipHeader 0
    if { [string index $data 0] != "<" } {
        set skipHeader 1
    }

    array set tags {}
    foreach {tag value} [readTags $data] {
        if { $skipHeader } {
            if { $tag == "eoh" } { set skipHeader 0 }
        }

        set tags($tag) $value

        if { $tag == "eor" } {
            set values {}
            foreach {field} $fields {
                if { [info exists tags($field)] } {
                    regsub -all -- \" $tags($field) {""} value
                    lappend values [format {"%s"} $value]
                } else {
                    lappend values {""}
                }
            }
            puts [join $values ","]
            array unset tags
        }
    }
}


proc main {} {
    global argv0 argv

    if { [llength $argv] != 2 } {
        puts stderr "Usage: $argv0 fieldname(,fieldname,...) filename"
        return 1
    }

    set fields [split [lindex $argv 0] {,}]
    set fileName [lindex $argv 1]

    processFile $fileName $fields
}

main

Edit: Korjattu lainausmerkin käsittely CSV-exportissa.
« Viimeksi muokattu: 07.04.08 - klo:18.11 kirjoittanut mgronber »

Timo Virtanen

  • Käyttäjä
  • Viestejä: 2083
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #2 : 05.04.08 - klo:15.48 »
Hienoa! Miten etenen tästä? Mitkä tcl paketit asennan?. Synapticissa on monta tcl-pakettia. Miten osoitan tai haen ADIF tiedoston muunto-ohjelmaan?  Odotan koekäyttöä malttamattomana.  ;D terveisin Timo
"Linux, made in Finland"

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #3 : 05.04.08 - klo:18.36 »
Hienoa! Miten etenen tästä? Mitkä tcl paketit asennan?. Synapticissa on monta tcl-pakettia.

Riittänee kun asentaa joko paketin tcl8.4 tai tcl8.5 (riippuen siitä mitä paketinhallinnasta löytyy). Jälkimmäinen on tuoreempi ja samalla myös suositeltavampi asennettava mutta tämän skriptin toiminnan kannalta ei ole merkitystä kumman asentaa.

Lainaus
Miten osoitan tai haen ADIF tiedoston muunto-ohjelmaan?

Lähdekoodi oli tuossa aiemmassa viestissäni ja se tarvitsee vain kopioida ja tallentaa johonkin tiedostoon (esim. adif2csv.tcl). Lisäksi tiedostolle pitää antaa ajo-oikeudet ja komentoriviltä tämä onnistuu komennolla "chmod +x adif2csv.tcl" ja tämän jälkeen tiedoston suorittaminen pitäisi onnistua aiemmassa viestissä olleen ajoesimerkin mukaisesti. Esimerkissä oletettiin että hakemistossa on ADIF-tiedosto trx.adi.

Komentorivin perusteita en rupea tässä opettamaan. Mikäli se on vierasta niin kannattaa opiskella sen käyttöä jostakin muualta.

Jokuhan voisi tietysti tehdä tuolle graafisen käyttöliittymän.

Timo Virtanen

  • Käyttäjä
  • Viestejä: 2083
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #4 : 05.04.08 - klo:19.07 »
Jep, komentorivin käyttö opetellaan muualla. Ei muuta kuin testiajoon. Ilmoittelen miten käy ....terveisin Timo
"Linux, made in Finland"

Timo Virtanen

  • Käyttäjä
  • Viestejä: 2083
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #5 : 05.04.08 - klo:20.13 »
ADIF kääntyy CSV:ksi.  ;D  ;D Ohessa esimerkki:

"TM5A","20070909","190908","191041","","","227"
"JW6BKA","20070909","231808","231947","","","259"
"3B7C","20070920","102500","000000","","","4"
"RA9LI","20070920","123400","170423","","","15"
Homma jatkuu... terveisin Timo

"Linux, made in Finland"

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #6 : 05.04.08 - klo:21.23 »
ADIF kääntyy CSV:ksi.  ;D  ;D

Hyvä kuulla.

Timo Virtanen

  • Käyttäjä
  • Viestejä: 2083
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #7 : 05.04.08 - klo:22.57 »
Homma etenee. Adif >> CSV muunnoksen tallensin oh7jha.csv nimellä kotikansioon. Asensin Glabel ohjelman ja tein testitarran. Hain oh7jha.csv tiedoston Glabel ohjelmaan. Otin esikatselun ja siellä oli!!! Nyt ollaan pitkällä.

Ongelma on se, että tarvitsen vain 6 oleellista tietoa tarraa varten. 
<call:5>G7IYA <dxcc:3>223 <cqz:2>14 <cont:2>EU <qso_date:8>19990101 <time_on:6>182500 <time_off:6>182500 <name:5>Brian <qth:8>Radstock <band:3>20M <mode:3>SSB <rst_sent:2>59 <rst_rcvd:2>59 <qsl_sent:1>Y <qsl_sent_via:1>B <qsl_rcvd:1>Y <qsl_rcvd_via:1>B <tx_pwr:6>100,00 <eor>

Tuossa ADIF pätkässä on yhden radioyhteyden tiedot, siitä pitäisi poimia <call> <qso_date> <time_on> <band> <mode> <rst_sent> tarraa varten. Miten tuo onnistuu lähdekoodillasi? terveisin Timo
"Linux, made in Finland"

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #8 : 05.04.08 - klo:23.17 »
Tuossa ADIF pätkässä on yhden radioyhteyden tiedot, siitä pitäisi poimia <call> <qso_date> <time_on> <band> <mode> <rst_sent> tarraa varten. Miten tuo onnistuu lähdekoodillasi? terveisin Timo

Ensimmäisellä parametrilla kerrotaan pilkuilla eroteltuina haluttujen kenttien nimet.

Koodia: [Valitse]
$ ./adif2csv.tcl call,qso_date,time_on,band,mode,rst_sent tiedosto.adif

Timo Virtanen

  • Käyttäjä
  • Viestejä: 2083
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #9 : 05.04.08 - klo:23.31 »
 ;D ;D ;D Nyt ollaan kalkkiviivoilla:
"TM5A","20070909","190908","20M","SSB","59"
"JW6BKA","20070909","231808","20M","SSB","59"
"3B7C","20070920","102500","15M","SSB","59"
terveisin Timo
"Linux, made in Finland"

Timo Virtanen

  • Käyttäjä
  • Viestejä: 2083
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #10 : 06.04.08 - klo:22.13 »
 ;D Toimii! ;D Sain tulostettuaa PDF-tiedostoon haluamani mallin mukaiset tarrat! Näin ei tarvitse tuhlata kalliita tarroja tulostustesteihin. Miten on mgronder, saanko välittää lähdekoodin linux lokiohjelmaa tekevälle kaverille liitettäväksi seuraavaan lokiohjelman versioon? (Googleta "cqrlog"). Siis ei kaupalliseen tarkoitukseen. Olen todella kiitollinen ja on vaikea löytää foorumille sopivia, nasevia ilmauksia, mutta kelpasiko näin alkuun "Kiitos!" terveisin Timo
Voitko ottaa yhteyttä emaililla oh7jha "miukumauku" sral.fi
"Linux, made in Finland"

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: ADIF-tiedostot CSV muotoon
« Vastaus #11 : 06.04.08 - klo:23.38 »
Miten on mgronder, saanko välittää lähdekoodin linux lokiohjelmaa tekevälle kaverille liitettäväksi seuraavaan lokiohjelman versioon? (Googleta "cqrlog").

Ihan vapaasti. Epäilen vain tuon hyödyllisyyttä kun tuo cqrlog on näköjään tehty pascalilla ja minun skriptini on Tcl:ää.

Lainaus
Voitko ottaa yhteyttä emaililla

Lähetin sähköpostia.