Une base de données (SGBD) pour suivre ses Qsos ?

 

Les logiciels avec lesquels on réalise des liaisons en numérique permettent tous d’enregistrer celles-ci  sur un fichier log, certains sont pourvus de fonctions pour alimenter directement ou en différé son carnet de trafic.

Ces carnets de trafic ou Log_book permettent d’effectuer des interrogations comme :  Quels sont les pays et quand   ai-je fait ces contacts en FT8 ou FT4 ?

Tous les Oms ne disposent pas forcément d’un Log_book informatisé résidant sur une base de données (Data Base) comme Microsoft Access , MySql, SQLite, Oracle, MariaDB … qui permettent (entre autre) d’effectuer sur les tables des interrogations ou requêtes.

Un classeur type Excel ou Open office Calc (sous Windows ou Linux) peut contenir une grande partie d’informations, par contre il n’est pas possible d’effectuer des interrogations complexes sur ces tableaux.

Pour mémoire la DB Microsoft Access permet d’effectuer directement des mises à jour et des interrogations sur les tables grâce à l’interface graphique, de plus une fonction d‘ajout de data en masse (Mass-Update) depuis un fichier Excel  est disponible.

Mon carnet de trafic à la station depuis 2003, réside sur une Base Microsoft Access, depuis 2017 une autre base permet de gérer les Qsos numériques.  

 

-Objectif

Pourquoi tout ce qui suit et ces développements ?

   A la suite d’une discussion avec un ami Om qui avait un carnet de trafic « Calc » pour les QSOs  numériques, désirait savoir : avec qui et quand j’ai fait tel type de contact  ?

L’idée est lancée de pouvoir obtenir ce type d’informations à l’aide de logiciels libres.

Logiciels qui peuvent répondre aux critères « Libre » et « multi plateforme »

-Open office avec Calc et DBase

-MySql ou un équivalent comme SQLite.

-Un outil de programmation (VBA n’étant dispo qu’avec les produits Microsoft) il fallait envisager un autre outil, pas trop complexe et bien documenté en exemples, il s’agit de Python.

 

-Préparation des données.

 

 Comment préparer les données à copier dans une  table « Mes_qso »

 

Solution 1 : un développement en Python 

Non décrit dans ce document (trop volumineux)

 

Solution 2 : utilisation d’un tableur en l’occurrence Open Office.   Voir  #Note01

Désolé pour les explications, mais tout le monde n’est pas familier avec l’utilisation d’un tableur.

Les données à utiliser se trouvent (sous Windows) dans le dossier /User/AppData/Local/ Wsjtx /wsjtx.log  (souvent caché)  Attention    il y a eu des évolutions  Voir   Wsjtx_format_data

Le fichier wsjtx_log.adi contient aussi les informations (plus compliqué à utiliser avec un tableur).

 

 Convertir en tableau le fichier texte « wsjtx.log »  (ou seulement la partie à intégrer à la table).

Eviter de travailler sur l’original.

 1  Insérer des données

 2  A partir d’un fichier

 

 

3   Fenêtre proposant l’ajout à partir d’un fichier

4   Faire le choix de son fichier In (peut être une copie, c’est plus prudent, ou une sélection).

 

 

 

5  Pour l’importation conserver la ligne 1 qui permettra d’identifier les différents champs, au besoin ajouter au préalable cette ligne nommant les champs, pour ma part cet entête est intégré au fichier log.

 Cette ligne  1 en-tête n’est pas présente à l’origine (ce n’est qu’une liste d’étiquettes utiles pour ces manipulations).

6  Utiliser la virgule comme séparateur (c’est celui utilisé dans le fichier log)

 

 

Insérer la feuille (avant la feuille active)

Après le OK la feuille de calcul s’ouvre.

Attention         Attention            Attention

Trier sur la colonne fréquence (si nécessaire à la suite à de nombreux changement de bandes)

Attention cette extension du tri sur l’ensemble ne supporte aucune ligne « raw » vide ni aucune colonne « column » vide, il s’ensuit un véritable mélange dans les données.

 

Effectuer un tri sur la colonne « Freq »

 

 

Ajouter une colonne.

 

7  Insertion

8  Colonnes

 

 

Une colonne est insérée devant la colonne « Freq » la nommer « Band ».

Puis sur la première ligne d’une fréquence pour chaque groupe remplir la valeur bande, copier cette cellule dans le PP (Ctrl/c),  puis par coller (Ctrl/v),  répercuter cette valeur de bande à toutes les lignes correspondantes à la bande, faire la même chose pour chaque tranche de fréquence.

 

 

 Refaire le tri sur la colonne « Qso_Date » pour remettre en ordre chronologique les Qsos, il se peut que les heures soient en désordre (ce n’est pas important).

 

Une clé est nécessaire pour l’intégration vers une DB, c’est l’objectif.

Insérer une colonne devant « Qso_Date » (colonne numérique)

Dans la cellule A2 entrez le numéro de reprise dans la DB (en l’occurrence dans l’exemple ‘1’)

Clic sur la cellule A3 puis clic sur cellule A2,  puis taper +1 ensuite  « Enter », la cellule A3 prend la valeur ‘2’

 

 

Copier cette cellule dans le PP puis effectuer un coller jusqu’à la dernière ligne.

Insérer une nouvelle colonne devant la colonne ID

Copier le contenu complet de la colonne ID dans celle qui la précède, puis supprimer la colonne ID d’origine (objectif obtenir les valeurs réelles et non les A2+1  A3+1 …)

 

 

Cette feuille nécessite encore un aménagement, la colonne « Id » toujours elle, sera considérée comme du texte, il est préférable de lui fournir une longueur fixe, donc afficher les zéros à gauche.

 

 

Après la manip

 

 

 La feuille est prête, elle contient les Qsos à charger vers la DB, sauvegarder en « .csv »,  pour  séparer chaque champ utiliser la virgule « , ».

Dans le fichier .csv supprimer ou ne pas supprimer la ligne en-tête ?  tout est fonction de la solution retenue pour traiter ce fichier « csv ».

 

Tout ce travail effectué sur la feuille ne doit pas être perdu, la feuille ainsi constituée doit être conservée, elle peut être mise à jour (qsl reçues et/ou envoyées si les colonnes sont prévues sur la feuille, il est très aisé par la suite de rajouter de nouveaux Qso en fusionnant 2 feuilles (avant de les sauver en .csv).

 

Note01  :  toutes ces manipulations décrites pour Open Office fonctionnent fort bien avec Excel de Microsoft, en réalité j’ai décrit  ma  macro VBA qui fait la même chose sous Excel. voir   Wsjtx_convert_log

 

 

 

Chapitre Sqlite

 

Avertissement ce chapitre peut s’adresser à des débutants mais aussi à des curieux…

Après avoir aboutit sur ce projet,  en utilisant MySql comme SGDB,  j’ai réalisé la même chose avec Sqlite comme SGDB.

Pourquoi ?

MySql étant assez lourd, Client/Serveur , identification à chaque étape, développement en Python pour la mise en forme des datas …),  pour ce genre d’application locale, envisager une autre solution était souhaitable (Muti plateforme et libre).

La Base de données Sqlite est nettement  plus facile à mettre en œuvre et à gérer.

 

-Installation sous Windows 10

Download de sqlite-tools-win32-x89____.zip    et de    sqlite-dll-win64x64____.zip

Décompression et installation

 

-Mettre sur le bureau un raccourci de sqlite3.exe

 

 

 Cet écran permet de dialoguer avec le logiciel  (shell)

Dans un premier temps il est bon d’avoir jeté un œil sur une documentation, voir par exemple https://www.sqlite.org/cli.html

 

- Créer

Création de la base (sur disque) à noter, il est possible de travailler uniquement en mémoire (bien pratique pour débuter)

A la suite du prompte  sqlite>    fournir le nom du fichier (il sera créé si absent)

Exemple   sqlite> .open c:/temp/log_book.db  (noter le « . » devant open et pas d’espace entre « > » et le point).

La base log_book.db est créée (vide) dans le dossier c:/temp

 

-Charger

Le fichier qui permet de créer la table (Mes_qso) est le fichier « .csv »  issu   précédemment à partir de la feuille  Calc obtenue ci-dessus.   

Laisser l’en-tête, et s’assurer que tous les champs sont séparés par une virgule, si ce n’était pas le cas, un remplacement par Notepad est possible.

Passer en mode csv  taper « .mode csv » (cela indique au système qu’il va traiter un fichier de type  csv)

Puis «.import c:/temp/Carnet_Log_FT8.csv  Mes_qso »  ce qui signifie importer depuis le fichier c:/temp/carnet_log_ft8.csv  vers la table « Mes_qso » dans la DB « log_book.db » en créant la structure de cette table (se base sur l’en-tête).

 

-Vérifier

Passer en mode box  « .mod box »    les tableaux sont plus faciles à lire dans ce mode.

Contrôler la structure de cette table, passer la commande SQL pragma table_info('Mes_qso');

Pas de «. »  et commande terminée par « ; » c’est du SQL.

 

Ci-dessus le résultat de la création de la table

On remarque que tous les champs sont de type texte, mais pour le besoin (recherche et classement à l’intérieur de cette table ce n’est pas gênant).

 

-Utiliser

Il ne reste plus qu’à vérifier le contenu, une requête SQL est suffisante.

Toujours en format tableau  «.mod box »

Quelques exemples de requêtes SQL (à passer après un copier/coller de la ligne)

select Call, Qso_date,Band,Mode from Mes_qso order by Call COLLATE NOCASE, Qso_date;

select Call, Qso_date,Band,Mode, Country from Mes_qso order by Call COLLATE NOCASE, Qso_date;

select Id, Call, Qso_date, Band, Mode, Country from mes_qso where call  like ‘3b%’;

select Id, Call, Qso_date, Band, Mode, Country from mes_qso order by id;

select Id, Call, Qso_date, Band, Mode, Country from mes_qso order by Mode, Country;

select Id, Call, Qso_date, Band, Mode, Country from mes_qso order by Qso_Date,Time_on;

 

 

La requête effectuée correspond au second exemple, « collate nocase » permet de ne faire aucune différence entre majuscule et minuscule, certains indicatifs « call » avait été entré en minuscule, la fonction de tri aurait fait une différence.

 

-Conserver

Après s’être assuré que la table est correcte, la sauvegarder.

.save file        la table jusqu’ici en mémoire est écrite sur le disque.

 

-Réutiliser

Après un arrêt système,  pour réutiliser cette table relancer Sqlite3

puis .open  du fichier .db

mode tableau .mod box

les  requêtes peuvent à nouveau être passées.

 

-Ajout de datas

Pour ne pas s’embêter avec un ajout sur la table, (la fonction existe, un développement est nécessaire)  il est préférable de la supprimer puis de recharger (après  ajout  d’enregistrements au fichier .csv, via le tableur)

Supprimer une table la commande Sql :      drop table Mes_qso ;

Supprimer la base delete du fichier .db  et on recommence …

La solution est très simple et très rapide à mettre en œuvre. Le fichier csv issu du tableur est la pièce maitresse c’est cette partie qui reste la plus dure à réaliser (penser aussi à sécuriser la feuille Calc).

 

-Conclusion

L’utilisation qui est faite de cette DB  est très limitée,  on pourrait  envisager  d’effectuer des mises à jour, gérer la réception et l’envoi de qsl par exemple , mais tout cela nécessite des développements, l’objectif n’étant pas de réaliser un carnet de trafic mais seulement un outil d’interrogation  très simple à mettre en œuvre et d’une utilisation aisée, but atteint ….

 

Pierre Schuster     F5BQV                                                            le 5 décembre 2021

 

 

Retour accueil  http://f5bqv.fr