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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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	

Dernière modification par Ar-S le lun. 05/mai/2014 22:06, modifié 2 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

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

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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	


~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

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

Message 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
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

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

Message 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   


_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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
Dernière modification par Ar-S le mar. 06/mai/2014 10:39, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Répondre