IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

comptabiliser nombre d'occurence [WD16]


Sujet :

WinDev

  1. #21
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 030
    Points : 9 428
    Points
    9 428
    Par défaut
    Bonjour,
    A mon avis la solution de MailSpam est la plus rapide car on ne parcourt le fichier qu'une seule fois tandis qu'avec les chaineOccurrence on le fait plusieurs fois.


    Ami calmant, J.P

  2. #22
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 030
    Points : 9 428
    Points
    9 428
    Par défaut
    je retire ce que je viens de dire

    En effet j'ai fait un test sur un fichier de 903 ko avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    MonBuffer est un Buffer
    x est un entier
    y est un entier
    TableauCar est un tableau de 256 entiers
    DuréeMaFonction est une Durée
    MonBuffer = fChargeBuffer("f:\french.txt")
    ChronoDébut
    POUR  x = 1 _A_ Taille(MonBuffer)
    y = Asc(MonBuffer[[x]])	
    TableauCar[y]++	
    FIN
    DuréeMaFonction  = ChronoFin()
    Info(DuréeMaFonction)
    // affichage du resultat on affiche chaque elements du tableau
    POUR Carac = 1 A 255 
    	Trace(Caract(Carac) + " : "+TableauCar[Carac] +" occurrences")
    FIN
     
    taRecapOccurence est un tableau associatif d'entiers
    sMonFic est une chaîne
    cMonCar est un caractère
    toto est un entier
    sMonFic = fChargeTexte("f:\french.txt")
    ChronoDébut
    POUR nIdCar = 1 _A_ Taille(sMonFic)
    	cMonCar = sMonFic[[nIdCar]]
    	//	il faut peut être faire un contrôle sur le type de caractère genre Tab ou RC etc...
    	taRecapOccurence[cMonCar] = taRecapOccurence[cMonCar] +1
    FIN
    DuréeMaFonction  = ChronoFin()
    Info(DuréeMaFonction)
    // affichage du resultat on affiche chaque elements du tableau
    POUR toto = 1 _A_ 255
    	Trace(Caract(toto) + " : "+taRecapOccurence[Caract(toto)] +" occurrences")
    FIN
    resultat est un tableau associatif d'entier
    MonCarac est un entier 
    Fichier est une chaîne
     
    Fichier = fChargeTexte("f:\french.txt")
    ChronoDébut
    POUR MonCarac = 1 A 255 
    	resultat[MonCarac] = ChaîneOccurrence(Fichier,Caract(MonCarac))
    FIN
    DuréeMaFonction  = ChronoFin()
    Info(DuréeMaFonction)
    // affichage du resultat on affiche chaque elements du tableau
    POUR MonCarac = 1 A 255 
    	Trace(Caract(MonCarac) + " : "+resultat[MonCarac] +" occurrences")
    FIN
    En mode Debug j'optiens les temps suivants
    1ère méthode : 947 ms
    2ème méthode : 1819 ms
    3ème méthode : 647 ms

    donc c'est la méthode de tatayo avec ChaineOccurrence qui est la plus rapide ( cela vient certainement du fait que cette fonction doit être optimisée (codée en assembleur ou c ou c++).

    Ami calmant, J.P ;-)

  3. #23
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 030
    Points : 9 428
    Points
    9 428
    Par défaut
    bonjour,

    et en créant une dll fctLettres.dll en utilisant code::blocks avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include "main.h"
    using namespace std;
     
    extern "C"
    __declspec(dllexport)
    int	cptLettres(int c[],char chaine[])
    {
        int i = 0;
            while (chaine[i] != '\0')
    	{
    	    // remplissage du tableau
    	    c[(int)chaine[i++]]++;
    	}
     
    	return 1;
     
    }
    et appel en windev :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    MonBuffer est un Buffer
    TableauCar est un tableau de 256 entiers
    DuréeMaFonction est une Durée
    rtcode est un entier système
    MonBuffer = fChargeBuffer("f:\french.txt")
    ChronoDébut
    rtcode = API("fctLettres.dll","cptLettres",&TableauCar,&MonBuffer)
    DuréeMaFonction  = ChronoFin()
    POUR Carac = 0 A 255 
        // attention au décalage tableau windev (démarre à 1) et cpp ( démarre à 0 )
    	Trace(Caract(Carac) + " : " + TableauCar[Carac+1] +" occurrences")
    FIN
    Info(DuréeMaFonction)
    on obtient un temp de 2ms

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Schema] Ajouter un nombre d'occurence
    Par GLDavid dans le forum Valider
    Réponses: 2
    Dernier message: 28/11/2005, 13h36
  2. Réponses: 28
    Dernier message: 22/09/2005, 11h57
  3. Nombre d'occurence d'un motif par ligne
    Par anne-so dans le forum Langage
    Réponses: 8
    Dernier message: 22/08/2005, 19h36
  4. Réponses: 8
    Dernier message: 18/01/2005, 10h58
  5. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo