[TUTO débutants] les structures

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

[TUTO débutants] les structures

Message par microdevweb »

"Oméga" m'a suggéré de faire un tutoriel sur les structures. Je propose donc aux débutants en programmation ce petit tutoriel.

Plan du tutoriel :

Pourquoi; quand, comment?

Les listes de structure.

L'héritage de structure.
Dernière modification par microdevweb le sam. 18/août/2018 11:16, modifié 4 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [TUTO débutants] les structures

Message par microdevweb »

Pourquoi; quand, comment?

Qu'est-ce qu'une structure?
Une structure est un regroupement de variables, qui peuvent être du même type ou des types différents.


Pourquoi et comment les utiliser ?

Prenons un cas simple, une gestion de contact avec les informations suivantes.
Nom; Prénom; Téléphone

Sans structure on devrait écrire ceci :

Code : Tout sélectionner

EnableExplicit
Global nom.s,prenom.s,telephone.s
Remarque : dans cet exemple j'emploie des variables du type globales. En général ce type de variable est à proscrire.
Je vous recommande l'utilisation d'EnableExplicit" ceci vous forcera à déclarer les variables. Même si l'autodéclaration est un gain de temps, on risque un bug de fonctionnement (pas de compilation) suite à une faute de frappe et ce type d'erreur est difficile à résoudre


Vous me direz qu'il n'y a rien d'anormal. Et pourtant en développent de cette manière on va très vite s'enliser dans un code non structuré et cela deviendra très vite compliqué (surtout si l'on veut faire une liste de contacts)

Nous pouvons constater qu'il serait idéal de regrouper ces variables et ce que nous allons faire avec une "structure"

Code : Tout sélectionner

EnableExplicit
Structure contact
  nom.s
  prenom.s
  telephone.s
EndStructure
Global monContact.contact
Je ne sais pas pour vous, mais moi je trouve déjà ce code beaucoup plus élégant. :D

Mais que peu t on place dans une structure?

Eh bien vous pouvez placer tout type de variable de "PureBasic" des long; float; double; string etc...

Mais aussi des listes des tables de hachage (map) ou des tableaux et même des structures.

Comment accédé-t-on au contenu de la structure ? Rien de plus simple, regardez l'exemple.

Code : Tout sélectionner

EnableExplicit
Structure contact
  nom.s
  prenom.s
  telephone.s
EndStructure
Global.contact Pierre,Alain
Pierre\nom = "Bielen"
Pierre\prenom = "Pierre"
Pierre\telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)

Alain\nom = "Dupond"
Alain\prenom = "Alain"
Alain\telephone = "+33062252287"
Voici une petite astuce avec la commande "with" qui peut dans le cas de grosse structure vous simplifier la tâche.

Code : Tout sélectionner

EnableExplicit
Structure contact
  nom.s
  prenom.s
  telephone.s
EndStructure
Global.contact Pierre,Alain
With Pierre
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
EndWith
With Alain
  \nom = "Dupond"
  \prenom = "Alain"
  \telephone = "+33062252287"
EndWith
Allons un peux plus loin en ajoutant une adresse à notre contact.

Aie peu t'être avez-vous penser faire comme ceci ? :twisted:

Code : Tout sélectionner

Structure contact
  nom.s
  prenom.s
  telephone.s
  rue.s
  numero.l
  codePostal.l
  localite.s
EndStructure
Ben non même si cela est correct on peut mieux faire non . Comment allez-vous me dire ? Ben en créant une structure pour l'adresse tout simplement. :D

Code : Tout sélectionner

EnableExplicit
Structure adresse
  rue.s
  numero.l
  codePostal.l
  localite.s
EndStructure
Structure contact
  nom.s
  prenom.s
  telephone.s
  monAdresse.adresse
EndStructure
Global.contact Pierre,Alain
With Pierre
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
  \monAdresse\rue = "rue Sainry"
  \monAdresse\numero = 140
  \monAdresse\codePostal = 4870
  \monAdresse\localite = "Trooz"
EndWith
With Alain
  \nom = "Dupond"
  \prenom = "Alain"
  \telephone = "+33062252287"
  \monAdresse\rue = "rue du Cirque"
  \monAdresse\numero = 200
  \monAdresse\codePostal = 75000
  \monAdresse\localite = "Paris"
EndWith
Remarque : Il n'est malheureusement pas possible d'imbriquer plusieurs commandes "Width" (qui est est macro en vérité)

Pour résumé cette première partie quand doit-on utiliser une structure ? Du moment on l'on peut regrouper des variables il conseille de les structurer.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [TUTO débutants] les structures

Message par microdevweb »

Les listes de structure.

Dans la première partie, vous pouvez constater que ce code est extrêmement limité. En effet on doit créer une variable par contact et cela n'est absolument pas dynamique.

Nous allons donc créer 3 cas (tableaux,listes,map), à vous de choisir en fonction de votre projet ce qui vous conviendra le mieux.

Avec un tableau

Code : Tout sélectionner

EnableExplicit
Structure adresse
  rue.s
  numero.l
  codePostal.l
  localite.s
EndStructure
Structure contact
  nom.s
  prenom.s
  telephone.s
  monAdresse.adresse
EndStructure
Global Dim mesContacts.contact(2) ; un tableau de 2 contact
With mesContacts(0)
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
  \monAdresse\rue = "rue Sainry"
  \monAdresse\numero = 140
  \monAdresse\codePostal = 4870
  \monAdresse\localite = "Trooz"
EndWith
With mesContacts(1)
  \nom = "Dupond"
  \prenom = "Alain"
  \telephone = "+33062252287"
  \monAdresse\rue = "rue du Cirque"
  \monAdresse\numero = 200
  \monAdresse\codePostal = 75000
  \monAdresse\localite = "Paris"
EndWith
; on on affiche les données pour tester notre code
Define i
For i = 0 To ArraySize(mesContacts())-1
  With mesContacts(i)
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
  EndWith
Next
Avec une liste chaînée

Code : Tout sélectionner

EnableExplicit
Structure adresse
  rue.s
  numero.l
  codePostal.l
  localite.s
EndStructure
Structure contact
  nom.s
  prenom.s
  telephone.s
  monAdresse.adresse
EndStructure
Global NewList  mesContacts.contact() ; un liste chaînée dynamique
; Ajoute un élement à la liste
AddElement(mesContacts())
With mesContacts()
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
  \monAdresse\rue = "rue Sainry"
  \monAdresse\numero = 140
  \monAdresse\codePostal = 4870
  \monAdresse\localite = "Trooz"
EndWith
; Ajoute un élement à la liste
AddElement(mesContacts())
With mesContacts()
  \nom = "Dupond"
  \prenom = "Alain"
  \telephone = "+33062252287"
  \monAdresse\rue = "rue du Cirque"
  \monAdresse\numero = 200
  \monAdresse\codePostal = 75000
  \monAdresse\localite = "Paris"
EndWith
; on on affiche les données pour tester notre code
ForEach mesContacts()
  With mesContacts()
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
  EndWith
Next
Avec une table de hachage (Map)

Remarque : une table de hachage contrairement à ce que l'on pourrait croire est plus rapide qu'une liste chaînée.

Code : Tout sélectionner

EnableExplicit
Structure adresse
  rue.s
  numero.l
  codePostal.l
  localite.s
EndStructure
Structure contact
  nom.s
  prenom.s
  telephone.s
  monAdresse.adresse
EndStructure
Global NewMap   mesContacts.contact() ; un table de hachage dynamique
; Ajoute un élement à la liste
AddMapElement(mesContacts(),"pierre")
With mesContacts()
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
  \monAdresse\rue = "rue Sainry"
  \monAdresse\numero = 140
  \monAdresse\codePostal = 4870
  \monAdresse\localite = "Trooz"
EndWith
; Ajoute un élement à la liste
AddMapElement(mesContacts(),"alain")
With mesContacts()
  \nom = "Dupond"
  \prenom = "Alain"
  \telephone = "+33062252287"
  \monAdresse\rue = "rue du Cirque"
  \monAdresse\numero = 200
  \monAdresse\codePostal = 75000
  \monAdresse\localite = "Paris"
