..................
..................
.........................
Dernière modification par Backup le ven. 07/oct./2011 12:20, modifié 2 fois.
Intéressant, merci.
Petite remarque, je pense quedevrait être à l'extérieur de la procédure gnozal_Remplace(), çà éviterait d'initialiser le tableau [global] AllowedChar() à chaque appel de cette procédure.
On peut placer ce bloc juste aprèsau début du code par exemple.
Petite remarque, je pense que
Code : Tout sélectionner
Structure MemoryArray
Byte.c[0]
EndStructure
Global Dim AllowedChar.c(255)
For i = '0' To '9'
AllowedChar(i) = 1
Next
For i = 'A' To 'Z'
AllowedChar(i) = 1
Next
For i = 'a' To 'z'
AllowedChar(i) = 1
Next
On peut placer ce bloc juste après
Code : Tout sélectionner
Global FontID1
FontID1 = LoadFont(1, "Arial", 14)
oui tu as raison !
aussi je pense que dans le cadre d'une procedure
c'est dommage de na pas pouvoir beneficier d'une zone
qui ne s'initialise qu'une fois
genre
procedure toto(a,b,c)
zone_init
structure
bla
bla
endstucture
dim tableau (x,y)
end_zone
; ici procedure standard
bla bla
bla
bla
endprocedure
ceserai cool , on pourrai avoir des procedure
qui soit vraiment des petit prg dans le prg
aussi je pense que dans le cadre d'une procedure
c'est dommage de na pas pouvoir beneficier d'une zone
qui ne s'initialise qu'une fois

genre
procedure toto(a,b,c)
zone_init
structure
bla
bla
endstucture
dim tableau (x,y)
end_zone
; ici procedure standard
bla bla
bla
bla
endprocedure
ceserai cool , on pourrai avoir des procedure
qui soit vraiment des petit prg dans le prg

D'ailleurs j'ai un doute.
Normalement, on doit pouvoir faire ce que tu dis grâce à la commande Defined().
Dans ce programme, normalement au deuxième passage (appel à la fonction toto) le tableau étant Global devrait être Defined() = #True mais non...
Qu'en pensez vous ?
Normalement, on doit pouvoir faire ce que tu dis grâce à la commande Defined().
Code : Tout sélectionner
Procedure toto()
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Global Dim TestArray(10)
TestArray(0) = 10
TestArray(1) = 11
TestArray(2) = 12
EndIf
EndProcedure
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Qu'en pensez vous ?
bonsoir
ça n'as pas l'air de fonctionner non plus hors procedure
cordialement
ça n'as pas l'air de fonctionner non plus hors procedure
cordialement
Code : Tout sélectionner
;Procedure toto()
For i=0 To 3
Debug Defined(TestArray, #PB_Array)
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Debug Defined(TestArray, #PB_Array)
Global Dim TestArray(10)
TestArray(0) = 10
TestArray(1) = 11
TestArray(2) = 12
EndIf
Next i
;EndProcedure
;toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
;toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Bonjour à tous
Pour mois ça fonctionne très bien dans les 2 cas
Exemple procédure
Vous pouvez remarquer que vous n'avez qu'une seule fois l'incrémentation
Exemple 2 dans un Prg
Ici aussi vous n'avez qu'une seule fois l'incrémentation
Pour mois ça fonctionne très bien dans les 2 cas
Exemple procédure
Code : Tout sélectionner
Procedure toto()
; Defined détermine si un objet tel qu'une structure, interface, variables etc. est déjà défini dans le programme.
; Le paramètre 'Nom' doit être spécifié sans aucune forme de décoration (sans le '#' pour une constante,
; sans LES '()' pour un tableau, une liste chaînée ou une procédure).
;
; Le paramètre 'Type' peut être une des valeurs suivantes:
; #PB_Constant
; #PB_Variable
; #PB_Array
; #PB_LinkedList
; #PB_Structure
; #PB_Interface
; #PB_Procedure
;
; Exemple:
;
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Global Dim TestArray(10)
TestArray(0) +10
TestArray(1) +11
TestArray(2) +12
EndIf
EndProcedure
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Exemple 2 dans un Prg
Code : Tout sélectionner
;Procedure toto()
Goto fin_sub:
sub3:
For i=0 To 3
Debug Defined(TestArray, #PB_Array)
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Debug Defined(TestArray, #PB_Array)
Global Dim TestArray(10)
TestArray(0) +10+1
TestArray(1) + 11+i
TestArray(2) + 12+i
EndIf
Next i
Return
fin_sub:
;EndProcedure
;toto()
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
;toto()
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
End
bonjour
defined() détecte bien le tableau? mais lorsque que celui à été crée en amont.
Avec le second exemple de @PAPIPP le test fonctionne en mettant le tableau en début de programme!
mince alors!
cordialement
defined() détecte bien le tableau? mais lorsque que celui à été crée en amont.
Avec le second exemple de @PAPIPP le test fonctionne en mettant le tableau en début de programme!
mince alors!
cordialement
Code : Tout sélectionner
Global Dim TestArray(10)
Goto fin_sub:
sub3:
For i=0 To 3
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Debug Defined(TestArray, #PB_Array)
TestArray(0) + 10+1
TestArray(1) + 11+i
TestArray(2) + 12+i
EndIf
Next i
Return
fin_sub:
;EndProcedure
;toto()
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
;toto()
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
End
On peut le faire avec des variables statiques.Dobro a écrit :aussi je pense que dans le cadre d'une procedure
c'est dommage de na pas pouvoir beneficier d'une zone
qui ne s'initialise qu'une fois
Code : Tout sélectionner
Static AllowedCharInitialized
If AllowedCharInitialized = #False
For i = '0' To '9'
AllowedChar(i) = 1
Next
For i = 'A' To 'Z'
AllowedChar(i) = 1
Next
For i = 'a' To 'z'
AllowedChar(i) = 1
Next
AllowedCharInitialized = #True
EndIf
Bonjour à tous
@Dobro
J'utilise bien la version PB 4.31
voici les résultats du premier prg
Et ici ceux du deuxième prg
@Gnozal
Tout à fait d'accord ici on maitrise tout
@Dobro
J'utilise bien la version PB 4.31
voici les résultats du premier prg
Code : Tout sélectionner
Global Dim TestArray(10)
10
11
12
Global Dim TestArray(10)
10
11
12
Global Dim TestArray(10)
10
11
12
Code : Tout sélectionner
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
11
14
15
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
11
14
15
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
11
14
15
Code : Tout sélectionner
On peut le faire avec des variables statiques.
faudrai voir a suivre le fil de la discussion !kernadec a écrit :bonjour
defined() détecte bien le tableau? mais lorsque que celui à été crée en amont.
Avec le second exemple de @PAPIPP le test fonctionne en mettant le tableau en début de programme!
mince alors!
le but etant que le tout se passe DANS une procedure !!
il 'a jamais ete question ici d'etre Hors de la procedure !!!

Mince alors !!
et j'ajoute et confirme que ceci ( le premier exemple de @PAPIPP )
ne fonctionne pas sur 4.31 ! (le tableau est réinitialisé a chaque fois )
on est deja 3 a le dire ....
@PAPIPP : j'en profite pour te dire que c'etait pas le peine d'ajoutert la doc
dans ton listing , a moins que tu nous prenne pour des bleus ....

ça y est j'chui ennervé pour la journée là !! pfffffff!

cette exemple ne marche pas !!
le tableau est réinitialisé a chaque fois !!
d'ailleurs cet exemple de PAPIPP est en fait la copie carbonne de l'exemple
de Flype ...(la doc en plus) mais bon
Code : Tout sélectionner
Procedure toto()
; Defined détermine si un objet tel qu'une structure, interface, variables etc. est déjà défini dans le programme.
; Le paramètre 'Nom' doit être spécifié sans aucune forme de décoration (sans le '#' pour une constante,
; sans LES '()' pour un tableau, une liste chaînée ou une procédure).
;
; Le paramètre 'Type' peut être une des valeurs suivantes:
; #PB_Constant
; #PB_Variable
; #PB_Array
; #PB_LinkedList
; #PB_Structure
; #PB_Interface
; #PB_Procedure
;
; Exemple:
;
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Global Dim TestArray(10)
TestArray(0) +10
TestArray(1) +11
TestArray(2) +12
EndIf
EndProcedure
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
@Gnozal ;: oui effectivement ça marche le static
mais tu admettra que la fonction Defined()
a un comportement etrange
