en PB, il semble que l'on ne puisse pas
- créer un tableau (dynamique) vide (i.e. 0 lignes)
- rendre un tableau (dynamique) vide

Ai-je bien compris ou suis-je passé à côté de quelque chose ?
Merci. Gilles
Code : Tout sélectionner
Dim montableau(0)
montableau(0)=1
Debug montableau(0)
Dim montableau(0)
Debug montableau(0)
montableau(0)=1
ReDim montableau(1)
Debug montableau(0)
Debug montableau(1)
Code : Tout sélectionner
Dim montableau(0)
montableau(0)=1
Debug montableau(0)
Dim montableau(0)
Debug montableau(0)
montableau(0)=1
ReDim montableau(1)
Debug montableau(0)
Debug montableau(1)
Debug "---------liste ------------"
NewList maliste()
Debug ListSize(maliste())
AddElement(maliste())
maliste()=1
Debug ListSize(maliste())
SelectElement(maliste(),0)
Debug maliste()
AddElement(maliste())
maliste()=2
AddElement(maliste())
maliste()=3
For sh=0 To ListSize(maliste())-1
SelectElement(maliste(),sh)
Debug maliste()
Next
Code : Tout sélectionner
If ArraySize(Pages()) = 0 And Pages(0) = ""
Tu as bien compris ^-^selzig a écrit :Ai-je bien compris ou suis-je passé à côté de quelque chose ?
Code : Tout sélectionner
Structure NewElement
a.s
b.i
EndStructure
NewList Elements.NewElement()
Debug ListSize(Elements())
CallDebugger
Code : Tout sélectionner
Dim MonTableau(0)
Code : Tout sélectionner
Redim MonTableau(Arraysize(MonTableau())+1)
MonTableau(Arraysize(MonTableau()) = ...
mais c'est le cas depuis l'existence du Basic aussi loin que je m'en souvienne.En ce qui concerne les tableaux, je considère cela comme une originalité (i.e. cela n'a rien de naturel) :
Tu es passé à côté de quelque chose... Et qui a des redondances à 2 niveaux de programmation. (Dans la continuité des détails techniques évoqués par autrui ci-dessus) Voici un exemple...Selzig a écrit :Bonjour,
en PB, il semble que l'on ne puisse pas
créer un tableau (dynamique) vide (i.e. 0 lignes)
rendre un tableau (dynamique) vide
...puisque Dim MonTableau(0) crée ou recrée un tableau contenant une ligne (même si
elle est vide)
Ai-je bien compris ou suis-je passé à côté de quelque chose ?
Code : Tout sélectionner
;********************************************************************************************************************************************************
; Je décide : "IntegerArray" comme "Tableau d'entiers" mais le programmeur est libre de nommer ça comme il veut et même de faire des faute d'accord....
Structure IntegerArray
Array Value.I(0)
EndStructure
; "T" comme (t)ableau, c'est moi qui ai décidé : même topo, libre au programmeur de baptiser son pointeur comme il l'entend...
Define *T.IntegerArray ; Seul obligation : bien préciser une structure définissant un tableau en son contenu
Debug *T
Debug "(Si c'est nul, Selzig peut mettre 'Résolu' à son problème ! )"
Debug "Continuons... Pour rester constructif !"
*T = AllocateMemory(SizeOf(ArrayInteger) )
Debug *T ; pointe vers un tableau ABSOLUMENT VIDE
InitializeStructure(*T, IntegerArray)
Debug *T ; normalement inchangé MAIS pointe vers un tableau ayant une valeur entière en index 0
; Ecrivons dans ce tableau...
*T\Value(0) = 99
;Affichons...
Debug *T\Value(0)
; "Amusons"-nous : redéfinissons la taille du tableau sans effacement des données...
Redim *T\Value(1 << 23) ; Allez hop ! Tableau de...
; 64 méga en 32 bits
; et 128 méga en 64 bits
Debug "Si 99, alors redimensionnement sans effacement ok : " + Str(*T\Value(0) )
*T\Value($FFFFFF) = 101 ; dalmatiens...
debug "Nombre de dalmatiens... " + Str(*T\Value($FFFFFF) )
; Un petit redimensionnement avec effacement...
Dim *T\Value(2)
; Un déguelingage de tableau
ClearStructure(*T, IntegerArray)
;Huheup!! On n'est pas satisfait : on est sceptique sur l'efficacité du déguelingage. On va vérifier autrement...
;Soyons fous : libérons de la mémoire qui risquerait de ne pas en libérer, étant donné qu'on est sceptique...
FreeMemory(*T)
; Et passons à la méthode "Fred te prend par la main..." ....
AllocateStructure(*T, IntegerArray)
; Allouons 1 gigaoctet... (ou 2 selon mode 32/64 bits)
Dim *T\Value($7ffFFff)
*T\Value($7ffFFff) = 103 ; comme l'un des préfixes des instructions 16 bits...
... ou comme la Peugeot !
MessageResquester(Str(*T\Value($7ffFFff) ), "Regarde tes ressources en mémoire...")
ClearStructure(*T, IntegerArray)
MessageResquester("", "Regarde une 2ème fois tes ressources en mémoire...")
InitializeStructure(*T, IntegerArray)
Dim *T\Value($7ffFFff)
MessageResquester("Montagnes russes", "Regarde une 3ème fois tes ressources en mémoire...")
FreeStructure(*T, IntegerArray)
*T = 'Hu??'
; ici, je me sers du pointeur de tableau pour faire n'importe nawak, je ne gaspillerai rien
; en tout cas, *T\Value(0) n'existe pas
MessageResquester("Montagnes russes", "Regarde une 4ème fois tes ressources en mémoire...")
; Allez une dernière pour la route...
AllocateStructure(*T, IntegerArray)
Dim *T\Value(1 << 27) ; Toujours 1 à 2 Gigots selon 32/64 machins
ClearStructure(*T, IntegerArray)
FreeMemory(*T)