EndWith
; on on affiche les données pour tester notre code
ForEach mesContacts()
  With mesContacts()
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
  EndWith
Next

; Exemple d'accès depuis la clé
If FindMapElement(mesContacts(),"pierre")
  With mesContacts()
    Debug "DEPUIS LA CLE"
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
  EndWith
EndIf
If FindMapElement(mesContacts(),"alain")
  With mesContacts()
    Debug "DEPUIS LA CLE"
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
  EndWith
EndIf
Comme vous l'aurez constaté implanter une liste de structure n'est pas très compliqué. 8)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [TUTO débutants] les structures

Message par microdevweb »

L'héritage de structure.

Aie-le voici encore reparti dans son délire de programmation objet. :twisted:

Ben non je vous rassure, mais "PureBasic" nous permet de faire des héritages de structure et on ne va pas sen priver. :mrgreen:

Imaginons que nous désirions ajouter une liste de clients. On pourrait évidemment faire une nouvelle structure toute propre et neuve.

Mais les informaticiens sont en général un peu paresseux et quand ils peuvent se passer de taper du code ils n'hésitent pas à sauter sur l'occasion. :mrgreen:

Si on réfléchit bien, un client c'est un contact non. Il a seulement quelques informations supplémentaires.

Et c'est la que vient à la rescousse cette fameuse notion d'héritage (et sans que personne ne décède ça c'est cool).

Regardez plutôt ce code .

Code : Tout sélectionner

EnableExplicit
Structure adresse
  rue.s
  numero.l
  codePostal.l
  localite.s
EndStructure
Structure contact
  nom.s
  prenom.s
  telephone.s
  monAdresse.adresse
EndStructure
Structure client Extends contact
  nomSociete.s
  numTVA.s
  adressLivraison.adresse
EndStructure

Global NewList mesContacts.contact()
Global NewList mesClients.client()
Vous pouvez constater que c'est assez simple à mettre en place

Et voici un code complet

Code : Tout sélectionner

EnableExplicit
Structure adresse
  rue.s
  numero.l
  codePostal.l
  localite.s
EndStructure
Structure contact
  nom.s
  prenom.s
  telephone.s
  monAdresse.adresse
EndStructure
Structure client Extends contact
  nomSociete.s
  numTVA.s
  adressLivraison.adresse
EndStructure

Global NewList mesContacts.contact()
Global NewList mesClients.client()
; Ajoute un contact à la liste
AddElement(mesContacts())
With mesContacts()
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
  \monAdresse\rue = "rue Sainry"
  \monAdresse\numero = 140
  \monAdresse\codePostal = 4870
  \monAdresse\localite = "Trooz"
EndWith
; Ajoute un contact à la liste
AddElement(mesContacts())
With mesContacts()
  \nom = "Dupond"
  \prenom = "Alain"
  \telephone = "+33062252287"
  \monAdresse\rue = "rue du Cirque"
  \monAdresse\numero = 200
  \monAdresse\codePostal = 75000
  \monAdresse\localite = "Paris"
EndWith
; Ajoute un client à la liste
AddElement(mesClients())
With mesClients()
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
  \monAdresse\rue = "rue Sainry"
  \monAdresse\numero = 140
  \monAdresse\codePostal = 4870
  \monAdresse\localite = "Trooz"
  \nomSociete = "MicrodevWeb"
  \numTVA  = "BE:740.635.896"
  \adressLivraison\rue = " rue de la Livraison"
  \adressLivraison\numero = 20
  \adressLivraison\codePostal = 400
  \adressLivraison\localite = "Liège"
EndWith
; on on affiche les données pour tester notre code
Debug "CONTACTS"
ForEach mesContacts()
  With mesContacts()
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
  EndWith
Next

Debug "CLIENTS"
ForEach mesClients()
  With mesClients()
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
    Debug \nomSociete
    Debug \numTVA
    Debug \adressLivraison\rue
    Debug \adressLivraison\numero
    Debug \adressLivraison\codePostal
    Debug \adressLivraison\localite
  EndWith
Next
Allons un peux plus loin. Et si notre client pouvait avoir des contacts .

Ben c'est facile à faire, on va juste ajouter une liste de contacts à notre structure client.

Code : Tout sélectionner

Structure client Extends contact
  nomSociete.s
  numTVA.s
  adressLivraison.adresse
  List mesContacts.contact()
EndStructure
Et voici un code qui implémente cela

Remarque : Evidement ceci est code exemple dans un vrai logiciel on copierait juste l'adresse (mémoire) du contact dans la structure client.

Code : Tout sélectionner

EnableExplicit
Structure adresse
  rue.s
  numero.l
  codePostal.l
  localite.s
EndStructure
Structure contact
  nom.s
  prenom.s
  telephone.s
  monAdresse.adresse
EndStructure
Structure client Extends contact
  nomSociete.s
  numTVA.s
  adressLivraison.adresse
  List mesContacts.contact()
EndStructure

Global NewList mesContacts.contact()
Global NewList mesClients.client()
; Ajoute un contact à la liste
AddElement(mesContacts())
With mesContacts()
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
  \monAdresse\rue = "rue Sainry"
  \monAdresse\numero = 140
  \monAdresse\codePostal = 4870
  \monAdresse\localite = "Trooz"
EndWith
; Ajoute un contact à la liste
AddElement(mesContacts())
With mesContacts()
  \nom = "Dupond"
  \prenom = "Alain"
  \telephone = "+33062252287"
  \monAdresse\rue = "rue du Cirque"
  \monAdresse\numero = 200
  \monAdresse\codePostal = 75000
  \monAdresse\localite = "Paris"
EndWith
; Ajoute un client à la liste
AddElement(mesClients())
With mesClients()
  \nom = "Bielen"
  \prenom = "Pierre"
  \telephone = "+3242214888" ; numéro bidon ne me téléphoner pas ;)
  \monAdresse\rue = "rue Sainry"
  \monAdresse\numero = 140
  \monAdresse\codePostal = 4870
  \monAdresse\localite = "Trooz"
  \nomSociete = "MicrodevWeb"
  \numTVA  = "BE:740.635.896"
  \adressLivraison\rue = " rue de la Livraison"
  \adressLivraison\numero = 20
  \adressLivraison\codePostal = 400
  \adressLivraison\localite = "Liège"
  ; Et on ajoute un contact
  AddElement(\mesContacts())
  \mesContacts()\nom = "Durabon"
  \mesContacts()\prenom = "Olivier"
  \mesContacts()\telephone = "+32475 225 66 32"
  \mesContacts()\monAdresse\rue = "Rue de la Botte"
  \mesContacts()\monAdresse\numero = 35
  \mesContacts()\monAdresse\codePostal = 4370
  \mesContacts()\monAdresse\localite = "Blegny"
