trier un fichier texte - Perl - Programmation
Marsh Posté le 15-02-2012 à 17:01:57
Pour ta moyenne, ceci devrait coller:
Code :
|
Testé sur un fichier 50.txt comme ceci:
1328051100: 5.5884907200e+06 |
C:\Perl>perl test.pl |
Je suis absent pour 1 à 2h, mais je mettrais qques explications ensuite si nécessaire.
A+,
Marsh Posté le 15-02-2012 à 18:05:20
map {s/\s*\n$//;; s/^\d+:\s*//; if ($_) {$num += $_; ++$cpt;}} grep !/$word/io, <FF>; |
1) grep !/$word/io, <FF>;
ça fait un grep sur le fichier et retourne les lignes ne contenant pas $word. ça retourne ces lignes comme un array
2) map {s/\s*\n$//;; s/^\d+:\s*//; if ($_) {$num += $_; ++$cpt;}} (@lignes)
ça applique {s/\s*\n$//;; s/^\d+:\s*//; if ($_) {$num += $_; ++$cpt;}} à chaque ligne
3) {{s/\s*\n$//;; s/^\d+:\s*//; if ($_) {$num += $_; ++$cpt;}}if ($_) {$num += $_; ++$cpt;}}
Ça vire ce qui est inutile a chaque extrémité: s/\s*\n$//;; s/^\d+:\s*//;
s'il reste qque chose dans la ligne courante $_, ça doit être la chaine contenant les caractères du nombre (et rien de plus), perl le convertit directement en un nombre si je l'utilise en contexte numérique (avec une addition ici).
Donc si j'ai trouvé un nombre restant a ajouter à ma moyenne, je l'ajoute, et j'augmente le nombre de nombres ajoutés à la moyenne: if ($_) {$num += $_; ++$cpt;}
A+,
Marsh Posté le 16-02-2012 à 10:27:50
Bonjour Gilou,
Encore merci, j'avance plus vite grâce à toi.
Ensuite au niveau de l'ensemble j'ai compris ce que fait le script mais :
Code :
|
J'ai compris l'explication générale, j'ai même refait quelques script avec cette fonction en utilisant \w+ (...)
Mais serait-il possible que tu me détaille cette ligne car j'avoue que si on me demande d'expliquer au détail, je ne saurais pas comment m'y prendre
Enfin le résultat est certes bon mais je n'arrive pas à le convertir en décimal, plus précisement à deux chiffres aprés la virgule avec %0.2f j'obtiens le résultat suivant :
5261226.49 alors que je veux 5.26
Merci d'avance et bonne journée
Marsh Posté le 15-02-2012 à 15:56:36
Bonjour,
Voilà je cherche à trier un fichier texte et je bloque sur la méthode split où l'erreur m'indique que celle-ci n'est pas initialisé. J'ai effectivement oublier de l'initialiser j'ai donc suivi à la lettre mais la même erreur revient :
Le fichier texte est composé d'a peu prés 4000 lignes de cette forme :
1328051100: 5.5884907200e+06
La partie gauche c'est du timestamp, c'est l'autre partie qui m'intéresse, le fichier texte comportait des lignes avec un mot clé qui indiquait qu'elle ne comportait pas de valeur, j'ai donc copié uniquement celle qui comportaient une valeur dans mon tableau.
Ensuite je cherche a séparé ces 2 valeurs par la méthode split mais c'est là que survient le problème.
En faite, je cherche a écrire uniquement la partie $data qui contient 5.5884907200e+06 (par exemple), dans un autre fichier texte.
Pour au final faire une moyenne de toutes ces valeurs contenu dans $data arrondie à 10^-2 .
Message édité par furil le 15-02-2012 à 16:14:30