PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2019 6:22

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 14 messages ] 
Auteur Message
 Sujet du message: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 8:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1590
Localisation: Belgique
"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.

_________________
Linux Mint / Windows 10 64 bits PB: 5.61 ; 5.62 beta


Dernière édition par microdevweb le Sam 18/Aoû/2018 11:16, édité 4 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 9:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1590
Localisation: Belgique
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:
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:
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:
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:
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:
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:
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.

_________________
Linux Mint / Windows 10 64 bits PB: 5.61 ; 5.62 beta


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 9:52 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1590
Localisation: Belgique
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:
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:
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:
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)

_________________
Linux Mint / Windows 10 64 bits PB: 5.61 ; 5.62 beta


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 10:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1590
Localisation: Belgique
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:
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:
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:
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:
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

_________________
Linux Mint / Windows 10 64 bits PB: 5.61 ; 5.62 beta


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 13:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 463
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 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 14:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1590
Localisation: Belgique
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:
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

_________________
Linux Mint / Windows 10 64 bits PB: 5.61 ; 5.62 beta


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 14:02 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3359
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:

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



Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 15:22 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 463
@G-Rom
Citation:
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 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 15:34 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3359
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 15:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 463
@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:
(ReadData(file,@MesClients(), SizeOf(Client))).     

_________________
Win7 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 16:00 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3359
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 :

Citation:
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 16:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 463
@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 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 17:03 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3359
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...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO débutants] les structures
MessagePosté: Sam 18/Aoû/2018 17:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 463
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 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 14 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye