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. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut comptabiliser nombre d'occurence
    Bonjour.
    Je doi créer une application qui permet de lister tous les caracteres d'un fichier texte et de compter le nombre d'occurence de ceux ci.
    Mon probleme est la comptabilisation des occurences de tous les caracteres présent.

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Bienvenue sur le forum.

    Il faut que tu sois plus précis dans ce que tu demande.
    Indique nous ce que tu as essayé et ce qui cloche ainsi nous pourrons t'aider plus facilement.

    Mais moi ce que je ferai c'est un tableau avec la liste des caractères et leur nombre respectif.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Merci pour le bienvenu !
    Voila mon problème : Je ne sais comment faire pour comptabiliser le nombre d’occurrence de tous les caractères du fichier. Je sais comment trouver le nombre d’occurrence d’un caractère mais là c’est tout les caractères. Cela serait trop long de faire des "ChaîneOccurrence" pour tous les caractères.

    J’ai effectué le code suivant :

    //Lire caractere par caractere de chaque lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    POUR TOUT CHAINE sLigneFichier DE Fichier SEPAREE PAR RC
    		Nombre_caract_Ligne = Taille(sLigneFichier)
     
    			POUR i = 1 _A_ Nombre_caract_Ligne
    			    sLecture_caract = sLigneFichier [[i]] 
     
     
    			FIN
    FIN

  4. #4
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Moi ce que je ferai à ta place c'est d'utiliser fchargetexte.

    Ainsi tu aura tout ton texte dans une seul variable.
    Puis tu parcours ta variable caractère par caractère.
    Utilise taille pour avoir le nombre de caractère
    Puis à chaque caractère tu peux ajouter une selon afin de ne pas prendre ne compte des caractères que tu ne veux pas, genre RC ou TAB (ou etc...).

    Puis dans ton tableau récapitulatif tu regarde si ton caractère est déjà présent , dans ce cas tu ajoute 1 au nombre d’occurrence, sinon tu le rajoute.

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 342
    Points : 3 857
    Points
    3 857
    Par défaut
    Salut à toi,

    Regardes du côté des tableaux associatifs, comme cela lors de l'insertion dans le tableau tu n'auras pas à t'occuper du caractère en cours de traitement.
    Ce sera donc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTabAssoc[<caractère en cours de traitement>] = monTabAssoc[<caractère en cours de traitement>] + 1
    A mettre dans une boucle traitant la totalité du fichier bien sûr

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Je précise je suis débutant, et actuellement en stage.
    Voici mon code avec le chargement du fichier.

    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
    //nombre de lignes max
    nNombre_Ligne_Max = ChaîneOccurrence(sText_charge,RC)+1
     
    //Ouvrir fichiers entree
    nID_fichier_entree= fOuvre(gsNom_Fichier_Entree,foLecture) 
     
    //Charger le texte du fichier entree
    Fichier = fChargeTexte(gsNom_Fichier_Entree)
     
    //Lire caractere par caractere de chaque lignes
    POUR TOUT CHAINE sLigneFichier DE Fichier SEPAREE PAR RC
    		Nombre_caract_Ligne = Taille(sLigneFichier)
     
    			POUR i = 1 _A_ Nombre_caract_Ligne
    			sLecture_caract = sLigneFichier [[i]] 					
    								FIN
    FIN

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Je vais regarder pour les tableaux associatifs sur le guide d'autoformation.

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    je pense que si tu ne fais rien d'autres que compter, il ne faut pas se compliquer la vie.

    Utilises FLitLigne et Taille sur la chaine lue et ça devrait aller assez vite.

    à bientôt,

    Nicolas

  9. #9
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Tu peux aussi faire cela...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    taRecapOccurence est un tableau associatif d'entiers
    sMonFic est une chaîne
    cMonCar est un caractère
    smonfic = fChargeTexte("C:\monFic.txt")
     
    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

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Nicolas_Jeanneau Voir le message
    Bonjour,

    je pense que si tu ne fais rien d'autres que compter, il ne faut pas se compliquer la vie.

    Utilises FLitLigne et Taille sur la chaine lue et ça devrait aller assez vite.

    à bientôt,

    Nicolas
    Non justement, je dois comptabiliser aussi. Je montre un exemple.
    caractere "e" nombre occurence "530"
    caractere "!" nombre occurence "50"

    Merci pour les reponses rapides, j'avance petit à petit !

  11. #11
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Ca marche aussi pour ce genre de traitements. Ce qui pose problème est la réalisation de traitement sur des bases de données etc ... car ça garde le fichier ouvert vraiment longtemps.

    Là, ça te permet de traiter ligne à ligne en parsant pour chaque ligne :

    exemple :

    Déclaration d'un tableau de 2 dimensions (1 colonne pour le caractère, 1 pour le nombre d'occurrences)

    compteurglobal = 0
    idfichier = ouvrir le fichier
    chainelue = lire une ligne du fichier idfichier
    tantque chainelue <> fin de fichier
    compteurglobal += taille de la chaine lue

    pour n=1 jusqu'à taille de chainelue
    rechercher dans le tableau sur la colonne 1 le nième caractère de chainelue
    si trouvé alors
    ajouter 1 au compteur de la ligne du tableau
    sinon
    ajouter une ligne au tableau avec ce caractère et un compteur = 1
    finsi
    finpour

    chainelue = lire une ligne du fichier idfichier
    fintantque

    fermeture du fichier

    affichage des résultats

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Nicolas_Jeanneau Voir le message
    Ca marche aussi pour ce genre de traitements. Ce qui pose problème est la réalisation de traitement sur des bases de données etc ... car ça garde le fichier ouvert vraiment longtemps.

    Là, ça te permet de traiter ligne à ligne en parsant pour chaque ligne :

    exemple :

    Déclaration d'un tableau de 2 dimensions (1 colonne pour le caractère, 1 pour le nombre d'occurrences)

    compteurglobal = 0
    idfichier = ouvrir le fichier
    chainelue = lire une ligne du fichier idfichier
    tantque chainelue <> fin de fichier
    compteurglobal += taille de la chaine lue

    pour n=1 jusqu'à taille de chainelue
    rechercher dans le tableau sur la colonne 1 le nième caractère de chainelue
    si trouvé alors
    ajouter 1 au compteur de la ligne du tableau
    sinon
    ajouter une ligne au tableau avec ce caractère et un compteur = 1
    finsi
    finpour

    chainelue = lire une ligne du fichier idfichier
    fintantque

    fermeture du fichier

    affichage des résultats
    Merci pour l'aide !

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 239
    Points : 12 869
    Points
    12 869
    Par défaut
    Bonjour,
    Tu peux aussi créer un tableau de 255 entier, et utiliser le code ASCII du caractère comme indice dans le tableau.
    Ainsi tu n'as pas de recherche à faire dans le tableau, juste des additions.
    Sur des gros fichiers, le temps de traitement devrait être "un peu" plus court.

    Tatayo.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Tu peux aussi créer un tableau de 255 entier, et utiliser le code ASCII du caractère comme indice dans le tableau.
    Ainsi tu n'as pas de recherche à faire dans le tableau, juste des additions.
    Sur des gros fichiers, le temps de traitement devrait être "un peu" plus court.

    Tatayo.
    Oui exactement alors j'ai effectué :

    resultat est un tableau associatif d'entier
    Carac est un entier

    POUR Carac = 1 A 255
    resultat[Carac] = ChaîneOccurrence(Fichier,Caract(Carac))
    FIN

    // affichage du resultat on affiche chaque elements du tableau
    POUR Carac = 1 A 255
    Trace(Caract(Carac) + " : "+resultat[Carac] +" occurrences")
    FIN

  15. #15
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Attention : ChaineOccurrence comptabilise le nombre de caractères dans une chaine et non pas dans un fichier ...

    Mais l'idée est là !

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Voila j'ai trouvé la solution.
    Merci pour votre aide !

    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
     
    nNombre_Elements_Tableau est un entier = 1
     
    //Charger le texte du fichier entree
    Fichier = fChargeTexte(gsNom_Fichier_Entree)
     
    //Lire caractere par caractere de chaque lignes
    POUR TOUT CHAINE sLigneFichier DE Fichier SEPAREE PAR RC
    	Nombre_caract_Ligne = Taille(sLigneFichier)
     
    	POUR i = 1 _A_ Nombre_caract_Ligne
    		sLecture_caract = sLigneFichier [[i]]
     
    			//Verification si le caractere existe dans le tableau ou non
    			nIndiceTableau = Cherche(gtabTTableau,tcLinéaire,"caracte",sLecture_caract)
    			SI nIndiceTableau <> -1 ALORS
    					gtabTTableau[nIndiceTableau].nb_caracte = gtabTTableau[nIndiceTableau].nb_caracte +1
    			SINON
    				Dimension(gtabTTableau,nNombre_Elements_Tableau)
    				gtabTTableau[nNombre_Elements_Tableau].caracte = sLecture_caract
    				gtabTTableau[nNombre_Elements_Tableau].nb_caracte = 1
    				nNombre_Elements_Tableau = nNombre_Elements_Tableau + 1
    			FIN
    	FIN
    FIN

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 239
    Points : 12 869
    Points
    12 869
    Par défaut
    Juste pour comparer, quelle est la différence de vitesse 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
     
    resultat est un tableau associatif d'entier
    Carac est un entier 
    Fichier est une chaine
     
    Fichier = fchargetexte(gsNom_Fichier_Entree)
    POUR Carac = 1 A 255 
    resultat[Carac] = ChaîneOccurrence(Fichier,Caract(Carac))
    FIN
     
    // affichage du resultat on affiche chaque elements du tableau
    POUR Carac = 1 A 255 
    Trace(Caract(Carac) + " : "+resultat[Carac] +" occurrences")
    FIN
    Tatayo

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Ce code est plus rapide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    resultat est un tableau associatif d'entier
    Carac est un entier 
    Fichier est une chaine
     
    Fichier = fchargetexte(gsNom_Fichier_Entree)
    POUR Carac = 1 A 255 
    resultat[Carac] = ChaîneOccurrence(Fichier,Caract(Carac))
    FIN
     
    // affichage du resultat on affiche chaque elements du tableau
    POUR Carac = 1 A 255 
    Trace(Caract(Carac) + " : "+resultat[Carac] +" occurrences")
    FIN
    Cependant mon code, me paraît plus simple (proche de ce que l'on apprend en cours (1er année BTS IG)).

  19. #19
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    N'oublie pas que ton apprentissage te permet d'envisager de voir ton activité (développeur pour l'instant) d'un autre point de vue. Je pense que ce que Tatayo te suggère est de considérer le traitement du point du vue du résultat et des performances réalisées et non pas forcément de la compréhension du code.
    Si tu commentes suffisamment ton code, ça ne devrait pas être compliqué à relire par quelqu'un d'autre.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Nicolas_Jeanneau Voir le message
    N'oublie pas que ton apprentissage te permet d'envisager de voir ton activité (développeur pour l'instant) d'un autre point de vue. Je pense que ce que Tatayo te suggère est de considérer le traitement du point du vue du résultat et des performances réalisées et non pas forcément de la compréhension du code.
    Si tu commentes suffisamment ton code, ça ne devrait pas être compliqué à relire par quelqu'un d'autre.
    Oui tout cela est vrai, merci pour le conseil.
    Mais mon tuteur de stage m'imposé ce debut de code.
    Je dois maintenant pouvoir modifier ou supprimer les caracteres dans mon application, et d'aprés mon tuteur cela aurait été difficile sans structure.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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