Commande wc et regex
Résolu/Fermé
Utilisateur anonyme
-
Modifié par vivelasuisse le 17/12/2011 à 12:37
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 - 18 déc. 2011 à 00:39
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 - 18 déc. 2011 à 00:39
A voir également:
- Commande wc et regex
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
- Commande scannow - Guide
3 réponses
mamiemando
Messages postés
33367
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 novembre 2024
7 801
17 déc. 2011 à 13:08
17 déc. 2011 à 13:08
Ça ne marchera pas car ton expression régulière signifie n'importe quelle chaîne constituée d'une suite de 0 ou plus caractère 'a', suivi d'une suite de 0 ou plus caractère 'e' etc...
Tu n'as donc aucune chance de compter le nombre de voyelle de cette manière.
Pour moi il n'y a pas de solution à base d'expression rationnelle simple dans ton cas. Ou alors il faudrait que tu aies un caractère par ligne, ce qui peut se faire mais qui nécessite une transformation préalable (et d'autant plus coûteuse que ton texte est long). Bref, c'est pas top.
Approche à mon avis plus simple, tu lis simplement le fichier caractère par caractères et tu affiches le résultat. Tu peux le programmer dans le langage que tu veux.
char_distribution.cpp :
On compile le tout :
On crée un petit fichier texte de test et on lance le programme (texte.txt) :
... et on lance le programme :
... ce qui donne :
Bonne chance
Tu n'as donc aucune chance de compter le nombre de voyelle de cette manière.
Pour moi il n'y a pas de solution à base d'expression rationnelle simple dans ton cas. Ou alors il faudrait que tu aies un caractère par ligne, ce qui peut se faire mais qui nécessite une transformation préalable (et d'autant plus coûteuse que ton texte est long). Bref, c'est pas top.
Approche à mon avis plus simple, tu lis simplement le fichier caractère par caractères et tu affiches le résultat. Tu peux le programmer dans le langage que tu veux.
char_distribution.cpp :
#include <map> #include <iostream> #include <cstdio> #include <string> typedef std::map<char, unsigned> distribution_t; int main(int argc, char **argv){ distribution_t distribution; char * filename; FILE * fp; char c; // Contrôler le nombre d'arguments if(argc != 2) { std::cerr << "usage: " << argv[0] << " input_filename" << std::endl; return 1; } filename = argv[1]; fp = fopen(filename, "r"); // Vérifier que le fichier existe et peut être ouvert if(!fp){ std::cerr << argv[0] << ": can't read " << filename << std::endl; return 2; } // Lire tout le fichier et comptabilise le nombre d'apparition // de chaque caractère while((c = fgetc(fp)) != EOF){ ++distribution[c]; } // Afficher la distribution { distribution_t::const_iterator distribution_it (distribution.begin()), distribution_end(distribution.end()); for(;distribution_it != distribution_end; ++distribution_it){ std::cout << distribution_it->first << '\t' << distribution_it->second << std::endl; } } // Afficher le nombre de voyelles const char *voyelles = "aeiouyAEIOUY"; unsigned num_voyelles = 0; for(const char *pvoyelle = voyelles; *pvoyelle; ++pvoyelle){ num_voyelles += distribution[*pvoyelle]; } std::cout << num_voyelles << " voyelles" << std::endl; return 0; }
On compile le tout :
g++ -W -Wall plop.cpp -o char_distribution char_distribution.cpp
On crée un petit fichier texte de test et on lance le programme (texte.txt) :
J'aime les tapirs J'AIME LES LOUTRES
... et on lance le programme :
./char_distribution texte.txt
... ce qui donne :
(mando@aldur) (~) $ cat texte.txt J'aime les tapirs J'AIME LES LOUTRES (mando@aldur) (~) $ ./char_distribution texte.txt 2 4 ' 2 A 1 E 3 I 1 J 2 L 2 M 1 O 1 R 1 S 2 T 1 U 1 a 2 e 2 i 2 l 1 m 1 p 1 r 1 s 2 t 1 13 voyelles
Bonne chance
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
17 déc. 2011 à 13:16
17 déc. 2011 à 13:16
Salut,
Merci de ne pas doublonner ;-(
Merci de ne pas doublonner ;-(
mamiemando
Messages postés
33367
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 novembre 2024
7 801
18 déc. 2011 à 00:39
18 déc. 2011 à 00:39
Oui d'autant plus que la commande que tu donnes dans cet autre fil de discussion fonctionne :-) Merci au passage à toi zipe31 pour l'option -o que je ne connaissais pas.
Solution proposée par zipe31 :
Solution proposée par zipe31 :
grep -io [aeiouy] fichier.txt | wc -l