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.
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.
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.
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
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.
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 :
A mettre dans une boucle traitant la totalité du fichier bien sûr
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
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
Je vais regarder pour les tableaux associatifs sur le guide d'autoformation.
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
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
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
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
Attention : ChaineOccurrence comptabilise le nombre de caractères dans une chaine et non pas dans un fichier ...
Mais l'idée est là !
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
Juste pour comparer, quelle est la différence de vitesse avec ce code:
Tatayo
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
Ce code est plus rapide.
Cependant mon code, me paraît plus simple (proche de ce que l'on apprend en cours (1er année BTS IG)).
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager