Forum Liberty Basic France

Débutant » Tables et relations en Just/Liberty Basic tests de faisabilité d'une base de données
Le 07/06/2017 à 19h28

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Reprise du message précédent

Oki,

Citation:
Le blème, c'est pour créer des textbox à la demande


je ne saisis pas trop ce que tu entend par "à chaque modif de code il faut recompiler" : à vue de nez ça semble automatique, tu modifie le code donc tu es obligé de recompiler... voulais-tu dire "redéfinir la fenêtre et donc ses textbox quand il en faut un nombre différent de l'actuel affichage" ?
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 07/06/2017 à 20h05

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Citation:
voulais-tu dire "redéfinir la fenêtre et donc ses textbox quand il en faut un nombre différent de l'actuel affichage" ?

Exactement; et le problème se résous en prévoyant du rabe de textbox
Perso je suis limité par l'écran, il faudrait que je change de poste et ça ne me tente pas vu que je suis très bien avec le mini-pc.
Mais on peut faire plusieurs fenêtres, activées à la demande et contenant des textbox.
C'est maaagique.
____________________
Roro

   
Le 08/06/2017 à 11h08

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
C'est encore le plus simple. Je pensais te proposer une gestion par contexte, avec des batteries de select case contexte/end select qui aiguilleraient vers les objets nécessaires, mais au final ça ajouterait beaucoup de complexité, je trouve.

Je n'ai pas avancé sur la base de données parce que je travaille sur un petit outil qui me permettra d'avoir la base test en data et de la convertir à volonté en fichiers avec le séparateur que je souhaite, l'ajout de l'identifiant ou non, première ligne vide ou pas... Comme séparateur il y aura tab, virgule, point-virgule, deux-points, espace et un séparateur libre qu'on spécifie comme on veut (un caractère seulement, cependant). Il reste à gérer les extensions de fichier, je verrai bien txt, dat, csv et libre.

Dans le code ascii on trouve :
28 - FS - File separator
29 - GS - Group separator
30 - RS - Record separator
31 - US - Unit Separator
Le Unit Separator séparerait-il les champs de chaque Record, ou alors ça n'a rien à voir ? Dans le doute je n'ai pas intégré ce 31 dans les séparateurs. Je ne me souviens pas avoir rencontré ces codes dans ma vie de bricoleur ès-basic.

Une limitation gênante de notre cher JB/LB : avec FILEDIALOG on peut choisir un fichier dans l'explorateur de fichier et récupérer son chemin, mais on ne peut pas récupérer un chemin sans avoir choisi un fichier, alors je fais comment pour récupérer le chemin d'un dossier vide ? il manque un FOLDERDIALOG...



Edité par Christophe Le 08/06/2017 à 11h08
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 08/06/2017 à 15h59

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
03/06/2017-14h13:
Et je ne suis pas parvenu à faire fonctionner le: "!origin?!?..."

Je viens d'expérimenter la même chose,

truc tout bête, j'ai mes lignes de programme :

...
open "la fenetre"
instruction
instruction
instruction
...
gosub [trucmuche]
print dans le texteditor, "!origin 1 1"
wait
end
...

...
[trucmuche]
' le sous-programme
wait
...

Et l'affichage restait à la fin du texteditor au lieu de revenir à la première ligne : l'explication est que [trucmuche] se terminait par un "wait" et pas par un "return",

J'ai modifié le programme pour que [trucmuche] puisse se terminer par un "return" et tout est rentré dans l'ordre.

Voili...



Edité par Christophe Le 08/06/2017 à 16h04
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 16/06/2017 à 07h23

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Petites modifs.
J'ai mis les rubriques dans le fichier
essai table.zip
____________________
Roro

   
Le 18/06/2017 à 10h38

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Salut Roland,

Je fais un passage bref, quelques remarques sur ton dernier essai :
Ce que j'aime bien dans ton code, c'est qu'il est court.

C'est un peu dommage qu'il faille cliquer sur le bouton bleu après le double clic sur le mot recherché : on aimerait un affichage direct dans le texteditor du bas, dès le double clic.

Le texteditor du haut est bien rangé, mais celui du bas a parfois quelques décalages.

La rangée des textbox du haut n'est pas encore opérationnelle (et pour cause, elle n'est pas programmée)

Pour ma part je n'ai pas pu retravailler sur mon prog depuis mon dernier post, et je n'en aurais pas le temps non plus dans les jours qui viennent.

(et j'avais dit, à une époque, que je m'arrêtais, mais apparemment, j'ai dû l'oublier ;) )

A+
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 18/06/2017 à 12h10

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Citation:
C'est un peu dommage qu'il faille cliquer sur le bouton bleu

Bah, j'ai déjà évité de passer par le menu "Edit" et le: "Copié-Collé" , faut pas trop en demander.
Citation:
Les textbox du haut ne sont pas encore opérationnels

Dans la dernière mouture ils le sont; mais le blème, c'est que comme l'alignement se fait en fonction des longueurs de mots, l'alignement des textbox ne suivra pas, sauf à faire une analyse avant l'Open window et à mettre les coordonnées en variables fonction des mots.
Y a toujours une solution...
Citation:
pas le temp

Pfff...moi j'ai le temps, et je cherche désespérément un truc à coder
Je me suis lancé dans un jeu d'échec, et....Je me suis perdu
J'ai commencé un "Form" qui génère du code Python, mais vu le monument...
Et y a toujours autant de visiteurs et aussi peu de manifestation
Le mystère reste entier...
____________________
Roro

   
Le 19/06/2017 à 11h58

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Citation:

Citation:
C'est un peu dommage qu'il faille cliquer sur le bouton bleu


Bah, j'ai déjà évité de passer par le menu "Edit" et le: "Copié-Collé" , faut pas trop en demander.


n'empêche, ce serait commode. :)

Citation:
l'alignement des textbox ne suivra pas, sauf à faire une analyse avant l'Open window et à mettre les coordonnées en variables fonction des mots.

Je le vois bien comme ça aussi. Ou alors, comme dans ton premier post sur l'affectation combinatoire, créer un texteditor pour chaque textbox : tu n'as plus de soucis d'alignement et on peut accéder à la totalité du champ avec les flèches pour l'un, ou les ascenseurs pour l'autre. Ce serait moins commode à l'usage, et plus chargé graphiquement, mais pourquoi pas...

Citation:
y a toujours autant de visiteurs et aussi peu de manifestation

Il n'y a pas de mystère, je dirais, je fréquente plusieurs forums sans y être inscrit, et ça me va bien. Il faudrait comparer avec d'autres forums plus actifs pour voir si la proportion acteurs/lecteurs est différente ou pas. Peut-être aussi qu'une bonne partie des visiteurs ne vient qu'une fois, le temps de s'apercevoir que la page proposée par le moteur de recherche ne convient pas
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 14/07/2017 à 02h53

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Hello tous !

Après avoir (provisoirement) terrassé le dragon, J'ai repris le cours de la base des profs qui enseignent dans des salles, et je me suis bricolé un petit outil pour transférer en fichier les données présentes en data dans le programme.

Pour l'instant il fonctionne à blanc, mais il ne devrait pas être difficile d'écrire dans un fichier texte le contenu d'un tableau...

Quelques enseignements :
* contre : au vu du temps qu'il m'a fallu pour le mettre au point, j'aurais eu le temps de créer manuellement des dizaines et des dizaines de fichiers de tables de base de données.
* pour : quand on fait des dizaines et des dizaines de fichiers à la main, inévitablement on se goure, et le programme permet de toujours placer la donnée juste et dans le format attendu (normalement)
* pour : par la multiplicité des options, on peut facilement modifier la structure et les séparateurs à l'intérieur des fichiers, alors que le faire à la main peut prendre des allures de gageure.

Le voici donc pour essais : dans les balises du forum, pour voir le texte, ou en zip, au choix :

Zip : tables en data vers fichiers

Code VB :
 
'l'interface utilisateur semble correcte
'la base de données est prête à être créée en fichiers

'il reste à faire :
'* le transfert en fichier
'* encadrer un champ par des guillemets s'il contient un caractère utilisé
'   pour la séparation des champs
'* supprimer le type dans les datas des tables (ne sert plus)
'* voir la pertinence des options proposées
'* trouver les bugs

 
'pas de fenetre de débugage
nomainwin
 
'construction de la base de données :
NumTable=3    'nombre de tables

[profs] '

        'nom de la table, type (1=chaine, 2=numérique), nbenr, nbchamps
    data "Profs",1,12,2
    data "Nom Prénom" 'nom des champs, séparés par des espaces, donc pas d'espace dans le nom des champs

    data "Trucmuche","Alain"
    data "Machin","Marcel"
    data "Lapaille","Jean-Benoît"
    data "Lapoutre","Ulysse"
    data "Legendre","Lucienne"
    data "Lebianski","Josiane"
    data "Lavache","Ernest",
    data "Tuboeuf","Adrienne"
    data "Sinclair","Bratt"
    data "Rabeau","Elisabeth"
    data "Nun","Elodie"
    data "Lavache","Michel"
 
 
