Page 1 sur 1

[OK] Debug données d'une structure dans une procedure

Publié : lun. 05/mai/2014 12:36
par Ar-S
Bonjour,

Un moment que j'ai pas codé et je me retrouve coincé avec une histoire de syntaxe.
Entre 2 moments de taf je me suis lancé dans l'adaptation d'un jeu de plateau en PB.
Plus pour m'entrainer et me lancer ensuite dans la création d'un jeu de mon cru.

J'ai donc fait comme ceci pour préparer un tableau avec des données structurées. J'ai seulement oublié la syntaxe pour passer mes infos dans un debug.

Code : Tout sélectionner

; LIBERTALIA by Ar-S
; 

Declare.b ReadCards()


Macro RPS (key,defaut)
  ReadPreferenceString(key,defaut)
EndMacro

Macro RPL (Numkey,Numdefaut)
  ReadPreferenceLong(Numkey,Numdefaut)
EndMacro



Global Jour, EnMain, Abord, EnDefausse, NbrJoueurs, NbrButin
Global Pref$ = GetCurrentDirectory()+"pref\J1.txt"

Debug Pref$
#Equipage = 30 	; Nbr de carte totale par navire
#NbrJ   = 7		; 7 jrs de la semaine


Structure PERSO
  
  Name.s ; Nom de l'unité
  ; Pouvoir, point de vie et point d attaque
  ActionID.i
  PV.i
  PA.i
    
  ; Etapes d'un tour
  J.b ; Jour
  C.b ; Crepuscule
  N.b ; Nuit
  A.b ; Ancre
    
EndStructure

Global Dim Equipage.PERSO(30)


Procedure.b ReadCards()
	If OpenPreferences(Pref$)
	  Debug "Ouverture Pref OK" ; TEST
	  ExaminePreferenceGroups()
	  While NextPreferenceGroup()
	;     Debug "GROUPNAME : " + PreferenceGroupName()
	    Equipage(i)\Name = RPS("NAME","")
	    Equipage(i)\ActionID  = Val(PreferenceGroupName())
	    Equipage(i)\PV = Val(PreferenceGroupName())
	    Equipage(i)\PA = RPL("PA", 0)
	    Equipage(i)\J = RPL("J", 0)
	    Equipage(i)\C = RPL("C", 0)
	    Equipage(i)\N = RPL("N", 0)
	    Equipage(i)\A = RPL("A", 0)
	    
	    
	    
	  Wend
	  	ClosePreferences()
	  	ProcedureReturn 1
	  Else
	  	Debug "Erreur Lecture Pref"
	  ProcedureReturn 0
	EndIf
EndProcedure


Debug ReadCards()

Jusqu'ici tout va bien,
je souhaite maintenant debugger un des éléments du tableau.
Lorsque je fais de simple debug ça marche

Code : Tout sélectionner

    Debug Equipage(5)\Name
    Debug Equipage(5)\ActionID
    Debug Equipage(5)\PV
    Debug Equipage(5)\PA
    Debug Equipage(5)\J
    Debug Equipage(5)\C
    Debug Equipage(5)\N
    Debug Equipage(5)\A

 
Seulement je souhaiterai mettre ces debugs dans une procedure, et là je n'y arrive plus. J'ai une erreur de syntaxe.
Il me semble qu'array rentre en jeu mais je n'en suis plus sûr et la doc ne m'a pas avancée.

un truc du genre

Code : Tout sélectionner

Procedure DebugPerso(Array Equipage.PERSO(NumeroPerso) )
    Debug Equipage(NumeroPerso)\Name
    Debug Equipage(NumeroPerso)\ActionID
    Debug Equipage(NumeroPerso)\PV
    Debug Equipage(NumeroPerso)\PA
    Debug Equipage(NumeroPerso)\J
    Debug Equipage(NumeroPerso)\C
    Debug Equipage(NumeroPerso)\N
    Debug Equipage(NumeroPerso)\A
EndProcedure    



If ReadCards() <> 0

DebugPerso( ????????? )

EndIf 
j'ai bien essayé un simple

Code : Tout sélectionner

