Quelques fonctions que j'utilise dans mes projets

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Eric
Messages : 79
Inscription : dim. 08/juil./2007 21:38
Localisation : Nord
Contact :

Quelques fonctions que j'utilise dans mes projets

Message par Eric »

Salut à tous,

Voici quelques fonctions de j'utilise dans mes projets pour ListIcon:

Code : Tout sélectionner

; Auteur	RedLightLord
; Team		Purelog
; Date		08/01/2008
; Version	1.0.0.1
; Sauvegarde et Chargement ListIcon

Declare.l ListIcon_GetColumnCount(Tableau)
Declare ListIconSaveTXT(Tableau.l,Fichier.s,Separateur.c)
Declare ListIconLoadTXT(Tableau.l,Fichier.s)

; -----------------------------------------------------------------------------
; Compte le nombre de colonnes d'un Tableau
; -----------------------------------------------------------------------------
Procedure.l ListIcon_GetColumnCount(Tableau) 
  Protected a.l,x
  col.LV_COLUMN\mask = #LVCF_WIDTH 
  Repeat 
    a+1:x=SendMessage_(GadgetID(Tableau),#LVM_GETCOLUMN,a,@col) 
  Until x = 0 
  ProcedureReturn a 
EndProcedure
; -----------------------------------------------------------------------------
; Tableau == #ListIcon
; Fichier == Chemin+NomdeFichier
; Separateur == code ascii du séparateur par defaut c'est le point-virgule
; -----------------------------------------------------------------------------
Procedure ListIconSaveTXT(Tableau.l,Fichier.s,Separateur.c=';')
	Protected HandleFile,dummy.s,j.l,i.l
	HandleFile=CreateFile(#PB_Any,Fichier)
	If HandleFile
		; Sauve les données
		For i=0 To CountGadgetItems(Tableau)-1
			dummy=""
			For j=0 To ListIcon_GetColumnCount(Tableau)-1
				If j<ListIcon_GetColumnCount(Tableau)-1
					dummy+GetGadgetItemText(Tableau,i,j)+Chr(Separateur)
				Else
					dummy+GetGadgetItemText(Tableau,i,j)
				EndIf
			Next j
			WriteStringN(HandleFile,dummy,#PB_Ascii)
		Next i
		FlushFileBuffers(HandleFile)
		CloseFile(HandleFile)
	EndIf
EndProcedure
; -----------------------------------------------------------------------------
; Efface le Tableau et charge les données dedans
; -----------------------------------------------------------------------------
Procedure ListIconLoadTXT(Tableau.l,Fichier.s)
	Protected HandleFile.l,dummy.s
	If FileSize(Fichier)<>-1
		Handlefile=ReadFile(#PB_Any,Fichier)
		If HandleFile>0
			ClearGadgetItemList(Tableau)
			While Eof(HandleFile)=0
				dummy=ReadString(HandleFile,#PB_Ascii)
				ReplaceString(dummy,";",#LF$,2,1)
				ReplaceString(dummy,#TAB$,#LF$,2,1)
				AddGadgetItem(Tableau,-1,dummy)
			Wend
			CloseFile(HandleFile)
		EndIf
	Else
		MessageRequester("Informations","Le fichier "+Fichier+" n'existe pas.",#PB_MessageRequester_Ok)
	EndIf
EndProcedure
Les stats

Code : Tout sélectionner

; Auteur	RedLightLord
; Team		Purelog
; Date		29/02/2008
; Version	1.0.0.5
; Fonction de statistiques pour ListIcon
; 
; Valeur mini
; Valeur maxi
; Valeur d'écart-type
; Valeur moyenne
; 
; Toutes ces valeurs sont des doubles
; -----------------------------------------------------------------------------
; TableauDeValeurs 	== ID du ListIcon
; IndexColonne 		== Les calculs se feront sur cette colonne 
; IndexElement1		== Depuis cette ligne
; IndexElement2		== Jusqu'a cette ligne
; -----------------------------------------------------------------------------
Declare.d MaxD(n1.d,n2.d)
Declare.d MinD(n1.d,n2.d)
; -----------------------------------------------------------------------------
; Valeur Maxi
; -----------------------------------------------------------------------------
Procedure.d MaxD(n1.d,n2.d)
	If n1>n2
		ProcedureReturn n1
	Else
		ProcedureReturn n2
	EndIf
EndProcedure
; -----------------------------------------------------------------------------
; Valeur mini
; -----------------------------------------------------------------------------
Procedure.d MinD(n1.d,n2.d)
	If n1<n2
		ProcedureReturn n1
	Else
		ProcedureReturn n2
	EndIf
EndProcedure

Structure Freq
	Valeur.d
	Nbr.l
EndStructure

Global NewList Frequence.Freq()

Declare Calcul_Frequence(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Declare.d Calcul_Moyenne(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Declare.d Calcul_EcartType(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Declare.d Calcul_Mini(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Declare.d Calcul_Maxi(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)


Procedure Calcul_Frequence(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
	Protected Dummy.s,Valeur.f,i.l
	ClearList(Frequence())
	; Récupération de toutes les valeurs
	For i=IndexElement To CountGadgetItems(TableauDeValeurs)-1
		AddElement(Frequence())
		Dummy=GetGadgetItemText(TableauDeValeurs,i,IndexColonne)
		ReplaceString(Dummy,",",".",2,1)
		
		With Frequence()
			\Valeur=ValF(Dummy)
			\Nbr=0
		EndWith
	Next i
	; Calculs les frequences des valeurs
	If CountList(Frequence())>0
		SortStructuredList(Frequence(), 1, OffsetOf(Freq\Valeur),  #PB_Sort_Float)	
		For i=1 To CountList(Frequence())
			SelectElement(Frequence(),i-1)
			Valeur=Frequence()\Valeur
			ForEach Frequence()
				If Valeur=Frequence()\Valeur
					Frequence()\Nbr+1
				EndIf
			Next
		Next i
		; On efface les doublons
		ResetList(Frequence())
		If CountList(Frequence())>1
			SortStructuredList(Frequence(), 0, OffsetOf(Freq\Valeur), #PB_Sort_Float)
			For i=1 To CountList(Frequence())
				SelectElement(Frequence(),i-1)
				Valeur=Frequence()\Valeur
				While NextElement(Frequence())
					If Frequence()\Valeur=Valeur
						DeleteElement(Frequence(),1)
					EndIf
				Wend
			Next i
		EndIf
	EndIf	
EndProcedure

Procedure.d Calcul_Moyenne(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
	Protected Somme.d,i.l,Dummy.s
	Somme=0
	For i=IndexElement1 To IndexElement2
		Dummy=GetGadgetItemText(TableauDeValeurs,i,IndexColonne)
		ReplaceString(Dummy,",",".",2,1)		
		Somme+ValD(Dummy)
	Next i
	ProcedureReturn Somme/CountGadgetItems(TableauDeValeurs)
EndProcedure

Procedure.d Calcul_EcartType(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
	Protected i.l,Moyenne.d,Somme.f,Dummy.s
	Moyenne=Calcul_Moyenne(TableauDeValeurs,IndexColonne,IndexElement1,IndexElement2)
	For i=IndexElement1 To IndexElement2
		Dummy=GetGadgetItemText(TableauDeValeurs,i,IndexColonne)
		ReplaceString(Dummy,",",".",2,1)
    	Somme+Pow(Moyenne-ValF(Dummy),2)
    Next i
    ProcedureReturn Sqr(Somme/CountGadgetItems(TableauDeValeurs))
EndProcedure

Procedure.d Calcul_Mini(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
	Protected i.l,ValeurMini.d
	ValeurMini=999999.0
	For i=IndexElement1 To IndexElement2
		ValeurMini=MinD(ValD(GetGadgetItemText(TableauDeValeurs,i,IndexColonne)),ValeurMini)
		ProcedureReturn ValeurMini
	Next i
EndProcedure

Procedure.d Calcul_Maxi(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
	Protected i.l,ValeurMaxi.d
	ValeurMaxi=0.0
	For i=IndexElement1 To IndexElement2
		ValeurMaxi=MaxD(ValeurMaxi,ValD(GetGadgetItemText(TableauDeValeurs,i,IndexColonne)))
		ProcedureReturn ValeurMaxi
	Next i
EndProcedure
Bien sur, je n'ai pas inventé la roue et elles sont perfectibles.
Mais bon, elles pourront aidées certains

@+
Eric
Neosis
Messages : 113
Inscription : dim. 24/févr./2008 20:11

Message par Neosis »

ça va peut être mettre utile :) ...merci eric
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'aurais bien voulu tester, j'ai un peu la flemme de faire un code.

Mais c'est super de nous faire partager tes codes. :)
Répondre