[matieres]'
        'nom de la table, type (1=chaine, 2=numérique),nbenr,nbchamps
    data "Matière",1,8,2
    data "Matière Abréviation"
 
    data "Mathématiques","Maths."
    data "Philosophie","Philo."
    data "Français","Franç."
    data "Histoire-Géographie","Hist.-Géo."
    data "Education Physique et Sportive","EPS"
    data "Physique","Phys."
    data "Biologie","Biolo."
    data "Arts Plastiques","Arts P."
 
 
[enseigne] '
        'nom de la table, type (1=chaine, 2=numérique),nbenr,nbchamps
    data "enseigne",2,12,2
    data "id.prof id.matière" 'nom des champs
    data 1,1
    data 2,2
    data 3,3
    data 4,4
    data 5,3
    data 6,1
    data 7,4
    data 8,5
    data 9,6
    data 10,1
    data 11,7
    data 12,8
 
 
'mise en tableau du contenu des combobox servant
'à générer le nom des fichiers et du set de tables

    'combo date
    sepdate$=" "
    dim formatDate$(14)
    formatDate$(1)="jour"
    formatDate$(2)="mois"
    formatDate$(3)="année"
    formatDate$(4)="jj";sepdate$;"mm";sepdate$;"aa"
    formatDate$(5)="jj";sepdate$;"mm";sepdate$;"aaaa"
    formatDate$(6)="jour";sepdate$;"mois";sepdate$;"aa"
    formatDate$(7)="jour";sepdate$;"mois";sepdate$;"aaaa"
    formatDate$(8)="jj";sepdate$;"mois";sepdate$;"aa"
    formatDate$(9)="jj";sepdate$;"mois";sepdate$;"aaaa"
    formatDate$(10)="aa";sepdate$;"mm";sepdate$;"jj"
    formatDate$(11)="aaaa";sepdate$;"mm";sepdate$;"jj"
    formatDate$(12)="aa";sepdate$;"mois";sepdate$;"jour"
    formatDate$(13)="aaaa";sepdate$;"mois";sepdate$;"jour"
 
    'combo heure
    dim formatHeure$(7)
    formatHeure$(1)="hh-mm"
    formatHeure$(2)="hh-mm-ss"
    formatHeure$(3)="hh h mm"
    formatHeure$(4)="hh h mm min"
    formatHeure$(5)="hh h mm min ss"
    formatHeure$(6)="hh h mm min ss sec"
 
    'combos assemblage du nom
    dim formatNomFile$(5)
    formatNomFile$(1)="< rien >"
    formatNomFile$(2)="date"
    formatNomFile$(3)="heure"
    formatNomFile$(4)="nom"
 
 
'boucle principale
    'définition de l'interface

    'taille et couleur de la fenêtre
    WindowWidth=800
    WindowHeight=600
 
    'caractère de séparation des données dans les fichiers :
    GROUPBOX #gener.sep, "Caractère de séparation", 10, 10, 760, 42
    RADIOBUTTON #gener.rbtab, "Tab.", [sep_tab], [rien], 20, 26, 80, 20
    RADIOBUTTON #gener.rbvirg, "Virgule", [sep_virgule], [rien], 120, 26, 80, 20
    RADIOBUTTON #gener.rbpvirg, "Point-virgule", [sep_pt_virgule], [rien], 220, 26, 80, 20
    RADIOBUTTON #gener.rbdeuxp, "Deux-points", [sep_deux_points], [rien], 320, 26, 80, 20
    RADIOBUTTON #gener.rbespace, "Espace", [sep_espace], [rien], 420, 26, 80, 20
    RADIOBUTTON #gener.rblibre, "Libre :", [sep_libre], [rien], 520, 26, 50, 20
    TEXTBOX #gener.tbsepar, 570, 26, 30, 20
    STATICTEXT #gener.stvalidcar, "", 610, 29, 20, 20
 
    'organisation des données et infos supplémentaires à insérer
    GROUPBOX #gener.orga, "Organisation des données", 10, 55, 760, 42
    CHECKBOX #gener.chknul, "Première ligne vide", [lig_non_nulle], [lig_nulle], 20, 71, 150, 20
    CHECKBOX #gener.chkid, "Inclure identifiant", [avec_identifiant], [sans_identifiant], 170, 71, 150, 20
    CHECKBOX #gener.chkcol, "Inclure en-tête de colonne", [avec_entete], [sans_entete], 320, 71, 150, 20
    CHECKBOX #gener.chkgui, "Guillemets systématiques", [avec_guillemets], [sans_guillemets], 470, 71, 150, 20
 
    'choix de l'extension des fichiers
    extension$=""
    GROUPBOX #gener.extfic, "Extension des fichiers de table", 10, 100, 760, 42
    RADIOBUTTON #gener.rbtxt, "*.txt", [ext_txt], [rien], 20, 116, 80, 20
    RADIOBUTTON #gener.rbdat, "*.dat", [ext_dat], [rien], 120, 116, 80, 20
    RADIOBUTTON #gener.rbcsv, "*.csv", [ext_csv], [rien], 220, 116, 80, 20
    RADIOBUTTON #gener.rbextlib, "Libre :", [ext_libre], [rien], 320, 116, 50, 20
    TEXTBOX #gener.tbext, 370, 116, 30, 20
 
    'choix du type de nom pour le dossier qui contiendra les tables
    STATICTEXT #gener.stnom, "Nom du jeu de tables :", 20, 158, 130, 20 '113
    TEXTBOX #gener.tbnom, 150, 155, 500, 20 '110

    'nom du set de tables, date
    STATICTEXT #gener.stfmtdate, "Format date :", 20, 185, 90, 20
    combobox #gener.cbdatefile, formatDate$(), [creer_nom_dossier_cb], 20, 205, 90, 20
 
    STATICTEXT #gener.stfmtheure, "Format heure :", 120, 185, 90, 20
    combobox #gener.cbheurefile, formatHeure$(), [creer_nom_dossier_cb], 120, 205, 90, 20
 
    STATICTEXT #gener.stfmtjeutab, "Formation du nom du jeu de tables", 225, 185, 200, 20
    combobox #gener.cbchamp1, formatNomFile$(), [creer_nom_dossier_cb], 225, 205, 60, 20
    combobox #gener.cbchamp2, formatNomFile$(), [creer_nom_dossier_cb], 295, 205, 60, 20
    combobox #gener.cbchamp3, formatNomFile$(), [creer_nom_dossier_cb], 365, 205, 60, 20
 
    STATICTEXT #gener.stnomdeft, "Aperçu :", 440, 185, 340, 20
    STATICTEXT #gener.stnomdef, "nomdossier$", 440, 208, 340, 20
 
    'fenêtre de validation
    TEXTEDITOR #gener.visu, 20, 250, 750, 250
    fonteditor$="Liberation_Mono 12"
 
    'validation, quitter
    BUTTON #gener.eff, "Eff. Affichage", [Efface_texteditor], ur, 280, 520, 100, 20
    BUTTON #gener.gen, "Générer", [generer], ur, 160, 520, 100, 20
    BUTTON #gener.quit, "Quitter", [quitter], ur, 40, 520, 100, 20
 
 
    'ouverture de l'interface
    open "Convertisseur tables en datas vers fichiers" for window as #gener
 
        print #gener.visu, "!font ";fonteditor$     'police d'affichage des données
        print #gener, "trapclose [quitter]"         'quitter par le gadget de fermeture

        'pré-selection des cases à cocher et des boutons radio actifs
        gosub[presets]
 
        'preset nom du set de tables
        indexDate=9 : print #gener.cbdatefile, "!";formatDate$(indexDate)
        indexHeure=3 : print #gener.cbheurefile, "!";formatHeure$(indexHeure)
        indexChp1=2 : print #gener.cbchamp1, "!";formatNomFile$(indexChp1)
        indexChp2=3 : print #gener.cbchamp2, "!";formatNomFile$(indexChp2)
        indexChp3=4 : print #gener.cbchamp3, "!";formatNomFile$(indexChp3)
 
        'et avec ces preset on crée le nom du set de tables
        gosub [creer_nom_dossier]
        print #gener.stnomdef, nomdossier$
 
    wait
 
    'fin du programme
end
 
 
 
'************ sous programmes

'pré-selection des cases à cocher et des boutons au démarrage
[presets]
 
    'cases à cocher : mettre en commentaire si on veut une case non cochée au démarrage

    'boutons radio : enlever le caractère de commentaire pour rendre actif
    '   le bouton correspondant. Si plusieurs lignes d'une même rubrique ne sont plus
    '   en commentaires, le programme risque de mal fonctionner.

    'bouton radio : caractère de séparation
    origine=1
    'gosub [sep_tab] : print #gener.rbtab,"set"          'Tabulateur
    'gosub [sep_virgule]:print #gener.rbvirg, "set"      'Virgule
    gosub [sep_pt_virgule]:print #gener.rbpvirg, "set"  'Point-virgule
    'gosub [sep_deux_points]:print#gener.rbdeuxp, "set"  'Deux-points
    'gosub [sep_espace]:print#gener.rbespace, "set"      'Espace
    'gosub [sep_libre]:print#gener.rblibre, "set"        'Libre
    origine=0
 
    'case à cocher : premier champ nul, avec identifiant, avec en-tête, champs avec guillemets
    premlignevide=0
    identif=0
    entete=0
    guillemet=0
 
    origine=1
    'gosub [lig_non_nulle] : print #gener.chknul, "set"   'Premier champ nul ou vide
    gosub [avec_identifiant] : print #gener.chkid, "set"'Inclure identifiant
    gosub [avec_entete]:print #gener.chkcol, "set"      'Inclure en-tête de colonne
    'gosub [avec_guillemets]:print #gener.chkgui, "set"  'Encadrer tous les champs par des guillemets
    origine=0
 
    'bouton radio : choix de l'extension des noms de fichier
    origine=1
    gosub [ext_txt]:print #gener.rbtxt,"set"           '*.txt
    'gosub [ext_dat]:print #gener.rbdat,"set"           '*.dat
    'gosub [ext_csl]:print #gener.rbcsv,"set"           '*.csl
    'gosub [ext_libre]:print#gener.rbextlib, "set       '*.<ce que vous voulez
    origine=0
 
    return
 
 
[Efface_texteditor]
    print #gener.visu, "!cls"
    wait
 
 
'séparateurs de champ à l'intérieur du fichier de table
[sep_tab]
    rbtnSEP=1
    separ$=chr$(9)
 
    if origine=1 then return:origine=0 else wait
 
[sep_virgule]
    rbtnSEP=2
    separ$=","
    if origine=1 then return:origine=0 else wait
 
[sep_pt_virgule]
    rbtnSEP=3
    separ$=";"
    if origine=1 then return:origine=0 else wait
 
[sep_deux_points]
    rbtnSEP=4
    separ$=":"
    if origine=1 then return:origine=0 else wait
 
[sep_espace]
    rbtnSEP=5
    separ$=" "
    if origine=1 then return:origine=0 else wait
 
[sep_libre]
    rbtnSEP=6
    print #gener.tbsepar, "!contents? carac$"
 
    if len(carac$)=1 then
        separ$=carac$
        print #gener.stvalidcar, separ$
    else
        codaski=val(carac$)
        if codaski>=32 or codaski<=255 then
            separ$=chr$(codaski)
            print #gener.stvalidcar, separ$
        end if
    end if
 
    if origine=1 then return:origine=0 else wait
 
 
'premiere ligne nulle ou pas
[lig_non_nulle]
    premlignevide=1
    if origine=1 then return:origine=0 else wait
 
[lig_nulle]
    premlignevide=0
    if origine=1 then return:origine=0 else wait
 
 
'tables avec identifiants ou pas
[avec_identifiant]
    identif=1
    if origine=1 then return:origine=0 else wait
 
[sans_identifiant]
    identif=0
    if origine=1 then return:origine=0 else wait
 
 
'tables avec en-têtes de colonne ou pas
[avec_entete]
    entete=1
    if origine=1 then return:origine=0 else wait
 
[sans_entete]
    entete=0
    if origine=1 then return:origine=0 else wait
 
 
'nom des champs encadrés par des guillemets
'   utile si un champ comporte un caractère qui est le caractère de séparation
[avec_guillemets]
    guillemet=1
    if origine=1 then return:origine=0 else wait
 
[sans_guillemets]
    guillemet=0
    if origine=1 then return:origine=0 else wait
 
 
'extension des fichiers table
[rien]
    wait
 
[ext_txt]
    rbtnEXT=1
    extension$="txt"
    if origine=1 then return:origine=0 else wait
 
[ext_dat]
    rbtnEXT=2
    extension$="dat"
    if origine=1 then return:origine=0 else wait
 
[ext_csv]
    'dans ce cas, interdire d'autres séparateurs, permettre seulement virgule et point-virgule
    rbtnEXT=3
    extension$="csv"
    if origine=1 then return:origine=0 else wait
 
[ext_libre]
    rbtnEXT=4
    print #gener.tbext,"!contents? extension$"
    if origine=1 then return:origine=0 else wait
 
[creer_nom_dossier_cb]
    'lit les index des tables
    'priorité à l'actuel contenu des combobox sauf s'il est 0
        #gener.cbdatefile, "selectionindex? idx" : if idx<>indexDate and idx>0 then indexDate=idx
        #gener.cbheurefile, "selectionindex? idx" : if idx<>indexHeure and idx>0 then indexHeure=idx
        #gener.cbchamp1, "selectionindex? idx" : if idx<>indexChp1 and idx>0 then indexChp1=idx
        #gener.cbchamp2, "selectionindex? idx" : if idx<>indexChp2 and idx>0 then indexChp2=idx
        #gener.cbchamp3, "selectionindex? idx" : if idx<>indexChp3 and idx>0 then indexChp3=idx
 
    gosub [creer_nom_dossier]
    wait
 
 
[creer_nom_dossier]
 
    'top horaire
    j$=date$("yyyy/mm/dd")
    h$=time$()
 
    'déterminer la date de l'instant
    annee$=left$(j$,4)
    anneeCourte$=right$(annee$,2)
    mois$=mid$(j$,6,2)
    nomMois$=word$("jan fév mar avr mai juin juil aout sept oct nov dec",val(mois$))
    jour$=right$(j$,2)
 
    nbrejour=val(date$("days")) 'nbrejour=42561 -> samedi
    numjour=1+nbrejour-int(nbrejour/7)*7
    nomJour$=word$("mardi mercredi jeudi vendredi samedi dimanche lundi",numjour)
 
    'formatage de la date
    select case indexDate
        case 1:ladate$ = nomJour$
        case 2:ladate$ = nomMois$
        case 3:ladate$ = annee$
        case 4:ladate$ = jour$;sepdate$;mois$;sepdate$;anneeCourte$
        case 5:ladate$ = jour$;sepdate$;mois$;sepdate$;annee$
        case 6:ladate$ = nomJour$;sepdate$;nomMois$;sepdate$;anneeCourte$
        case 7:ladate$ = nomJour$;sepdate$;nomMois$;sepdate$;annee$
        case 8:ladate$ = jour$;sepdate$;nomMois$;sepdate$;anneeCourte$
        case 9:ladate$ = jour$;sepdate$;nomMois$;sepdate$;annee$ 
        case 10:ladate$ = anneeCourte$;sepdate$;mois$;sepdate$;jour$
        case 11:ladate$ = annee$;sepdate$;mois$;sepdate$;jour$
        case 12:ladate$ = anneeCourte$;sepdate$;nomMois$;sepdate$;nomJour$
        case 13:ladate$ = annee$;sepdate$;nomMois$;sepdate$;nomJour$
    end select
 
    'déterminer l'heure de l'instant
    heure$=left$(h$,2)
    min$=mid$(h$,4,2)
    sec$=right$(h$,2)
 
    'formatage de l'heure
    select case indexHeure
        case 1:lheure$ = heure$;"-";min$
        case 2:lheure$ = heure$;"-";min$;"-";sec$
        case 3:lheure$ = heure$;"h";min$ 
        case 4:lheure$ = heure$;"h";min$;"min"
        case 5:lheure$ = heure$;"h";min$;"min";sec$
        case 6:lheure$ = heure$;"h";min$;"min";sec$;"s"
    end select
 
    'récupération du nom du set de tables
    print #gener.tbnom,"!contents? lenom$"
 
    'construction du nom complet du set de table
    nomdossier$=""
    separation$=" - "     'chaine de séparation des paramètres dans le nom du set

    sep1$=separation$
    select case indexChp1
        case 1 : champ1$="":sep1$=""
        case 2 : champ1$=ladate$
        case 3 : champ1$=lheure$
        case 4 : champ1$=lenom$
    end select
 
    sep2$=separation$
    select case indexChp2
        case 1 : champ2$="":sep2$=""
        case 2 : champ2$=ladate$
        case 3 : champ2$=lheure$
        case 4 : champ2$=lenom$
    end select
 
    select case indexChp3
        case 1 : champ3$=""
        case 2 : champ3$=ladate$
        case 3 : champ3$=lheure$
        case 4 : champ3$=lenom$
    end select
 
    if champ3$="" then sep2$=""
    if champ2$="" and champ3$="" then sep1$=""
    nomdossier$=champ1$+sep1$+champ2$+sep2$+champ3$
 
    print #gener.stnomdef, nomdossier$
    return
 
 
 
[generer]
 
    creerNom=0  'à 1 : autorise la création du nom du dossier

    'si nomdossier$ est vide
    if nomdossier$="" then
        'on regarde si un nom a été entré dans le texbox tbnom
        print #gener.tbnom,"!contents? n$"
 
        'si oui, nomdossier$ prend ce nom et on met à jour cbchamp1 pour qu'il affiche "nom"
        'et <rien> pour cbchamp2 et cbchamp3
        if n$<>"" then
            nomdossier$=n$
            indexChp1=4:print #gener.cbchamp1,"selectindex ";indexChp1
            indexChp2=1:print #gener.cbchamp2,"selectindex ";indexChp2
            indexChp3=1:print #gener.cbchamp3,"selectindex ";indexChp3
            creerNom=1
        else
        'si non, nomdossier$ et le nom entré dans la textbox sont vides
        'on invite l'utilisateur à renseigner au moins un des champs
            ligne1$="Choisir au moins un champ <date> ou <heure> dans"
            ligne2$="la section 'Formation du nom du jeu de tables,'"
            ligne3$="ou entrer un nom dans la ligne 'Nom du jeu de tables'"
            ligne4$="puis cliquer sur <Générer>"
            notice ligne1$+chr$(10)+ligne2$+chr$(10)+ligne3$+chr$(10)+ligne4$
        end if
 
    else
        creerNom=1
    end if
 
 
    if creerNom=1 then 'création du nom final
        gosub [creer_nom_dossier]
        print #gener.visu, ""
        print #gener.visu, "nom du set de tables : ";nomdossier$
            'reste à faire : création du dossier contenant les tables
            'test = mkdir(nomdossier$)
            'if test <> 0 then
                'notice "Problème : la création du dossier a échoué"+chr$(10)+"La base de donnée n'est pas créée"
            'else
                'tout va bien, on peut créer les tables
                gosub [afficher_tables]
                'gosub [créer_fichier]
            'end if
    end if
 
 
    wait
 
 
[afficher_tables]
    'affiche le contenu des tables sur l'écran et les transfère en fichier

    'pour chacune des tables
    enrActuel=0 'enregistrement actuel, on considère que l'enregistrement 1 porte le numéro 0
    for tables=1 to NumTable
 
        select case tables
            case 1 : restore [profs]
            case 2 : restore [matieres]
            case 3 : restore [enseigne]
        end select
 
        read nom$,type,nbenr,nbchamps,entete$
 
        'dimensionnement du tableau image du fichier
        '   nombre de données de la table d'origine, nbenr
        '   si champ vide, ajouter 1
        '   si en-tete, ajouter 1
        longueurTI = nbenr + premlignevide + entete
        dim Tableimage$(longueurTI)
 
        'si entete, on construit et on place l'entete dans la ligne 0 du tableau
        ta$=""
        enrActuel=0
        if entete=1 then
 
            if identif=1 then
                if guillemet=1 then
                    ta$=chr$(34)+"ident."+chr$(34)+separ$
                else
                    ta$="ident."+separ$ 
                end if
            end if
 
            for col=1 to nbchamps
                if guillemet=1 then
                    ta$=ta$+chr$(34)+word$(entete$,col," ")+chr$(34)+separ$
                else
                    ta$=ta$+word$(entete$,col," ")+separ$ 
                end if
            next
 
            'retrait du dernier séparateur
            tb$=left$(ta$, len(ta$)-len(separ$))
 
            'entrée de l'enregistrement dans le tableau image, futur fichier
            Tableimage$(enrActuel)=tb$ 
 
            'et on passe à l'enregistrement suivant
            enrActuel=enrActuel+1
 
        end if
 
 
        'si première ligne vide (à préciser,entièrement vide, ou champs vides avec les séparateurs ???)
        ta$=""
        if premlignevide then
 
            for col=1 to nbchamps
 
                if guillemet=1 then
                    ta$=ta$+chr$(34)+chr$(34)+separ$
                else
                    ta$=ta$+separ$ 
                end if
 
            next
 
            Tableimage$(enrActuel)=left$(ta$, len(ta$)-len(separ$))
            enrActuel=enrActuel+1
 
        end if
 
 
        'traitement de chaque enregistrement du tableau
        identifiant=0
        ta$=""
        comptenr=enrActuel-premlignevide-entete'compteur d'enregistrement

        for enr=enrActuel to enrActuel+nbenr-1
 
            if identif=1 then
                if guillemet=1 then
                    ta$=chr$(34)+str$(comptenr)+chr$(34)+separ$
                else
                    ta$=str$(comptenr)+separ$ 
                end if
            end if
 
            for champ=1 to nbchamps
                read a$
                if guillemet=1 then
                    ta$=ta$+chr$(34)+a$+chr$(34)+separ$
                else
                    ta$=ta$+a$+separ$ 
                end if
            next
 
            Tableimage$(enr)=left$(ta$, len(ta$)-len(separ$))
            ta$=""
            comptenr=comptenr+1
        next
 
        'affichage de la table en cours
        print #gener.visu,""
        print #gener.visu,"nom de la table : ";nom$+"."+extension$
        for a=0 to longueurTI-1
            print #gener.visu, Tableimage$(a)
        next
 
    'si autorisation, on écrit aussi en fichier
    next
 
    return
 
 
[créer_fichier]
    'reste à écrire...
    return
 
 
[quitter]    'quitter le programme
    close #gener
    end
    wait
 
 
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 14/07/2017 à 15h59

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Je me demande juste où tu va
Mais comme je me le demande aussi pour moi-même
Y a pas de blâme
Je cherche toujours une liste
____________________
Roro

   
Le 15/07/2017 à 22h25

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Citation:
Je me demande juste où tu va

Bah, au lieu d'écrire manuellement mes données dans des fichiers, je les écris manuellement dans le programme, et c'est le programme qui va les écrire dans les fichiers...

(je cherche le petit smiley avec l'entonnoir ;) )

Le gros avantage de la formule, c'est que j'ai dans le programme toute la base de données, je peux alors la modifier, ajouter ou supprimer des tables ou des enregistrements, puis sauvegarder en cochant différentes options, et au final j'obtiens un fichier par table, tous dans le même dossier dont j'aurais choisi le nom, tous avec la même structure... Et muni de ce jeu d'essai, je peux alors me concentrer sur mes enseignants qui enseignent, parce que là, faut bien reconnaître que je n'ai pas avancé depuis plus d'un mois.

Le transfert en fichiers fonctionne ce soir, mais je laisse reposer un peu avant de mettre le programme sur le forum, car il reste quelques petites bricoles à implémenter, comme l'encadrement par des guillemets si on rencontre un caractère de séparation à l'intérieur d'un champ, et des options qui en interdisent d'autres (*.csv, par exemple, où on ne devrait trouver que le point et la virgule, à ce que j'ai compris).

Citation:
Je cherche toujours une liste

Comme quoi ce qui compte n'est pas le résultat, mais l'exploration du territoire inconnu avant d'y arriver. Passer autant de temps sur un truc aussi ésotérique et peu naturel que la programmation d'un ordinateur ? faut être maso ou passionné. Un truc qu'on a raté et qui aurait pourtant dû nous mettre la puce à l'oreille : les ordinateurs ont vite perdu leur basic au profit d'applications toutes faites... il n'est jamais trop tard pour se mettre au parapente ;)
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 16/07/2017 à 09h42

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Citation:
tous avec la même structure

Ce qui semble être pour toi un avantage, me paraît être une restriction.
Car une base de donnée est structurée en fonction de son contenu
Une base: "Gestion client" na pas la même structure qu'une: "Animaux de la forêt"
La structure de la base, c'est ce qu'on veut en faire

Tu a l'air de savoir où tu va, mais franchement je ne comprends pas tout.
"Organisation Des Données" et ses 4 options me laisse perplexe.
Et autant pour les caractères de séparation.
Je ne dois pas être assez ferru en base de donnée.
Citation:
me concentrer sur mes enseignants qui enseignent

Hum, moi je vois venir le piège; avec seulement 6 classes, 10 profs, 5 matières, 5 jours, 5 horaires et quelques contraintes, on doit déboucher sur un nombre colossal de combinaisons.
C'est là que "Essaie table" entre en jeu pour extraire des combinaisons choisies

J'ai trouvé une liste de produits-marques avec listes de caractéristiques
Mais pour que mon prog serve à quelque chose, encore faudrait-il que lorsqu'on va faire une recherche avec des "ET"; qu'il y ait un item qui réponde à la demande, ce qui est loin d'être sûr; même si tous les types-marques de smartphones ont des écouteurs.

Moralité: Quand on ne sait pas où on va ni ce qu'on veut, les questions répondent aux questions.
____________________
Roro

   
Le 16/07/2017 à 15h39

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Citation:
Une base: "Gestion client" na pas la même structure qu'une: "Animaux de la forêt"
La structure de la base, c'est ce qu'on veut en faire,

Les tables diffèrent par leur contenu, mais sont régies par le même mode de fonctionnement, que je vais essayer de reproduire. On a juste vu qu'il était possible de créer des tables, et on a créé un petit soft qui automatisera la génération de tables test, le vrai travail va commencer et devrait, au final, rendre les mêmes services que ton "Essaie table"

Citation:
"Organisation Des Données" et ses 4 options me laisse perplexe.
Et autant pour les caractères de séparation.

Cette organisation est celle de l'intérieur du fichier et permet au logiciel qui va l'ouvrir, de savoir ce qu'il charge et ce qu'il doit en faire. Il peut s'avérer commode de pouvoir à la volée changer l'un de ces paramètres...

Un exemple à lire dans un éditeur de texte, et à importer dans un tableur, pour voir la différence.
table "profs"

Le tableur va surement te demander quel est le caractère de séparation :


Citation:
Hum, moi je vois venir le piège; avec seulement 6 classes, 10 profs, 5 matières, 5 jours, 5 horaires et quelques contraintes, on doit déboucher sur un nombre colossal de combinaisons.

Rien de certain à cette heure-ci ;)

Autrement, pour ton "ET" vide, pourquoi ne pas citer une phrase du genre "Pas d'enregistrement correspondant aux critères" ?



Edité par Christophe Le 16/07/2017 à 15h40
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 18/07/2017 à 19h38

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Cette fois-ci le générateur de table génère des fichiers ;) :

convertisseur tables en datas vers tables en fichier

Quelques notes pour les éventuels testeurs :

* Il y a sûrement plus simple mais je laisse le programme en l'état, parce qu'il fait ce qu'on lui demande, et que j'ai déjà passé beaucoup trop de temps dans la programmation de celui-ci.

* En bas au milieu de la fenêtre du programme, il y a un cadre "générer les tables" et deux cases, "sur Fenêtre" et "sur Fichier". Seule la case "sur Fenetre" est précochée, ceci afin de permettre plusieurs essais, avant de cocher "sur Fichier" quand le résultat convient. A chaque fois il faut recliquer sur "Générer".

* La base de données est créée dans le dossier à partir duquel est lancé le programme.

* Elle se présente sous la forme d'un dossier dont le nom est l'assemblage - au choix de l'utilisateur - de la date et de l'heure au moment du clic sur "générer", et d'un nom, ou au moins d'un de ces paramètres.

* A l'intérieur de ce dossier, les tables portent le nom qui leur a été attribué dans la section des data en début du programme, et l'organisation des données à l'intérieur des fichiers reflète les options choisies par l'utilisateur.



Bon à savoir :

Extension des fichiers de tables :
Le format csv - comma separated values, valeurs séparées par des virgules - ne bénéficie actuellement d'aucune limitation dans le choix du séparateur, et on peut très bien y placer un autre séparateur que la virgule. Veiller à ne mettre que la virgule si *.csv est sélectionné, ou choisir un autre séparateur seulement s'il existe une bonne raison de le faire.

erreur 183 : le dossier existe déjà.
Cela se produit si on utilise dans le nom de la base, un format heure-minutes, et qu'on est toujours dans la même minute lorsqu'on fait une seconde tentative : le programme en conclut que la base est déjà créée, et il ne peut pas écrire par dessus. Attendre le changement de minute, ou prendre un format avec les secondes ou changer le nom de la base.

J'ai eu aussi momentanément une erreur 3 : le chemin d'accès spécifié est introuvable, ce qui était vrai lors de cette tentative.

Ces numéros d'erreur sont fournis par JustBasic quand on utilise MKDIR (créer un dossier) et sont ceux du DOS. Je suppose que les codes d'erreur Windows sont les mêmes. Une petite recherche sur le net permet de trouver la liste.

Le listing :
Code VB :
 
'Ce programme expérimental part d'une collection de tables en data, située en
'début de programme, et les convertit en fichiers. Un fichier par table, choix de
'l'extension, du séparateur, présence ou non de l'identifiant ou des noms de colonnes...

'Dans le bloc de datas, chaque table commence par une étiquette
'
'la première ligne contient :
'   * nom de la table,
'   * nombre d'enregistrements,
'   * nombre de champs par enregistrement
'
'la seconde ligne contient le nom des champs (séparés par des espaces)
'ensuite on trouve les enregistrements de la table
'
'Si on ajoute ou retire des enregistrements, ne pas oublier de mettre à jour
'le nombre d'enregistrements.
'
'Ajout ou suppression de tables :
'   * NbreTables contient le nombre de tables
'   * modifier manuellement le select case qu'on trouve en
'     début de [créer_tables] et qui ressemble à :

       ''sélection de la table à afficher/transférer
       ' select case tables
       '     case 1 : restore [profs]
       '     case 2 : restore [matieres]
       '     case 3 : restore [enseigne]
       ' end select

 
 
 
'pas de fenetre de débugage
nomainwin
 
 
'** construction de la base de données :
NbreTables=3    'nombre de tables

[profs] '

        'nom de la table, nbre d'enregistrements, nbre de champs par enregistrements
    data "Profs",12,2
    data "Nom Prénom" 'nom des champs, séparés par des espaces, donc pas d'espace dans le nom des champs

    data "Trucmuche","Alain"
    data "Machin","Marcel"
    data "Lapaille","Jean-Benoît"
    data "Lapoutre","Ulysse"
    data "Legendre","Lucienne"
    data "Lebianski","Josiane"
    data "Lavache","Ernest",
    data "Tuboeuf","Adrienne"
    data "Sinclair","Bratt"
    data "Rabeau","Elisabeth"
    data "Nun","Elodie"
    data "Lavache","Michel"
 
 
[matieres]'
        'nom de la table, nbre d'enregistrements, nbre de champs par enregistrements
    data "Matière",8,2
    data "Matière Abréviation"
 
    data "Mathématiques","Maths."
    data "Philosophie","Philo."
    data "Français","Franç."
    data "Histoire-Géographie","Hist.-Géo."
    data "Education Physique et Sportive","EPS"
    data "Physique","Phys."
    data "Biologie","Biolo."
    data "Arts Plastiques","Arts P."
 
 
[enseigne] '
        'nom de la table, nbre d'enregistrements, nbre de champs par enregistrements
    data "enseigne",12,2
    data "id.prof id.matière" 'nom des champs
    data 1,1
    data 2,2
    data 3,3
    data 4,4
    data 5,3
    data 6,1
    data 7,4
    data 8,5
    data 9,6
    data 10,1
    data 11,7
    data 12,8
 
 
'** mise en tableau du contenu des combobox servant
'à générer le nom des fichiers et du set de tables

    'combo date
    sepdate$=" "
    dim formatDate$(14)
    formatDate$(1)="jour"
    formatDate$(2)="mois"
    formatDate$(3)="année"
    formatDate$(4)="jj";sepdate$;"mm";sepdate$;"aa"
    formatDate$(5)="jj";sepdate$;"mm";sepdate$;"aaaa"
    formatDate$(6)="jour";sepdate$;"mois";sepdate$;"aa"
    formatDate$(7)="jour";sepdate$;"mois";sepdate$;"aaaa"
    formatDate$(8)="jj";sepdate$;"mois";sepdate$;"aa"
    formatDate$(9)="jj";sepdate$;"mois";sepdate$;"aaaa"
    formatDate$(10)="aa";sepdate$;"mm";sepdate$;"jj"
    formatDate$(11)="aaaa";sepdate$;"mm";sepdate$;"jj"
    formatDate$(12)="aa";sepdate$;"mois";sepdate$;"jour"
    formatDate$(13)="aaaa";sepdate$;"mois";sepdate$;"jour"
 
    'combo heure
    dim formatHeure$(7)
    formatHeure$(1)="hh-mm"
    formatHeure$(2)="hh-mm-ss"
    formatHeure$(3)="hh h mm"
    formatHeure$(4)="hh h mm min"
    formatHeure$(5)="hh h mm min ss"
    formatHeure$(6)="hh h mm min ss sec"
 
    'combos assemblage du nom
    dim formatNomFile$(5)
    formatNomFile$(1)="< rien >"
    formatNomFile$(2)="date"
    formatNomFile$(3)="heure"
    formatNomFile$(4)="nom"
 
 
'** boucle principale
    'définition de l'interface

    'taille et couleur de la fenêtre
    WindowWidth=800
    WindowHeight=600
 
    'caractère de séparation des données dans les fichiers :
    GROUPBOX #gener.sep, "Caractère de séparation", 10, 10, 760, 42
    RADIOBUTTON #gener.rbtab, "Tab.", [sep_tab], [rien], 20, 26, 80, 20
    RADIOBUTTON #gener.rbvirg, "Virgule", [sep_virgule], [rien], 120, 26, 80, 20
    RADIOBUTTON #gener.rbpvirg, "Point-virgule", [sep_pt_virgule], [rien], 220, 26, 80, 20
    RADIOBUTTON #gener.rbdeuxp, "Deux-points", [sep_deux_points], [rien], 320, 26, 80, 20
    RADIOBUTTON #gener.rbespace, "Espace", [sep_espace], [rien], 420, 26, 80, 20
    RADIOBUTTON #gener.rblibre, "Libre :", [sep_libre], [rien], 520, 26, 50, 20
    TEXTBOX #gener.tbsepar, 570, 26, 30, 20
    STATICTEXT #gener.stvalidcar, "", 610, 29, 20, 20
 
    'organisation des données et infos supplémentaires à insérer
    GROUPBOX #gener.orga, "Organisation des données", 10, 55, 760, 42
    CHECKBOX #gener.chknul, "Première ligne vide", [lig_non_nulle], [lig_nulle], 20, 71, 150, 20
    CHECKBOX #gener.chkid, "Inclure identifiant", [avec_identifiant], [sans_identifiant], 170, 71, 150, 20
    CHECKBOX #gener.chkcol, "Inclure en-tête de colonne", [avec_entete], [sans_entete], 320, 71, 150, 20
    CHECKBOX #gener.chkgui, "Guillemets systématiques", [avec_guillemets], [sans_guillemets], 470, 71, 150, 20
 
    'choix de l'extension des fichiers
    extension$=""
    GROUPBOX #gener.extfic, "Extension des fichiers de table", 10, 100, 760, 42
    RADIOBUTTON #gener.rbtxt, "*.txt", [ext_txt], [rien], 20, 116, 80, 20
    RADIOBUTTON #gener.rbdat, "*.dat", [ext_dat], [rien], 120, 116, 80, 20
    RADIOBUTTON #gener.rbcsv, "*.csv", [ext_csv], [rien], 220, 116, 80, 20
    RADIOBUTTON #gener.rbextlib, "Libre :", [ext_libre], [rien], 320, 116, 50, 20
    TEXTBOX #gener.tbext, 370, 116, 30, 20
 
    'choix du type de nom pour le dossier qui contiendra les tables
    STATICTEXT #gener.stnom, "Nom du jeu de tables :", 20, 158, 130, 20 '113
    TEXTBOX #gener.tbnom, 150, 155, 500, 20 '110

    'nom du set de tables, date
    STATICTEXT #gener.stfmtdate, "Format date :", 20, 185, 90, 20
    combobox #gener.cbdatefile, formatDate$(), [creer_nom_dossier_cb], 20, 205, 90, 20
 
    STATICTEXT #gener.stfmtheure, "Format heure :", 120, 185, 90, 20
    combobox #gener.cbheurefile, formatHeure$(), [creer_nom_dossier_cb], 120, 205, 90, 20
 
    STATICTEXT #gener.stfmtjeutab, "Formation du nom du jeu de tables", 225, 185, 200, 20
    combobox #gener.cbchamp1, formatNomFile$(), [creer_nom_dossier_cb], 225, 205, 60, 20
    combobox #gener.cbchamp2, formatNomFile$(), [creer_nom_dossier_cb], 295, 205, 60, 20
    combobox #gener.cbchamp3, formatNomFile$(), [creer_nom_dossier_cb], 365, 205, 60, 20
 
    STATICTEXT #gener.stnomdeft, "Aperçu :", 440, 185, 340, 20
    STATICTEXT #gener.stnomdef, "nomdossier$", 440, 208, 340, 20
 
    'fenêtre de validation
    TEXTEDITOR #gener.visu, 20, 250, 750, 230
    fonteditor$="Liberation_Mono 12"
 
    'validation, quitter
    BUTTON #gener.eff, "Eff. Affichage", [Efface_texteditor], ul, 465, 500, 100, 35
 
    'génération des tables 285 235 = -50pix
    GROUPBOX #gener.extfic, "Générer les tables", 235, 483, 220, 62
    CHECKBOX #gener.chkaff, "sur Fenetre", [vers_affichage], [sans_affichage], 255, 500, 80, 20
    CHECKBOX #gener.chkfic, "sur Fichier", [vers_fichier], [sans_ficher], 255, 520, 80, 20
    BUTTON #gener.gen, "Générer", [generer_la_base], ul, 345, 500, 100, 35
 
    BUTTON #gener.quit, "Quitter", [quitter], ul, 680, 510, 100, 20
 
 
    'ouverture de l'interface
    open "Convertisseur tables en datas vers fichiers" for window as #gener
 
        print #gener.visu, "!font ";fonteditor$     'police d'affichage des données
        print #gener, "trapclose [quitter]"         'quitter par le gadget de fermeture

        'pré-selection des cases à cocher et des boutons radio actifs
        gosub [presets]
 
        'preset nom du set de tables
        indexDate=9 : print #gener.cbdatefile, "!";formatDate$(indexDate)
        indexHeure=3 : print #gener.cbheurefile, "!";formatHeure$(indexHeure)
        indexChp1=2 : print #gener.cbchamp1, "!";formatNomFile$(indexChp1)
        indexChp2=3 : print #gener.cbchamp2, "!";formatNomFile$(indexChp2)
        indexChp3=4 : print #gener.cbchamp3, "!";formatNomFile$(indexChp3)
 
        'et avec ces preset on crée le nom du set de tables
        gosub [creer_nom_dossier]
        print #gener.stnomdef, nomdossier$
 
    wait
 
    'fin du programme
end
 
 
 
'** sous programmes

'pré-selection des cases à cocher et des boutons au démarrage
[presets]
 
    'cases à cocher : mettre en commentaire si on veut une case non cochée au démarrage

    'boutons radio : enlever le caractère de commentaire pour rendre actif
    '   le bouton correspondant. Si plusieurs lignes d'une même rubrique ne sont plus
    '   en commentaires, le programme risque de mal fonctionner.

    'bouton radio : caractère de séparation
    origine=1
    'gosub [sep_tab] : print #gener.rbtab,"set"          'Tabulateur
    'gosub [sep_virgule]:print #gener.rbvirg, "set"      'Virgule
    gosub [sep_pt_virgule]:print #gener.rbpvirg, "set"  'Point-virgule
    'gosub [sep_deux_points]:print#gener.rbdeuxp, "set"  'Deux-points
    'gosub [sep_espace]:print#gener.rbespace, "set"      'Espace
    'gosub [sep_libre]:print#gener.rblibre, "set"        'Libre
    origine=0
 
    'case à cocher : premier champ nul, avec identifiant, avec en-tête, champs avec guillemets
    premlignevide=0
    identif=0
    entete=0
    guillemet=0
 
    origine=1
    'gosub [lig_non_nulle] : print #gener.chknul, "set"   'Premier champ nul ou vide
    gosub [avec_identifiant] : print #gener.chkid, "set"'Inclure identifiant
    gosub [avec_entete]:print #gener.chkcol, "set"      'Inclure en-tête de colonne
    'gosub [avec_guillemets]:print #gener.chkgui, "set"  'Encadrer tous les champs par des guillemets
    origine=0
 
    'bouton radio : choix de l'extension des noms de fichier
    origine=1
    gosub [ext_txt]:print #gener.rbtxt,"set"           '*.txt
    'gosub [ext_dat]:print #gener.rbdat,"set"           '*.dat
    'gosub [ext_csl]:print #gener.rbcsv,"set"           '*.csl
    'gosub [ext_libre]:print#gener.rbextlib, "set       '*.<ce que vous voulez
    origine=0
 
    'case à cocher, choix de la destination
    surfenetre=0
    surfichier=0
 
    origine=1
    gosub [vers_affichage]:print #gener.chkaff,"set"
    'gosub [vers_fichier]:print #gener.chkfic,"set"
    origine=0
 
    return
 
 
[Efface_texteditor]
    print #gener.visu, "!cls"
    wait
 
 
'séparateurs de champ à l'intérieur du fichier de table
[sep_tab]
    rbtnSEP=1
    separ$=chr$(9)
    if origine=1 then return:origine=0 else wait
 
[sep_virgule]
    rbtnSEP=2
    separ$=","
    if origine=1 then return:origine=0 else wait
 
[sep_pt_virgule]
    rbtnSEP=3
    separ$=";"
    if origine=1 then return:origine=0 else wait
 
[sep_deux_points]
    rbtnSEP=4
    separ$=":"
    if origine=1 then return:origine=0 else wait
 
[sep_espace]
    rbtnSEP=5
    separ$=" "
    if origine=1 then return:origine=0 else wait
 
[sep_libre]
    rbtnSEP=6
    print #gener.tbsepar, "!contents? carac$"
 
    if len(carac$)=1 then
        separ$=carac$
        print #gener.stvalidcar, separ$
    else
        codaski=val(carac$)
        if codaski>=32 or codaski<=255 then
            separ$=chr$(codaski)
            print #gener.stvalidcar, separ$
        end if
    end if
 
    if origine=1 then return:origine=0 else wait
 
 
'premiere ligne nulle ou pas
[lig_non_nulle]
    premlignevide=1
    if origine=1 then return:origine=0 else wait
 
[lig_nulle]
    premlignevide=0
    if origine=1 then return:origine=0 else wait
 
 
'tables avec identifiants ou pas
[avec_identifiant]
    identif=1
    if origine=1 then return:origine=0 else wait
 
[sans_identifiant]
    identif=0
    if origine=1 then return:origine=0 else wait
 
 
'tables avec en-têtes de colonne ou pas
[avec_entete]
    entete=1
    if origine=1 then return:origine=0 else wait
 
[sans_entete]
    entete=0
    if origine=1 then return:origine=0 else wait
 
 
'nom des champs encadrés par des guillemets
'   utile si un champ comporte un caractère qui est le caractère de séparation
[avec_guillemets]
    guillemet=1
    if origine=1 then return:origine=0 else wait
 
[sans_guillemets]
    guillemet=0
    if origine=1 then return:origine=0 else wait
 
 
'extension des fichiers table
[rien]
    wait
 
[ext_txt]
    rbtnEXT=1
    extension$="txt"
    if origine=1 then return:origine=0 else wait
 
[ext_dat]
    rbtnEXT=2
    extension$="dat"
    if origine=1 then return:origine=0 else wait
 
[ext_csv]
    rbtnEXT=3
    extension$="csv"
    if origine=1 then return:origine=0 else wait
 
[ext_libre]
    rbtnEXT=4
    print #gener.tbext,"!contents? extension$"
    if origine=1 then return:origine=0 else wait
 
 
'générer la base de données
[vers_affichage]
    surfenetre=1
    if origine=1 then return:origine=0 else wait
 
[sans_affichage]
    surfenetre=0
    if origine=1 then return:origine=0 else wait
 
 
[vers_fichier]
    surfichier=1
    if origine=1 then return:origine=0 else wait
 
[sans_ficher]
    surfichier=0
    if origine=1 then return:origine=0 else wait
 
 
[creer_nom_dossier_cb]
    'on arrive ici après avoir fait un choix dans une combobox
    gosub [creer_nom_dossier]
    wait
 
 
[creer_nom_dossier]
 
    'on arrive ici par un 'gosub'

    'lit les index des combobox de création du nom du jeu de table
    '(priorité à l'actuel contenu des combobox sauf s'il est 0)
    #gener.cbdatefile, "selectionindex? idx" : if idx<>indexDate and idx>0 then indexDate=idx
    #gener.cbheurefile, "selectionindex? idx" : if idx<>indexHeure and idx>0 then indexHeure=idx
    #gener.cbchamp1, "selectionindex? idx" : if idx<>indexChp1 and idx>0 then indexChp1=idx
    #gener.cbchamp2, "selectionindex? idx" : if idx<>indexChp2 and idx>0 then indexChp2=idx
    #gener.cbchamp3, "selectionindex? idx" : if idx<>indexChp3 and idx>0 then indexChp3=idx
 
 
    'top horaire
    j$=date$("yyyy/mm/dd")
    h$=time$()
 
    'déterminer la date de l'instant
    annee$=left$(j$,4)
    anneeCourte$=right$(annee$,2)
    mois$=mid$(j$,6,2)
    nomMois$=word$("jan fév mar avr mai juin juil aout sept oct nov dec",val(mois$))
    jour$=right$(j$,2)
 
    nbrejour=val(date$("days")) 'nbrejour=42561 -> samedi
    numjour=1+nbrejour-int(nbrejour/7)*7
    nomJour$=word$("mardi mercredi jeudi vendredi samedi dimanche lundi",numjour)
 
    'formatage de la date
    select case indexDate
        case 1:ladate$ = nomJour$
        case 2:ladate$ = nomMois$
        case 3:ladate$ = annee$
        case 4:ladate$ = jour$;sepdate$;mois$;sepdate$;anneeCourte$
        case 5:ladate$ = jour$;sepdate$;mois$;sepdate$;annee$
        case 6:ladate$ = nomJour$;sepdate$;nomMois$;sepdate$;anneeCourte$
        case 7:ladate$ = nomJour$;sepdate$;nomMois$;sepdate$;annee$
        case 8:ladate$ = jour$;sepdate$;nomMois$;sepdate$;anneeCourte$
        case 9:ladate$ = jour$;sepdate$;nomMois$;sepdate$;annee$ 
        case 10:ladate$ = anneeCourte$;sepdate$;mois$;sepdate$;jour$
        case 11:ladate$ = annee$;sepdate$;mois$;sepdate$;jour$
        case 12:ladate$ = anneeCourte$;sepdate$;nomMois$;sepdate$;nomJour$
        case 13:ladate$ = annee$;sepdate$;nomMois$;sepdate$;nomJour$
    end select
 
    'déterminer l'heure de l'instant
    heure$=left$(h$,2)
    min$=mid$(h$,4,2)
    sec$=right$(h$,2)
 
    'formatage de l'heure
    select case indexHeure
        case 1:lheure$ = heure$;"-";min$
        case 2:lheure$ = heure$;"-";min$;"-";sec$
        case 3:lheure$ = heure$;"h";min$ 
        case 4:lheure$ = heure$;"h";min$;"min"
        case 5:lheure$ = heure$;"h";min$;"min";sec$
        case 6:lheure$ = heure$;"h";min$;"min";sec$;"s"
    end select
 
    'récupération du nom du jeu de tables
    print #gener.tbnom,"!contents? lenom$"
 
    'construction du nom complet du jeu de tables
    nomdossier$=""
    separation$=" - "     'chaine de séparation des paramètres dans le nom du set

    sep1$=separation$
    select case indexChp1
        case 1 : champ1$="":sep1$=""
        case 2 : champ1$=ladate$
        case 3 : champ1$=lheure$
        case 4 : champ1$=lenom$
    end select
 
    sep2$=separation$
    select case indexChp2
        case 1 : champ2$="":sep2$=""
        case 2 : champ2$=ladate$
        case 3 : champ2$=lheure$
        case 4 : champ2$=lenom$
    end select
 
    select case indexChp3
        case 1 : champ3$=""
        case 2 : champ3$=ladate$
        case 3 : champ3$=lheure$
        case 4 : champ3$=lenom$
    end select
 
    if champ3$="" then sep2$=""
    if champ2$="" and champ3$="" then sep1$=""
    nomdossier$=champ1$+sep1$+champ2$+sep2$+champ3$
 
    'vérification de la validité de nomdossier$
    if nomdossier$="" then
 
        if lenom$<>"" then
            'on prend le nom qui a été entré dans la textbox
            'on l'attribue au nom du dossier et on met en conformité
            'les combobox avec cette situation
            nomdossier$=lenom$
            indexChp1=4:print #gener.cbchamp1,"selectindex ";indexChp1
            indexChp2=1:print #gener.cbchamp2,"selectindex ";indexChp2
            indexChp3=1:print #gener.cbchamp3,"selectindex ";indexChp3
 
        else
            'et s'il n'y a pas de nom dans la textbox, on informe l'utilisateur
            ligne1$="Choisir au moins un champ <date> ou <heure> dans"
            ligne2$="la section 'Formation du nom du jeu de tables,'"
            ligne3$="ou entrer un nom dans la ligne 'Nom du jeu de tables'"
            ligne4$="puis cliquer sur <Générer>"
            notice ligne1$+chr$(10)+ligne2$+chr$(10)+ligne3$+chr$(10)+ligne4$
        end if
 
    end if
 
    print #gener.stnomdef, nomdossier$
 
    return
 
 
[generer_la_base]
 
    gosub [creer_nom_dossier]
 
    print #gener.visu, ""
    print #gener.visu, "nom du jeu de tables : ";nomdossier$
 
    creertables=0   'à 1, donne l'accord pour créer la base
                    ' et reste à zéro en cas d'anomalie

    'affichage des tables sur fenêtre
    if surfenetre=1 then creertables=1
 
    'création des tables dans fichiers
    if surfichier=1 then
 
        's'il n'existe pas, on tente de créer le dossier de la base
        test = mkdir(nomdossier$)
        if test = 0 then
            'dossier prêt, on peut continuer
            creertables=1
        else
            'il y a un problème, on s'arrête là
            n1$="Problème : la création du dossier a échoué"
            n2$="La base de donnée n'est pas créée"
            n3$="Code de l'erreur : ";str$(test)
            notice n1$+chr$(10)+n2$+chr$(10)+n3$
        end if
 
    end if
 
    if creertables=1 then gosub [créer_tables]
 
    wait
 
 
[créer_tables]
    'crée les table, et les affiche dans la fenêtre et/ou les enregistre en fichiers

    enrActuel=0 'enregistrement actuel, on considère que l'enregistrement 1 porte le numéro 0

    'on traite toutes les tables
    for tables=1 to NbreTables
 
        'sélection de la table à afficher/transférer
        select case tables
            case 1 : restore [profs]
            case 2 : restore [matieres]
            case 3 : restore [enseigne]
        end select
 
        'on récupère le nom, le nombre d'enregistrements, de champs par enregistrement
        'et le nom des colonnes
        read nom$,nbenr,nbchamps,entete$
 
        'dimensionnement du tableau image du fichier
        '   nombre de données de la table d'origine, nbenr
        '   si case "champ vide", ajouter 1
        '   si case "en-tete", ajouter 1
        longueurTI = nbenr + premlignevide + entete
        dim Tableimage$(longueurTI)
 
        'si entete, on construit et on place l'entete dans la ligne 0 du tableau
        ta$=""
        enrActuel=0
        if entete=1 then    'il faut mettre le nom des colonnes dans la première ligne

            if identif=1 then   'on ajoute le nom de colonne 'identifiant'

               if guillemet=1 then     'on ajoute les guillemets
                    ta$=chr$(34)+"ident."+chr$(34)+separ$
               else
                    ta$="ident."+separ$ 'ou pas
               end if
            end if
 
            for col=1 to nbchamps   'on place le nom des colonnes dans la première ligne
                if guillemet=1 then 'on ajoute les guillemets
                    ta$=ta$+chr$(34)+word$(entete$,col," ")+chr$(34)+separ$
                else                'ou pas
                    ta$=ta$+word$(entete$,col," ")+separ$ 
                end if
            next
 
            'retrait du dernier séparateur
            tb$=left$(ta$, len(ta$)-len(separ$))
 
            'entrée de l'enregistrement dans le tableau image, futur fichier
            Tableimage$(enrActuel)=tb$ 
 
            'et on passe à l'enregistrement suivant
            enrActuel=enrActuel+1
 
        end if
 
 
        'si première ligne vide (à préciser,entièrement vide, ou champs vides avec les séparateurs ???)
        ta$=""
        if premlignevide then
 
            for col=1 to nbchamps
 
                if guillemet=1 then
                    ta$=ta$+chr$(34)+chr$(34)+separ$
                else
                    ta$=ta$+separ$ 
                end if
 
            next
 
            Tableimage$(enrActuel)=left$(ta$, len(ta$)-len(separ$))
            enrActuel=enrActuel+1
 
        end if
 
 
        'traitement de chaque enregistrement du tableau
        identifiant=0
        ta$=""
        comptenr=enrActuel-premlignevide-entete'    compteur d'enregistrement

        for enr=enrActuel to enrActuel+nbenr-1
 
            if identif=1 then
                if guillemet=1 then
                    ta$=chr$(34)+str$(comptenr)+chr$(34)+separ$
                else
                    ta$=str$(comptenr)+separ$ 
                end if
            end if
 
            for champ=1 to nbchamps
                read a$
                if guillemet=1 then
                    ta$=ta$+chr$(34)+a$+chr$(34)+separ$
                else
                    'si on trouve un caractère de séparation dans un champ
                    if instr(a$,separ$)<>0 then a$=chr$(34)+a$+chr$(34)
                    ta$=ta$+a$+separ$ 
                end if
            next
 
            Tableimage$(enr)=left$(ta$, len(ta$)-len(separ$))
            ta$=""
            comptenr=comptenr+1
        next
 
        'générer le chemin de la base et le nom des fichiers
        print #gener.visu,""
        print #gener.visu,"nom de la table : ";nom$+"."+extension$
        nomdufichier$=DefaultDir$+"\"+nomdossier$+"\"+nom$+"."+extension$
        print #gener.visu,"chemin et nom du fichier : ";nomdufichier$ 
 
        'affichage des tables sur fenêtre
        if surfenetre=1 then
            for a=0 to longueurTI-1
                print #gener.visu, Tableimage$(a)
            next
        end if
 
        'écriture des tables en fichier
        if surfichier=1 then
            open nomdufichier$ for output as #fichier
                for a=0 to longueurTI-1
                    print #fichier, Tableimage$(a)
                next
            close #fichier
        end if
 
    next
    return
 
 
[quitter]    'quitter le programme
    close #gener
    end
    wait
 
 
 
 
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 21/07/2017 à 22h08

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Pour dater le fichier, tu aurais pu te servir de ça:
Code VB :
 
    mois$ = "Jan Fév Mar Avr Mai Jun Jui Aou Sep Oct Nov Déc"
    today$ = date$("mm/dd/yyyy")
    j = date$(today$)
    jsem$ = word$("Mar Mer Jeu x Ven Sam x Dim Lun",int((j/7-int(j/7))*10)+1)
    date$ = jsem$+" "+mid$(today$,4,2)+" "+word$(mois$, val(today$))+"   "+left$(time$(),5)'right$(today$,4)

Qui te renvoie l'info dans: "date$"
____________________
Roro

   
Le 22/07/2017 à 01h22

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
ça me rappelle une histoire de combobox, dans laquelle on s'interrogeait sur l'utilité des "x" dans jsem$ ^^,

L'étape suivante pour la base de données, c'est le chargement des tables dans le programme, et j'ai le sentiment de pas avoir choisi le plus simple ;)

mais bon, même pas peur !



Edité par Christophe Le 22/07/2017 à 01h23
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 22/07/2017 à 09h42

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Citation:
j'ai le sentiment de pas avoir choisi le plus simple

c'est aussi mon avis
Il est plus simple de copier-coller dans un fichier des données venues d'ailleurs.
A ce propos, j'ai commencé un "nettoyeur de fichiers", je vais le reprendre.
Un simple truc où on entre par sélection et qui supprime toutes les occurrences de la sélection
Si quelqu'un connaît un soft ou éditeur qui fait ça, je suis preneur.

Edit: Cancel my last; "Notepad++" le fait (recherche/Remplacer)
____________________
Roro

   
Le 23/07/2017 à 00h54

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Citation:
Il est plus simple de copier-coller dans un fichier des données venues d'ailleurs

C'est pas toujours couronné de succès, surtout quand il y a des instructions de mise en page dedans, et il faut souvent se coltiner un nettoyage manuel qu'on a bien envie de confier à une moulinette écrite en JustBasic ;)

Citation:
Citation:
j'ai le sentiment de pas avoir choisi le plus simple

c'est aussi mon avis

je voulais dire que c'était un nouveau défi, je sais charger un fichier dans un tableau, mais je n'ai jamais chargé des fichiers dans des tableaux et la base est aujourd'hui une collection de fichiers. J'apprend le langage par la pratique, je ne gère pas un projet, du coup il est normal que tu aie un peu de mal à voir où je vais...

(ça s'appellerait "arriver au résultat par approximations successives" :) )
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 23/07/2017 à 09h35

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Citation:
nettoyage manuel

L'extraction des données brutes est délicat à confier à un programme, pour un type donné (html) c'est envisageable.
On peut agir sur le mode de collecte (enregistrer une html est différent de copier-... dedans)
Citation:
collection de fichiers

Pour gérer une collection par le programme, c'est par le nom; je préfère partir du principe que le programme et tout ce qui sy' rapporte est dans un seul dossier et que les chemins sont relatifs; ce qui évite bien du soucis.
On doit pouvoir faire une machine à mettre le bazar dans les fichiers.
Citation:
un peu de mal à voir où je vais

Ben, c'est que tu fais des choses travaillées dans des buts dont je me demande le but; on dirait que tu veux faire des fonctions Windows.
____________________
Roro

   
Le 23/07/2017 à 15h19

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 394
Citation:
L'extraction des données brutes est délicat à confier à un programme

Tout à fait, il faut savoir comment est organisé le fichier, et avoir souvent besoin de ce type de fichier. Sinon, on importe le fichier tel quel et on fait le ménage à la main dans le tableur.

Le module d'import d'un tableur est souvent trop généraliste, donc J'utilisais JB pour créer, à partir d'un fichier original, un fichier intermédiaire dont la mise en forme correspondait à ce que je voulais voir dans le tableur, puis j'importais ce fichier intermédiaire.

Donc tu sais d'où me viennent mes notions de séparateurs et formatages, et le pourquoi des options que je propose dans mon générateur de base de données ;)

Citation:
Pour gérer une collection par le programme, c'est par le nom; je préfère partir du principe que le programme et tout ce qui s'y rapporte est dans un seul dossier et que les chemins sont relatifs; ce qui évite bien du soucis.

C'est aussi comme ça que je vois le problème : la base est dans un dossier qui est dans le dossier du programme, comme ça on peut travailler sans soucis sur plusieurs bases indépendantes sans risquer de tout mélanger.

J'hésite entre deux options :

1. charger toute la base dans des tableaux, puis faire des requêtes portant sur ces tableaux. C'est ce que je fais depuis le début de ce fil. Avec cette méthode il y a en mémoire le reflet des fichiers de la base, il n'y a pas besoin d'accès disques mais on est limité en taille par la mémoire vive. Comme il n'est pas possible de nommer un tableau en utilisant des variables chaines (pour leur donner le nom du fichier qu'il contient), savoir à quoi correspond tel tableau ne peut se faire qu'indirectement et ça risque de compliquer le programme. j'entrevois une solution, cependant.

2. les requêtes pointent directement sur les fichiers de la base. A vue de nez, c'est plus simple, mais je n'aime pas l'idée de solliciter les disques à chaque recherche.

Citation:
tu fais des choses travaillées dans des buts dont je me demande le but; on dirait que tu veux faire des fonctions Windows

Mystère ;) (nonobstant le fait que je travaille sous Linux ? ;) ;) )
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 23/07/2017 à 19h09

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1905
Citation:
on est limité en taille
.
Purée..Moi je me demande quoi y mettre, et toi tu crains d'être limité en taille.
Mais qu'est-ce que tu compte y mettre dans cette base ?

Edit: Tiens sur "Jeux Vidéos", il y en a un qui a une liste de 20 millions de trucs à 5 ou 6 mots chaque
Il a l'air de faire de la recherche par mots
Il trouve que 3 secondes c'est trop long
Combien de temps mettrait JB à scanner la chose ? Un jour ou un an ?
____________________
Roro

   
Débutant » Tables et relations en Just/Liberty Basic tests de faisabilité d'une base de données  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie