[TUTO débutants] les modules

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [TUTO débutants] les modules

Message par Ar-S »

@Micoute..
Je rejoints Falsam.
Même si l'intention est bonne, ton 1er code est hors sujet et le second (conversion en module) n'est pas un exemple à suivre du fait qu'un module doit pouvoir être importé par autrui sans que cela ne puis générer de conflits. Et oui c'est censé être une série de fonctions à part entière plutôt qu'un truc autonome.

Même si les données intra modules sont censée être protégées dedans, si un utilisateur mets un

Code : Tout sélectionner

Enumeration Fenetres
    #Fenetre_edition
  EndEnumeration
dans son code (car il ne se souviendra pas forcément des constantes de ton module) je me dis que ça peut chinoiser.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [TUTO débutants] les modules

Message par omega »

Bonjour Falsam et merci pour ta proposition.
Je viens de jeter un coup d'oeil sur les fichiers Json. Je voudrais juste savoir pourquoi choisir Json (avantage par rapport à sqlite par exemple)
Merci
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [TUTO débutants] les modules

Message par Ar-S »

Parce que c'est simple, c'est un format de données ouvert donc interprété par x langages JavaScript, PHP, Perl, Python, Ruby, Java,...
Permet de stocker des données de différents types : chaînes de caractères (y compris des images en base64), nombres, tableaux (array), objets, booléens (true, false), la valeur null.
Sa structure en arborescence et sa syntaxe simple lui permet de rester très "léger" et efficace.
plus d'infos ici : https://www.alsacreations.com/article/l ... types.html
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: [TUTO débutants] les modules

Message par Marc56 »

Je viens de jeter un coup d'oeil sur les fichiers Json. Je voudrais juste savoir pourquoi choisir Json (avantage par rapport à sqlite par exemple)
Savoir que comme pour les fichiers XML, les fichiers JSON au niveau disque, on lit ou écrit tout le fichier à chaque fois.

C'est logique, ce sont des flats files (fichiers plats, c'est à dire du texte brut) C'est un avantage (lisibilité) et un inconvénient: il faut "pousser" tout quand on remplace une donnée par une autre de taille différente.

De plus, si on travaille sur plusieurs enregistrements et qu'on ne sauvegarde pas à chaque modification (ou qu'on ne stocke pas les données "modifiées" dans une autre structure), si on fait une erreur sur un enregistrement on perd les autres modifications effectuées depuis à moins de recopier les données validées avant dans la structure à écrire.

Si plusieurs utilisateurs travaillent sur la même source de données, ils ont chacun une copie des données et aucune synchro de données ou alors il faut gérer un verrou en manuel.

Les fichier JSON c'est bien pour sauver un paquet de données disparates ou pour de petites bases type carnet d'adresse, mais pour quelques centaines d’enregistrements ou plus ce n'est pas adapté.

:wink:
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [TUTO débutants] les modules

Message par omega »

Les fichier JSON c'est bien pour sauver un paquet de données disparates ou pour de petites bases type carnet d'adresse, mais pour quelques centaines d’enregistrements ou plus ce n'est pas adapté.
J'ai besoin au moins de 3000 enregistrements (c'est le contenu de mon fichier livraison (base sqlite).
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [TUTO débutants] les modules

Message par microdevweb »

Le problème avec un fichier Json qui n'est rien d'autre qu'un fichier texte balisé, il faudra charger tous les records en mémoire. Cette opération est faite au lancement du soft donc cela ne se sentira pas.

Par contre chaque recherche va demander de parcourir toute la liste jusqu’à trouvé le bon record et si c'est dernier. Maintenant avec 3000 records cela ne devrais pas prendre trop de temps par contre avec plus.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [TUTO débutants] les modules

Message par falsam »

microdevweb a écrit :Par contre chaque recherche va demander de parcourir toute la liste jusqu’à trouvé le bon record
Non pas du tout.

Un fichier JSON contenant une suite d'enregistrements est obligatoirement associé à une liste chaînée ou une map. Tu auras compris que associée à une map la recherche est ultra rapide.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [TUTO débutants] les modules

Message par microdevweb »

falsam a écrit : Un fichier JSON contenant une suite d'enregistrements est obligatoirement associé à une liste chaînée ou une map. Tu auras compris que associée à une map la recherche est ultra rapide.
Oui ça je sais mais avec une structure du genre

Code : Tout sélectionner

Structure contact
  id.l
  nom.s
  adresse.s
  localite.s
EndStructure
On prendra par exemple l'id comme clé, mais si on doit trouvé un nom ? Alors il faut faire plusieurs map mémorise l'id. Maintenant si on veut faire une recherche du type like ?

Donc pour moi une base Sqlite est plus approprié et pas plus compliqué à mettre en place.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: [TUTO débutants] les modules

Message par Marc56 »

Si on sauvegarde dans un fichier JSON, ça veut dire qu'on a peu de données, qu'on charge tout en RAM et donc que l'indexation ne sert à rien.

(Au siècle dernier, FoxPro 2 (DOS) conseillait de ne faire des fichiers d'index qu'à partir de 100 000 enregistrements... et on fonctionnait sur des PC 286 à 12MHz, c'est dire si on sous évalue les possibilités actuelles des PC et on fait des fichiers d'index pour rien le plus souvent, sauf pour gérer les doublons sur les clés)

Bref, si on charge toutes les données en mémoire, dans une liste structurée, il est facile de parcourir tous les champs (avec ForEach)
Pour une recherche LIKE, il suffit d'utiliser Left(), Right(), Ucase(), Lcase()
(C'est par contre plus compliqué pour faire une recherche par phonème.)
(Programmation propre, enfin j’essaye)

Code : Tout sélectionner

EnableExplicit

Structure Type_contact
  id.l
  nom.s
  adresse.s
  localite.s
EndStructure

NewList Contact.Type_contact()

With Contact()
    AddElement(Contact()) : \id = 1 : \nom = "AAA"    
    AddElement(Contact()) : \id = 2 : \nom = "BBB"    
    AddElement(Contact()) : \id = 3 : \nom = "CCC"    
    AddElement(Contact()) : \id = 4 : \nom = "DDD"    
    AddElement(Contact()) : \id = 5 : \nom = "EEE"    
EndWith

ForEach Contact()
    With Contact()
        Debug "ID: " + \id + " Nom: " + \nom
    EndWith
Next

ForEach Contact()
    If Contact()\nom = "DDD" 
        Debug ""
        Debug "Trouvé par nom: " + Contact()\nom + " ID: " + Contact()\id
        Break
    EndIf
Next

ForEach Contact()
    If Left(Contact()\nom, 1) = "C" 
        Debug ""
        Debug "Commence par C: " + Contact()\nom + " ID: " + Contact()\id
        Break
    EndIf
Next

End
Mais cela dit, JSON n'est pas une base de données, c'est une structure qu'on sauvegarde dans un fichier texte.
C'est comme un fichier XML
C'est même moins bien qu'un fichier pref (fichier INI) qui lui est capable de faire des lectures écritures partielles.

Ça n'a rien à faire dans un programme de gestion de stock, de compta, de facturation qui va vite avoir plusieurs milliers d'enregistrements.

:wink:
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: [TUTO débutants] les modules

Message par boby »

>>>>>>>>>>>[TUTO débutants] les modules<<<<<<<<<<<<<<<<

Et donc sinon le Json... On disait quoi à propos d'un forum illisible ?
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: [TUTO débutants] les modules

Message par Marc56 »

boby a écrit :>>>>>>>>>>>[TUTO débutants] les modules<<<<<<<<<<<<<<<<
Et donc sinon le Json... On disait quoi à propos d'un forum illisible ?
Un forum est un lieu de conversation, et toute conversation humaine peut dériver.
Même les chatbost qu'on trouvent sur les sites de e-commerce dérivent aussi :P (mais à cause de la pauvreté de l'« intelligence artificielle »)

Quand ça dérive trop, ou sur demande aimablement formulée auprès d'un modo, celui-ci a une fonction pour scinder le topic en 2 au bon endroit et donner un nouveau titre.
(ici, il faudra couper à partir de la réponse d'Omega page 1 et déplacer la suite ailleurs)

:idea: Tu as un petit point d’exclamation rouge en bas à droite (si tu es connecté) pour signaler directement aux modos n'importe quel message.

:wink:
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [TUTO débutants] les modules

Message par omega »

Regardez ce que j'ai trouvé sur le net:The absolute maximum length is the largest possible length for a JSON type. This limit is 16776192 bytes.
https://info.teradata.com/htmlpubs/DB_T ... 28253.html
Win7 (x64) 64 bits Pb 5.72
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: [TUTO débutants] les modules

Message par boby »

Répondre