Partagez votre expérience de PureBasic avec les autres utilisateurs.
-
Guimauve
- Messages : 1015
- Inscription : mer. 11/févr./2004 0:32
- Localisation : Québec, Canada
Message
par Guimauve »
Je viens de complèter deux petites commandes écrire une Structure de données contenant des Chaînes de caractère et des nombres flottant.
En espérant que ça puisse aider certaine personne.
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure >>>>>
Structure Ship
Name.s
Speed.f
Size.f
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs >>>>>
Procedure SetShipName(*ObjetA.Ship, Name.s)
*ObjetA\Name = Name
EndProcedure
Procedure SetShipSpeed(*ObjetA.Ship, Speed.f)
*ObjetA\Speed = Speed
EndProcedure
Procedure SetShipSize(*ObjetA.Ship, Size.f)
*ObjetA\Size = Size
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs >>>>>
Procedure.s GetShipName(*ObjetA.Ship)
ProcedureReturn *ObjetA\Name
EndProcedure
Procedure.f GetShipSpeed(*ObjetA.Ship)
ProcedureReturn *ObjetA\Speed
EndProcedure
Procedure.f GetShipSize(*ObjetA.Ship)
ProcedureReturn *ObjetA\Size
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Update >>>>>
Procedure UpdateShip(*ObjetA.Ship, Name.s, Speed.f, Size.f)
SetShipName(*ObjetA, Name)
SetShipSpeed(*ObjetA, Speed)
SetShipSize(*ObjetA, Size)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Equal >>>>>
Procedure EqualShip(*ObjetA.Ship, *ObjetB.Ship)
SetShipName(*ObjetA, GetShipName(*ObjetB))
SetShipSpeed(*ObjetA, GetShipSpeed(*ObjetB))
SetShipSize(*ObjetA, GetShipSize(*ObjetB))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure WriteBinaryString(String$)
WriteLong(Len(String$))
WriteData(String$, Len(String$))
EndProcedure
Procedure.s ReadBinaryString()
Length = ReadLong()
String$ = Space(Length)
ReadData(String$, Length)
ProcedureReturn String$
EndProcedure
; Début de la démonstation
UnVaisseau.Ship
UpdateShip(UnVaisseau,"Mirage V",2500.0,20.00)
Debug "On créer un fichier de type binaire"
If CreateFile(0, "UnVaisseau.ship")
WriteBinaryString(GetShipName(UnVaisseau))
WriteFloat(GetShipSpeed(UnVaisseau))
WriteFloat(GetShipSize(UnVaisseau))
CloseFile(0)
EndIf
Load.Ship
Debug "On ouvre le fichier de type binaire et"
Debug "on copie les données dans une structure"
If ReadFile(0, "UnVaisseau.ship")
SetShipName(Load,ReadBinaryString())
SetShipSpeed(Load,ReadFloat())
SetShipSize(Load,ReadFloat())
CloseFile(0)
EndIf
Debug "On affiche le contenu de la Structure"
Debug GetShipName(Load)
Debug GetShipSpeed(Load)
Debug GetShipSize(Load)
-
Guimauve
- Messages : 1015
- Inscription : mer. 11/févr./2004 0:32
- Localisation : Québec, Canada
Message
par Guimauve »
Un exemple avec une liste chainée :
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure >>>>>
Structure StructTest
Byte.b
Word.w
Long.l
Float.f
String.s
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs >>>>>
Procedure SetStructTestByte(*ObjetA.StructTest, Byte.b)
*ObjetA\Byte = Byte
EndProcedure
Procedure SetStructTestWord(*ObjetA.StructTest, Word.w)
*ObjetA\Word = Word
EndProcedure
Procedure SetStructTestLong(*ObjetA.StructTest, Long.l)
*ObjetA\Long = Long
EndProcedure
Procedure SetStructTestFloat(*ObjetA.StructTest, Float.f)
*ObjetA\Float = Float
EndProcedure
Procedure SetStructTestString(*ObjetA.StructTest, String.s)
*ObjetA\String = String
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs >>>>>
Procedure.b GetStructTestByte(*ObjetA.StructTest)
ProcedureReturn *ObjetA\Byte
EndProcedure
Procedure.w GetStructTestWord(*ObjetA.StructTest)
ProcedureReturn *ObjetA\Word
EndProcedure
Procedure.l GetStructTestLong(*ObjetA.StructTest)
ProcedureReturn *ObjetA\Long
EndProcedure
Procedure.f GetStructTestFloat(*ObjetA.StructTest)
ProcedureReturn *ObjetA\Float
EndProcedure
Procedure.s GetStructTestString(*ObjetA.StructTest)
ProcedureReturn *ObjetA\String
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Update >>>>>
Procedure UpdateStructTest(*ObjetA.StructTest, Byte.b, Word.w, Long.l, Float.f, String.s)
SetStructTestByte(*ObjetA, Byte)
SetStructTestWord(*ObjetA, Word)
SetStructTestLong(*ObjetA, Long)
SetStructTestFloat(*ObjetA, Float)
SetStructTestString(*ObjetA, String)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure WriteBinaryString(String$)
WriteLong(Len(String$))
WriteData(String$, Len(String$))
EndProcedure
Procedure.s ReadBinaryString()
Length = ReadLong()
String$ = Space(Length)
ReadData(String$, Length)
ProcedureReturn String$
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
NewList Liste.StructTest()
String.s = "Bonjour !"
For Compteur = 0 To 5
AddElement(Liste())
UpdateStructTest(@Liste(), Byte.b, Word.w, Long.l, Float.f, String.s)
Byte = Byte + 1 + Compteur
Word = Word + 5 + Compteur
Long = Long + 10000 + Compteur
Float = 3.141592 + Compteur
String = "Allô le monde no. " + Str(Compteur) + "!"
Next
ForEach Liste()
Debug GetStructTestByte(@Liste())
Debug GetStructTestWord(@Liste())
Debug GetStructTestLong(@Liste())
Debug GetStructTestFloat(@Liste())
Debug GetStructTestString(@Liste())
Next
Debug "Création d'un fichier binaire"
If CreateFile(0, "Test.bin")
ForEach Liste()
WriteByte(GetStructTestByte(@Liste()))
WriteWord(GetStructTestWord(@Liste()))
WriteLong(GetStructTestLong(@Liste()))
WriteFloat(GetStructTestFloat(@Liste()))
WriteBinaryString(GetStructTestString(@Liste()))
Next
CloseFile(0)
EndIf
ClearList(Liste())
Debug "On montre que la liste est vide : "
Debug "Nombre élément = " + Str(CountList(Liste()))
Debug "On charge le fichier"
If OpenFile(0,"Test.bin")
Repeat
AddElement(Liste())
SetStructTestByte(@Liste(),ReadByte())
SetStructTestWord(@Liste(),ReadWord())
SetStructTestLong(@Liste(),ReadLong())
SetStructTestFloat(@Liste(),ReadFloat())
SetStructTestString(@Liste(),ReadBinaryString())
Until Eof(0)
EndIf
Debug "On montre ce que la liste contient."
ForEach Liste()
Debug GetStructTestByte(@Liste())
Debug GetStructTestWord(@Liste())
Debug GetStructTestLong(@Liste())
Debug GetStructTestFloat(@Liste())
Debug GetStructTestString(@Liste())
Next
-
Guimauve
- Messages : 1015
- Inscription : mer. 11/févr./2004 0:32
- Localisation : Québec, Canada
Message
par Guimauve »
Un autre exemple avec une liste chainée et un tableau statique Imbriqué
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure >>>>>
Structure TestStruc
Array.s[10]
Maths.f
Var.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs >>>>>
Procedure SetTestStrucArray(*ObjetA.TestStruc, Index.b, Valeur.s)
*ObjetA\Array[Index] = Valeur
EndProcedure
Procedure SetTestStrucMaths(*ObjetA.TestStruc, Maths.f)
*ObjetA\Maths = Maths
EndProcedure
Procedure SetTestStrucVar(*ObjetA.TestStruc, Var.l)
*ObjetA\Var = Var
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs >>>>>
Procedure.s GetTestStrucArray(*ObjetA.TestStruc, Index.b)
ProcedureReturn *ObjetA\Array[Index]
EndProcedure
Procedure.f GetTestStrucMaths(*ObjetA.TestStruc)
ProcedureReturn *ObjetA\Maths
EndProcedure
Procedure.l GetTestStrucVar(*ObjetA.TestStruc)
ProcedureReturn *ObjetA\Var
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Update >>>>>
Procedure UpdateTestStruc(*ObjetA.TestStruc, Maths.f, Var.l)
SetTestStrucMaths(*ObjetA, Maths)
SetTestStrucVar(*ObjetA, Var)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure WriteBinaryString(String$)
WriteLong(Len(String$))
WriteData(String$, Len(String$))
EndProcedure
Procedure.s ReadBinaryString()
Length = ReadLong()
String$ = Space(Length)
ReadData(String$, Length)
ProcedureReturn String$
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
NewList SuperList.TestStruc()
Maths.f = 3.125
Var.l = 5
For Compteur = 0 To 20
AddElement(SuperList())
For Index = 0 To 9
SetTestStrucArray(@SuperList(), Index, "Allo " + Str(Compteur * 5 + Index))
Next
UpdateTestStruc(@SuperList(), Maths.f, Var.l)
Maths = Maths + Compteur * 5
Var = Var + Compteur * 3
Next
Debug "On montre le contenu"
ForEach SuperList()
For Index = 0 To 9
Debug GetTestStrucArray(@SuperList(), Index)
Next
Debug GetTestStrucMaths(@SuperList())
Debug GetTestStrucVar(@SuperList())
Next
Debug "On créer un fichier"
If CreateFile(0, "SuperTest.bin")
ForEach SuperList()
For Index = 0 To 9
WriteBinaryString(GetTestStrucArray(@SuperList(), Index))
Next
WriteFloat(GetTestStrucMaths(@SuperList()))
WriteLong(GetTestStrucVar(@SuperList()))
Next
CloseFile(0)
EndIf
ClearList(SuperList())
Debug "On test si la liste est vide : "
Debug "Nombre d'élément = " + Str(CountList(SuperList()))
Debug "On ouvre le fichier"
If OpenFile(0, "SuperTest.bin")
Repeat
AddElement(SuperList())
For Index = 0 To 9
SetTestStrucArray(@SuperList(), Index, ReadBinaryString())
Next
SetTestStrucMaths(@SuperList(),ReadFloat())
SetTestStrucVar(@SuperList(),ReadLong())
Until Eof(0)
CloseFile(0)
EndIf
Debug "On montre le contenu après le chargement"
ForEach SuperList()
For Index = 0 To 9
Debug GetTestStrucArray(@SuperList(), Index)
Next
Debug GetTestStrucMaths(@SuperList())
Debug GetTestStrucVar(@SuperList())
Next