Comment Faire

Sujets variés concernant le développement en PureBasic
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Comment Faire

Message par julien »

~ Selon vous quel serai la methode la plus simple pour comparer des donné dans un fichier sous cette forme

***********************
Bonjour = Français
Hello = Anglais
Bonjour = N'est pas Anglais
Bonjour = Français
Hello= N'est pas Allemand
**********************

En fait je voudrai savoir combien Bonjour à de valeur différente,

dans cette exemple il à 2 valeur différente

Et ceci pour tous (Bonjour, Hello,.... qui sont aléatoire dans le fichier)

Je ne sais pas si je suis bien clair :?:

Bon Dimanche à tous et n'oubliez pas de changer l'heure :) ~
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

ben , peut-être en modifiant un peu le code que j'ai posté dans truc et astuce "compteur de mots dans un fichier" ?
il faudra chercher "Bonjour = xxxx " , puis isoler xxxx et utiliser l'arbre qui va se charger de te compter les versions différentes et combien de fois elles apparaissent
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Est-ce ce genre de résultat que tu souhaites ?

Code : Tout sélectionner

;PureBasic 3.89

#Null = 0

Structure Noeud
   Mot.s         ; le mot
   Compteur.l    ; compte le nombre d'apparition d'un mot 
   *Gauche.Noeud ; Mot inférieur
   *Droit.Noeud  ; Mot supérieur
EndStructure

Global *Racine.Noeud
*Racine = #Null

Procedure CompareMot(Mot1.s,Mot2.s,Casse.l)
   If Casse = 1
      Mot1 = UCase(Mot1)
      Mot2 = UCase(Mot2)
   EndIf   
   Index = 1 
   While Mid(Mot1,Index ,1) = Mid(Mot2,Index ,1) And Len(Mot1)>=Index 
      Index + 1 
   Wend 
   If Mid(Mot1,Index,1) = Mid(Mot2,Index ,1)
      Resultat = 0 
   ElseIf Mid(Mot1,Index ,1) < Mid(Mot2,Index ,1)
      Resultat = -1 
   Else 
      Resultat = 1 
   EndIf 
   ProcedureReturn Resultat
EndProcedure

Procedure AfficheArbre(*Noeud.Noeud)
   If *Noeud <> #Null
      AfficheArbre(*Noeud\Gauche)
      Debug *Noeud\Mot + " => " + Str(*Noeud\Compteur) + " fois"
      AfficheArbre(*Noeud\Droit)
   EndIf        
EndProcedure


Procedure Arbre(*Noeud.Noeud,Mot.s)
   
   If *Noeud = #Null
     
      *Noeud = AllocateMemory(SizeOf(Noeud))
      
      If *Noeud
     
         *Noeud\Mot = Mot
         *Noeud\Compteur = 1
         *Noeud\Gauche = #Null
         *Noeud\Droit = #Null
     
      Else
     
         MessageRequester("Erreur","Impossible d'allouer de la mémoire !",0)
         End
     
      EndIf     
       
   ElseIf CompareMot(Mot,*Noeud\Mot,1)=0
     
      *Noeud\Compteur + 1
      
   ElseIf CompareMot(Mot,*Noeud\Mot,1)<0
     
      *Noeud\Gauche=Arbre(*Noeud\Gauche,Mot)
      
   Else
     
     *Noeud\Droit=Arbre(*Noeud\Droit,Mot)
     
   EndIf
   
   ProcedureReturn(*Noeud)
   
EndProcedure


;Première série de tests
*Racine=Arbre(*Racine,"Bonjour = Français")  
*Racine=Arbre(*Racine,"Hello = Anglais")  
*Racine=Arbre(*Racine,"Bonjour = N'est pas Anglais")
*Racine=Arbre(*Racine,"Bonjour = Français")
*Racine=Arbre(*Racine,"Hello= N'est pas Allemand")  

AfficheArbre(*Racine)
Répondre