[TUTO débutants] les structures
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
[TUTO débutants] les structures
"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.
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
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO débutants] les structures
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 :
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"
Je ne sais pas pour vous, mais moi je trouve déjà ce code beaucoup plus élégant.
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.
Voici une petite astuce avec la commande "with" qui peut dans le cas de grosse structure vous simplifier la tâche.
Allons un peux plus loin en ajoutant une adresse à notre contact.
Aie peu t'être avez-vous penser faire comme ceci ?
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.
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.
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
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
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"
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
Aie peu t'être avez-vous penser faire comme ceci ?
Code : Tout sélectionner
Structure contact
nom.s
prenom.s
telephone.s
rue.s
numero.l
codePostal.l
localite.s
EndStructure
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
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
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO débutants] les structures
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
Avec une liste chaînée
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.
Comme vous l'aurez constaté implanter une liste de structure n'est pas très compliqué.
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
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
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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO débutants] les structures
L'héritage de structure.
Aie-le voici encore reparti dans son délire de programmation objet.
Ben non je vous rassure, mais "PureBasic" nous permet de faire des héritages de structure et on ne va pas sen priver.
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.
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 .
Vous pouvez constater que c'est assez simple à mettre en place
Et voici un code complet
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.
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.
Aie-le voici encore reparti dans son délire de programmation objet.
Ben non je vous rassure, mais "PureBasic" nous permet de faire des héritages de structure et on ne va pas sen priver.
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.
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()
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
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
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
Work at Centre Spatial de Liège
Re: [TUTO débutants] les structures
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
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
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO débutants] les structures
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 :
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
Work at Centre Spatial de Liège
Re: [TUTO débutants] les structures
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...
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
Re: [TUTO débutants] les structures
@G-Rom
Si c'est vraiment le cas, alors j'aurais d'autres questions à poser sur les fichiers mémoires
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?mais déjà , tu peu te passer de bdd pour ton logiciel
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
Re: [TUTO débutants] les structures
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.
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.
Re: [TUTO débutants] les structures
@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
Re: [TUTO débutants] les structures
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 :
Après , je te conseil rien du tout, a toi de voir. moi , je n'utiliserais pas de bdd.
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 :
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.SizeOf Client : 3 * 64*
....Client A....client B....client C....client N
{64,64,64} | {64,64,64} | {64,64,64} | etc...
Après , je te conseil rien du tout, a toi de voir. moi , je n'utiliserais pas de bdd.
Re: [TUTO débutants] les structures
@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)
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
Re: [TUTO débutants] les structures
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...
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...
Re: [TUTO débutants] les structures
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