EndWith
; on on affiche les données pour tester notre code
Debug "CONTACTS"
ForEach mesContacts()
  With mesContacts()
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
  EndWith
Next

Debug "CLIENTS"
ForEach mesClients()
  With mesClients()
    Debug \nom
    Debug \prenom
    Debug \telephone
    Debug \monAdresse\rue
    Debug Str(\monAdresse\numero)
    Debug Str(\monAdresse\codePostal)
    Debug \monAdresse\localite
    Debug \nomSociete
    Debug \numTVA
    Debug \adressLivraison\rue
    Debug \adressLivraison\numero
    Debug \adressLivraison\codePostal
    Debug \adressLivraison\localite
    ; Affichage des contacts
    Debug "CONTACTS CLIENT"
    ForEach \mesContacts()
      Debug \mesContacts()\nom
      Debug \mesContacts()\prenom
      Debug \mesContacts()\telephone
      Debug \mesContacts()\monAdresse\rue
      Debug Str(\mesContacts()\monAdresse\numero)
      Debug Str(\mesContacts()\monAdresse\codePostal)
      Debug \mesContacts()\monAdresse\localite
    Next
  EndWith
Next
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [TUTO débutants] les structures

Message par omega »

Bonjour Microdevweb
C'est bien, c'est un vrai tuto pour débutant. Mais j'attends avec impatience l'utilité des structures par rapport aux tables sqlite. Je ne sais pas si c'est prévu dans ton programme tuto mais j'avoue que c'est très très utile, d'ailleurs c'est la raison principale pour laquelle je refais mon code de gestion commerciale. G-Rom et d'autres Pubistes de ce forum m'ont recommandé d'utiliser les structures mais, franchement, je ne sais pas encore pourquoi tant que je n'ai pas vu d'exemple en ce sens, je comprendrais dès que tu nous donnes certainement un exemple de mise à jour d'une table-sqlite (table client par exemple) en utilisant une ou plusieurs structures.
Merci et bonne continuation
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 structures

Message par microdevweb »

Omega,

Non ce n'est pas prévu car ça n'a pas vraiment de rapport il suffit simplement de copier la valeur de la base dans le champ de la structure adéquate.

voici un exemple :

Code : Tout sélectionner

Structure contact
  nom.s
  prenom.s
  telephone.s
  monAdresse.adresse
EndStructure

Global NewList mesContacts.contact()

Procedure load()
  Protected  req.s = "SELECT * FROM contacts"
  OpenDatabase(0,"myDb.db","","")
  If DatabaseQuery(0,req)
    While NextDatabaseRow(0)
    AddElement(mesContacts())
    With mesContacts()
      \nom = GetDatabaseString(0,0)
      \prenom = GetDatabaseString(0,1)
      \telephone = GetDatabaseString(0,2)
      ;etc ...
    EndWith
  Wend
  EndIf
EndProcedure
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: [TUTO débutants] les structures

Message par G-Rom »

Omega, sqlite est un moyen de sauvegarde / lecture de donnée , rien a voir avec les structures. c'est à partir d'une bdd que tu remplis une liste de clients venue d'une bdd...

le meme code que dans l'autre topic avec sauvegarde sur disque dur, après a toi , d'utilisé une bdd, le reseau , etc... mais déjà , tu peu te passer de bdd pour ton logiciel
à moins de vouloir partagé les datas avec un site web...

Code : Tout sélectionner


Structure Client
  Nom.s{64}         ; pour les io disque on a besoin de string de taille fixe sinon ca enregistre uniquement le pointeur sur le disque...
  Prenom.s{64}
  Telephone.s{64}
EndStructure

Global NewList MesClients.Client()

Procedure DebugClient(*client.Client)
  Debug *client\Nom  
  Debug *client\Prenom  
  Debug *client\Telephone
EndProcedure

Procedure SaveClients()
  file = CreateFile(#PB_Any,"c:\client.data")
  If file 
    ForEach MesClients()
      WriteData(file, @MesClients(), SizeOf(Client))
    Next
  CloseFile(file)  
  EndIf  
  
EndProcedure


Procedure LoadClients()
  file = ReadFile(#PB_Any,"c:\client.data")
  If file
    size = FileSize("c:\client.data")
    number = size / SizeOf(Client)
    For i = 0 To number - 1
      AddElement(MesClients())
      ReadData(file,@MesClients(), SizeOf(Client))
    Next
    CloseFile(file)
  EndIf
EndProcedure


; on ajoute des clients bidons

; Nouveau client

AddElement( MesClients() )
MesClients()\Nom = "Pierre"
MesClients()\Prenom = "Durand"
MesClients()\Telephone = "0645064506"


; Nouveau client

AddElement( MesClients() )
MesClients()\Nom = "Jean"
MesClients()\Prenom = "Bon"
MesClients()\Telephone = "0744064506"


; on sauvegarde sur le disque !
SaveClients()

; on efface les clients existants
ClearList( MesClients() )

; on charge depuis le disque dur 
LoadClients()

; on affiche 
 ForEach MesClients()
   Debug "-------------------------"
   DebugClient( @MesClients() )
 Next 

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

Re: [TUTO débutants] les structures

Message par omega »

@G-Rom
mais déjà , tu peu te passer de bdd pour ton logiciel
Tu es sûr que je n'ai pas besoin d'une bdd pour mon logiciel de gestion commerciale? Je suis étonné de ce que tu viens de dire ! J'ai besoin des fichiers client, fournisseur, facture, bon de réception, bon de livraison, bon de caisse, bon de versement, etc.... Tous ces fichiers n'exigent pas une Bdd? C'est sérieux G-Rom?
Si c'est vraiment le cas, alors j'aurais d'autres questions à poser sur les fichiers mémoires
Win7 (x64) 64 bits Pb 5.72
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: [TUTO débutants] les structures

Message par G-Rom »

Je viens de te donner un exemple, la bdd n'est pas une obligation, regarde mon code d'exemple, il démontre la simple sauvegarde & chargement de donnée...
c'est toi le maestro, si tu as envie d'utilisé les bdd , libre à toi, mais les bdd non absolument aucun rapport avec les structures, qui est le sujet de base.
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [TUTO débutants] les structures

Message par omega »

@G-Rom: [quote]D'après toi, pour mon logiciel de gestion commerciale, qu'est ce que tu me conseilles: utiliser Bdd sqlite ou fichier data? J'ai vu ton code exemple et je l'ai bien compris (enfin je crois). Tout est clair sauf sur un seul point: si je dois utiliser fichier data, comment faire pour structurer l'enregistrement du fichier data de la façon suivante: nomclient,adresse,numtel? Sur ton exemple, chaque enregistrement contient un seul champ, alors que mon programme demande plusieurs champs par fichier.

Code : Tout sélectionner

(ReadData(file,@MesClients(), SizeOf(Client))).     
Win7 (x64) 64 bits Pb 5.72
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: [TUTO débutants] les structures

Message par G-Rom »

C'est ta structure en mémoire qui est écrite dans le fichier final. il n'y a pas de notion "de champs" , une seule ligne suffit pour écrire le contenu de la mémoire sur le disque
WriteData() c'est ta structure qui définira comment est écrit le fichier final. la liste structurée n'est qu'une simple zone mémoire qui est copié physiquement sur le disque dur :
SizeOf Client : 3 * 64*
....Client A....client B....client C....client N
{64,64,64} | {64,64,64} | {64,64,64} | etc...
Tu peu rajouté des champs que tu veut a l'intérieur a l'exception des pointeurs qui ne servent à rien lors d'une sauvegarde, d'ou le string de taille fixe.

Après , je te conseil rien du tout, a toi de voir. moi , je n'utiliserais pas de bdd.
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [TUTO débutants] les structures

Message par omega »

@G-Rom: J'ai quelques questions importantes à poser si tu permets :
1. Y a t il une limite maximale du nombre d'enregistrements sur fichier Data?
2. Y a t il un moyen rapide pour récupérer l'ensemble des enregistrements du fichier data vers la structure ? sans passer par AddElement () pour chaque enregistrement (sinon si c rapide, cela me convient)
Win7 (x64) 64 bits Pb 5.72
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: [TUTO débutants] les structures

Message par G-Rom »

1- Oui, la taille de ta ram , de ton disque.
2- Oui, 2 solutions, la première alloué une liste de la taille de tes clients ( chaque élément correspond à un client ) , puis copié le fichier sur le pointeur du 1° element
le reste sera en théorie rempli comme il faut car la mémoire est normalement contigüe , n'étant pas sur de ce que je te dit, c'est donc pas safe.
la seconde méthode , utilisé AllocateMemory() est alloue la mémoire nécessaire pour copié les datas dans le buffer. bon, là , faut taquiner les pointeurs...
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [TUTO débutants] les structures

Message par omega »

Merci G-Rom, je vais essayer de m'exercer sur un fichier client avec utilisation d'une structure, si cela me convient, j'opterais pour cette solution pour mon logiciel. Merci Beaucoup G-Rom et a+
Win7 (x64) 64 bits Pb 5.72
Répondre