Procedure DebugPerso(NumeroPerso)
    Debug Equipage(NumeroPerso)\Name
    Debug Equipage(NumeroPerso)\ActionID
    Debug Equipage(NumeroPerso)\PV
    Debug Equipage(NumeroPerso)\PA
    Debug Equipage(NumeroPerso)\J
    Debug Equipage(NumeroPerso)\C
    Debug Equipage(NumeroPerso)\N
    Debug Equipage(NumeroPerso)\A
EndProcedure    



If ReadCards() <> 0

DebugPerso(5 )

EndIf
Mais j'ai des retours de 0

Merci pour le rappel. :D


======= CODE CORRIGE ========

Code : Tout sélectionner

; LIBERTALIA by Ar-S
; 

Declare.b ReadCards()


Macro RPS (key,defaut)
  ReadPreferenceString(key,defaut)
EndMacro

Macro RPL (Numkey,Numdefaut)
  ReadPreferenceLong(Numkey,Numdefaut)
EndMacro



Global Jour, EnMain, Abord, EnDefausse, NbrJoueurs, NbrButin
Global Pref$ = GetCurrentDirectory()+"pref\J1.txt"

Debug Pref$
#Equipage = 30 	; Nbr de carte totale par navire
#NbrJ   = 7		; 7 jrs de la semaine


Structure PERSO
  
  Name.s ; Nom de l'unité
  ; Pouvoir, point de vie et point d attaque
  ActionID.i
  PV.i
  PA.i
    
  ; Etapes d'un tour
  J.b ; Jour
  C.b ; Crepuscule
  N.b ; Nuit
  A.b ; Ancre
    
EndStructure

Global Dim Equipage.PERSO(30)


Procedure.b ReadCards()
	If OpenPreferences(Pref$)
	  ExaminePreferenceGroups()
	  While NextPreferenceGroup()
	     Debug "GROUPNAME : " + PreferenceGroupName()
	     i = Val(PreferenceGroupName() )
	    Equipage(i)\Name = RPS("NAME","")
	    Equipage(i)\ActionID  = Val(PreferenceGroupName())
	    Equipage(i)\PV = Val(PreferenceGroupName())
	    Equipage(i)\PA = RPL("PA", 0)
	    Equipage(i)\J = RPL("J", 0)
	    Equipage(i)\C = RPL("C", 0)
	    Equipage(i)\N = RPL("N", 0)
	    Equipage(i)\A = RPL("A", 0)
	    
	    Debug Equipage(i)\Name
	    
	  Wend
	  	ClosePreferences()
		ProcedureReturn 1
	  Else
	  	Debug "Erreur Lecture Pref"
		ProcedureReturn 0
	EndIf
EndProcedure



Procedure DebugPerso(Array Equipage.PERSO(1), NumeroPerso )
    Debug Equipage(NumeroPerso)\Name
    Debug Equipage(NumeroPerso)\ActionID
    Debug Equipage(NumeroPerso)\PV
    Debug Equipage(NumeroPerso)\PA
    Debug Equipage(NumeroPerso)\J
    Debug Equipage(NumeroPerso)\C
    Debug Equipage(NumeroPerso)\N
    Debug Equipage(NumeroPerso)\A
EndProcedure    


If ReadCards() = 1 

Debug ""
Debug "Test 1 : Nom du perso : " + Equipage(8)\Name
Debug "----LISTE Test 2----"
Debug ""
Debug DebugPerso(Equipage(),3 )

EndIf	


Re: Debug données d'une structure dans une procedure

Publié : lun. 05/mai/2014 13:51
par Mesa
Peut être comme ça, à vérifier :

Code : Tout sélectionner

Procedure DebugPerso(Array Equipage.PERSO(1), n ) ; Le 1 représente le nombre de dimensions du tableau

	Debug Equipage(n)\Name 
	Debug Equipage(n)\ActionID 
	Debug Equipage(n)\PV 
	Debug Equipage(n)\PA 
	Debug Equipage(n)\J 
	Debug Equipage(n)\C 
	Debug Equipage(n)\N 
	Debug Equipage(n)\A 
	EndProcedure     
	 
	 
	 
	If ReadCards() <> 0 
	 
	DebugPerso( Equipage(),5 ) 
	 
	EndIf  
M.

Re: Debug données d'une structure dans une procedure

Publié : lun. 05/mai/2014 16:00
par Ar-S
Merci Mesa,
Les retours du debug sont hélas toujours à 0
Mon fichier prefs est pourtant bien lu et mon tableau bien remplis.
Le truc étrange c'est que si je fais un Debug Equipage(i)\Name dans ma procédure, tout est bien listé
Mais si j'appelle les infos hors proce, c'est mort.

Code : Tout sélectionner

Structure PERSO
  
  Name.s ; Nom de l'unité
  ; Pouvoir, point de vie et point d attaque
  ActionID.i
  PV.i
  PA.i
    
  ; Etapes d'un tour
  J.b ; Jour
  C.b ; Crepuscule
  N.b ; Nuit
  A.b ; Ancre
    
EndStructure

Global Dim Equipage.PERSO(30)


Procedure.b ReadCards()

	If OpenPreferences(Pref$)
	  ExaminePreferenceGroups()
	  While NextPreferenceGroup()
	;     Debug "GROUPNAME : " + PreferenceGroupName()
	    Equipage(i)\Name = RPS("NAME","")
	    Equipage(i)\ActionID  = Val(PreferenceGroupName())
	    Equipage(i)\PV = Val(PreferenceGroupName())
	    Equipage(i)\PA = RPL("PA", 0)
	    Equipage(i)\J = RPL("J", 0)
	    Equipage(i)\C = RPL("C", 0)
	    Equipage(i)\N = RPL("N", 0)
	    Equipage(i)\A = RPL("A", 0)
	    
	    Debug Equipage(i)\Name
	    
	  Wend
	  	ClosePreferences()
		ProcedureReturn 1
	  Else
	  	Debug "Erreur Lecture Pref"
		ProcedureReturn 0
	EndIf
EndProcedure



Procedure DebugPerso(Array Equipage.PERSO(1), NumeroPerso )
    Debug Equipage(NumeroPerso)\Name
    Debug Equipage(NumeroPerso)\ActionID
    Debug Equipage(NumeroPerso)\PV
    Debug Equipage(NumeroPerso)\PA
    Debug Equipage(NumeroPerso)\J
    Debug Equipage(NumeroPerso)\C
    Debug Equipage(NumeroPerso)\N
    Debug Equipage(NumeroPerso)\A
EndProcedure    


If ReadCards() = 1 

Debug ""
Debug "Nom du perso : " + Equipage(8)\Name
Debug "----LISTE----"
Debug ""
Debug DebugPerso(Equipage(),3 )

EndIf	



Re: Debug données d'une structure dans une procedure

Publié : lun. 05/mai/2014 16:17
par graph100
Je pige pas le soucis.

Le code suivant utilise pas ta procédure de chargement qu'on ne peux pas utiliser (RPS RPL ?)
Mais on peut accéder au tableau dans le code principal et dans les procédures.

Code : Tout sélectionner

Structure PERSO
	
	Name.s ; Nom de l'unité
	; Pouvoir, point de vie et point d attaque
	ActionID.i
	PV.i
	PA.i
	
	; Etapes d'un tour
	J.b ; Jour
	C.b ; Crepuscule
	N.b ; Nuit
	A.b ; Ancre
	
EndStructure

; Global Dim Equipage.PERSO(30); ca fonctionne avec et sans !
Dim Equipage.PERSO(30)





Procedure DebugPerso(Array TabEquipage.PERSO(1), NumeroPerso )
	Debug TabEquipage(NumeroPerso)\Name
	
	TabEquipage(NumeroPerso)\Name + " - Ajout proc"
	
	; 		Debug TabEquipage(NumeroPerso)\ActionID
	; 		Debug TabEquipage(NumeroPerso)\PV
	; 		Debug TabEquipage(NumeroPerso)\PA
	; 		Debug TabEquipage(NumeroPerso)\J
	; 		Debug TabEquipage(NumeroPerso)\C
	; 		Debug TabEquipage(NumeroPerso)\N
	; 		Debug TabEquipage(NumeroPerso)\A
EndProcedure    



Equipage(0)\Name = "Arthur"
Equipage(1)\Name = "Couette"
Equipage(2)\Name = "Lili"

For i = 0 To 2
	DebugPerso(Equipage(), i)
Next


For i = 0 To 2
	Debug Equipage(i)\Name
Next

Re: Debug données d'une structure dans une procedure

Publié : lun. 05/mai/2014 17:00
par Ar-S
Merci pour ton intervention.
RPS RPL sont des macros que tu trouves sur le 1er fil.

Par rapport à ton code, je vois encore moins d’où viens mon soucis.
Revoilà le code à jour :

Code : Tout sélectionner

; LIBERTALIA by Ar-S
; 

Declare.b ReadCards()


Macro RPS (key,defaut)
  ReadPreferenceString(key,defaut)
EndMacro

Macro RPL (Numkey,Numdefaut)
  ReadPreferenceLong(Numkey,Numdefaut)
EndMacro



Global Jour, EnMain, Abord, EnDefausse, NbrJoueurs, NbrButin
Global Pref$ = GetCurrentDirectory()+"pref\J1.txt"

Debug Pref$
#Equipage = 30 	; Nbr de carte totale par navire
#NbrJ   = 7		; 7 jrs de la semaine


Structure PERSO
  
  Name.s ; Nom de l'unité
  ; Pouvoir, point de vie et point d attaque
  ActionID.i
  PV.i
  PA.i
    
  ; Etapes d'un tour
  J.b ; Jour
  C.b ; Crepuscule
  N.b ; Nuit
  A.b ; Ancre
    
EndStructure

Global Dim Equipage.PERSO(30)


Procedure.b ReadCards()
	If OpenPreferences(Pref$)
	  ExaminePreferenceGroups()
	  While NextPreferenceGroup()
	     Debug "GROUPNAME : " + PreferenceGroupName()
	    Equipage(i)\Name = RPS("NAME","")
	    Equipage(i)\ActionID  = Val(PreferenceGroupName())
	    Equipage(i)\PV = Val(PreferenceGroupName())
	    Equipage(i)\PA = RPL("PA", 0)
	    Equipage(i)\J = RPL("J", 0)
	    Equipage(i)\C = RPL("C", 0)
	    Equipage(i)\N = RPL("N", 0)
	    Equipage(i)\A = RPL("A", 0)
	    
	    Debug Equipage(i)\Name
	    
	  Wend
	  	ClosePreferences()
		ProcedureReturn 1
	  Else
	  	Debug "Erreur Lecture Pref"
		ProcedureReturn 0
	EndIf
EndProcedure



Procedure DebugPerso(Array Equipage.PERSO(1), NumeroPerso )
    Debug Equipage(NumeroPerso)\Name
    Debug Equipage(NumeroPerso)\ActionID
    Debug Equipage(NumeroPerso)\PV
    Debug Equipage(NumeroPerso)\PA
    Debug Equipage(NumeroPerso)\J
    Debug Equipage(NumeroPerso)\C
    Debug Equipage(NumeroPerso)\N
    Debug Equipage(NumeroPerso)\A
EndProcedure    


If ReadCards() = 1 

Debug ""
Debug "Test 1 : Nom du perso : " + Equipage(8)\Name
Debug "----LISTE Test 2----"
Debug ""
Debug DebugPerso(Equipage(),3 )

EndIf	


Sachant que le fichier J1.txt se présente de la sorte

Code : Tout sélectionner

[1]
NAME = PERROQUET DU CAPTITAINE
PA = 1
J = 1
C = 0
N = 0
A = 0

[2]
NAME = SINGE DU CAPTITAINE
PA = 1
J = 1
C = 0
N = 0
A = 0

[3]
NAME = MENDIANT
PA = 1
J = 1
C = 0
N = 0
A = 0

; jusqu'à 30

Re: Debug données d'une structure dans une procedure

Publié : lun. 05/mai/2014 21:34
par graph100
honnêtement j'ai cherché un moment... Sérieux ! Oublie pas d'incrémenter ton index i dans le chargement, tu ne remplis que la 1ere case de ton tableau.

En revanche, ya un truc bizarre qui se passe au niveau du debug. La fin de procedure de debug provoque un Debug de 0 , mais je ne vois vraiment pas pourquoi !!

Code : Tout sélectionner

; LIBERTALIA by Ar-S
; 


Macro RPS (_key_,_defaut_)
	ReadPreferenceString(_key_,_defaut_)
EndMacro

Macro RPL (_Numkey_,_Numdefaut_)
	ReadPreferenceLong(_Numkey_,_Numdefaut_)
EndMacro



Global Jour, EnMain, Abord, EnDefausse, NbrJoueurs, NbrButin
Global Pref$ = GetCurrentDirectory()+"J1.txt"

Debug Pref$
#Equipage = 30    ; Nbr de carte totale par navire
#NbrJ   = 7      ; 7 jrs de la semaine


Structure PERSO
	
	Name.s ; Nom de l'unité
	; Pouvoir, point de vie et point d attaque
	ActionID.i
	PV.i
	PA.i
	
	; Etapes d'un tour
	J.b ; Jour
	C.b ; Crepuscule
	N.b ; Nuit
	A.b ; Ancre
	
EndStructure

Global Dim Equipage.PERSO(30)


Procedure.b ReadCards()
	Debug "##### ReadCards()"
	
	If OpenPreferences(Pref$)
		ExaminePreferenceGroups()
		
		i = -1
		While NextPreferenceGroup()
			i + 1
			
			Debug "GROUPNAME : " + PreferenceGroupName()
			Equipage(i)\Name = RPS("NAME","")
			Equipage(i)\ActionID  = Val(PreferenceGroupName())
			Equipage(i)\PV = Val(PreferenceGroupName())
			Equipage(i)\PA = RPL("PA", 0)
			Equipage(i)\J = RPL("J", 0)
			Equipage(i)\C = RPL("C", 0)
			Equipage(i)\N = RPL("N", 0)
			Equipage(i)\A = RPL("A", 0)
			
			Debug Equipage(i)\Name
			
		Wend
		
		ClosePreferences()
		Debug "##### End ReadCards()"
		
		ProcedureReturn 1
	Else
		Debug "Erreur Lecture Pref"
		ProcedureReturn 0
	EndIf
EndProcedure



Procedure DebugPerso(Array TabEquipage.PERSO(1), NumeroPerso )
	
	Debug "DEB DEBUG"
	
	Debug ArraySize(TabEquipage())
	
	Debug NumeroPerso
	
	Debug TabEquipage(NumeroPerso)\Name + " TEST"
; 	Debug TabEquipage(NumeroPerso)\ActionID
; 	Debug TabEquipage(NumeroPerso)\PV
; 	Debug TabEquipage(NumeroPerso)\PA
; 	Debug TabEquipage(NumeroPerso)\J
; 	Debug TabEquipage(NumeroPerso)\C
; 	Debug TabEquipage(NumeroPerso)\N
; 	Debug TabEquipage(NumeroPerso)\A

a = 2

Debug "FIN DEBUG"

EndProcedure    


If ReadCards() = 1
	
	Debug ""
	Debug "Test 1 : Nom du perso : " + Equipage(2)\Name
	Debug "----LISTE Test 2----"
	Debug ""
	Debug DebugPerso(Equipage(), 2)
	
	Debug "DIRECT : "
	
	Debug Equipage(2)\Name
	
EndIf   



Re: Debug données d'une structure dans une procedure

Publié : lun. 05/mai/2014 22:04
par Ar-S
graph100 a écrit :honnêtement j'ai cherché un moment... Sérieux ! Oublie pas d'incrémenter ton index i dans le chargement, tu ne remplis que la 1ere case de ton tableau.
Ah p.tain merci ! mais quel b!te.
En faite l'incrémentation est i = Val(PreferenceGroupName() ) que j'avais bien zappé.
Mon code marche ainsi.

Désolé pour le temps perdu ^^ mais je suis passé 50 fois devant sans le voir :oops: , le NextPreferenceGroup() incrémentant les données dans le débug, je n'avais pas percuté que l'incrémentation ne se faisait pas dans le tableau. Mea Culpa

Re: [OK] Debug données d'une structure dans une procedure

Publié : mar. 06/mai/2014 8:54
par Fig
Merde ! J'avais posté un message à ce propos mais l'avait effacé, en me disant: " ca ne peut pas être ça, il n'a posté qu'un code incomplet c'est pourquoi i n'est pas incrémenté"... Comme quoi... :lol: