Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
574 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  encore et encore du code pour la maitrise du truc

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

encore et encore du code pour la maitrise du truc

n°608223
yannvi
Posté le 11-01-2004 à 19:05:24  profilanswer
 

Bsoir a tous .. je continue mon entrainement  
 
Les resultats des commandes iostat et swap -s me produisent deux fichier qui sont comme consocpu et consomem
 
structure  
jj hh mm ss cpu ( mesure faite toutes les 30s )  
 
et  
jj hh mm ss mem  
 
je veux par jour  
cpu_moyen;cpu_max;mem_max  
et le code est le suivant  
 

Code :
  1. open(F1,"<$consocpu" );
  2. while(<F1> ) {
  3. ($jj,$h,$m,$s)=( (split(/ /,$_))[0],(split(/ /,$_))[1],(split(/ /,$_))[2],(split(/ /,$_))[3]);
  4. $inst=$jj.":".$h.":".$m.":".$s;         # jj:hh:mm:ss
  5. $conso{$inst} = (split(/ /,$_))[4];     # hash jj:hh:mm:ss  -> conso
  6. $cpt{$jj}++;    # comptage nombre de jj
  7. $cpu{$jj} += (split(/ /,$_))[4]; # Somme des conso pour jj identique
  8. }
  9. close(F1);
  10. $fmem = "$DONNEES/ConsoMem_$mois";
  11. open(FM,"$fmem" );
  12. while(<FM> ) {
  13. $dd=(split(/ /,$_))[0];   # jj
  14. $cptm{$dd}++;    # comptage du nombre de jj
  15. $cha=(split(/ /,$_))[4];  # taillmemk ( )
  16. $cha =~ s/.{1}$//;   # suppression du k en fin de chaine
  17. $mem{$dd} += $cha;   # somme de la meme pour jj identique
  18. }
  19. close(FM);
  20. foreach $jj (keys %cpt){
  21. @tab = sort {$conso{b} <=> $conso{a}} keys %conso ; # Tri decroissant de conso cpu par jj
  22. %max = ($jj => $conso{$tab[0]});           # hash jj -> conso max
  23. $moycpu = $cpu{$jj}/$cpt{$jj};    # cpu moyenne par jj ... somme(consocpu) / nb de jj
  24. chomp %max;
  25. $moymem = $mem{$dd}/$cptm{$dd}/1024;   # swap moyenne en Mo
  26. print "$jj -> $max{$jj} -> $moycpu -> $moymem\n";}


 
 
vous en pensez quoi ?

mood
Publicité
Posté le 11-01-2004 à 19:05:24  profilanswer
 

n°608424
pospos
Posté le 11-01-2004 à 22:20:17  profilanswer
 

excuse moi mais tu code un peu comme un porc
 
- verifi toujours le resultat d'un open avec un || die, et met toujours les > ou <
- met des my, pasque réutiliser tout le temps les memes variables comme $jj, ca rend pas le truc tres clair. use strict!!
 
et c'est koi cette horreur :
    ($jj,$h,$m,$s)=( (split(/ /,$_))[0],(split(/ /,$_))[1],(split(/ /,$_))[2],(split(/ /,$_))[3]);  
 
??
 
pourkoi pas tout simplement
($jj,$h,$m,$s)= split(/ /,$_) (et avec un my devant)
 
de meme
   $inst=$jj.":".$h.":".$m.":".$s;
ce qui plus facilement si tu profite de l'interpolation des variables dans les doubles quotes:
   $inst= "$jj:$h:$m:$s";
 
ensuite tu utilise (split(/ /,$_))[4] deux fois, tu aurais mieux fait le le mettre dans une varible dans la primiere ligne de ta boucle, avec un nom qui indique ce que c'est
 
 
bon, ensuite dans ta derniere boucle tu fait:
  %max = ($jj => $conso{$tab[0]});            
ce qui a pour effet d'ecraser à chaque fois ce que %max contenait precedement, ce qui je pense n'est pas ce que tu cherche
 
donc tu déclare %max à l'exterieur de ta boucle avec un  
my %max = ();
 
puis dans ta boucle tu fait simplement:
$max{$jj} = $conso{$tab[0]};
 
et si tu veux chomper ta hash tu le fait apres ta boucle, sinon il va passer son temps à verifier des valeurs qu'il a deja chompé
 
bon à part ca je vois pas trop koi te dire: c'est difficile de comprendre ce que tu cherche à faire de la maniere dont c'est ecrit ici
 
désolé si je suis agressif, mais... tu sali perl mec! Si je te croise dans la rue je t'arrache le coeur et je le brule en l'honneur de Larry Wall (rappel moi de le faire à l'occasion)

n°608514
yannvi
Posté le 12-01-2004 à 00:54:11  profilanswer
 

Ok merci pour tes remarques ...Et t inquiete j aime mieux les gens qui y vont franco....
Suis pas expert en programmation perl ..bref kk remaque  
je n'ai pas mis tout le code ds mon precedent message , mais j ai qd meme respecte les regle de prog comme la declaration des variable  
- Ce qui me gene ds le || die c que le programme s arrete et ca je ne le veux pas ...car je traite plusieur fichier..  
Pour le reste j ai reecrit kk lignes c en effet plus jojo

n°608666
pospos
Posté le 12-01-2004 à 09:33:42  profilanswer
 

pour le || die tu n'est pas obligé de mourrir, mais au moins tu peut afficher un message d'erreur avec warn et passer au fichier suivant plutot que d'essayer de lire depuis un fichier qui n'a pas été ouvert
 
ensuite pour tes variables il vaut mieux essayer de declarer tes variables le plus "localement" possible, pour etre certain qu'il n'y ai pas de conflit (par exemple une ancienne valeur qui n'a pas été initialisée)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  encore et encore du code pour la maitrise du truc

 

Sujets relatifs
[Delphi] Appeler un composant dynamiquement dans le codevoici mon premier code....
[ALGO] Un truc à Arbre[PHP] Construire un code solide pour un site web,les etapes?
(nouveau code)Vérifier si une fenêtre un pop-up est ouverte ?[PHP] Récuperer un code HTML déjà généré ? (explication inside)
Mon hébergeur utilise PHPSuExec mais je ne comprend rien à ce truc.[ASM] Gros nb (oui c moi), j'ai pondu ce code plein d'érreurs...
[HTML] balise pour afficher le code HTML ?Obtenir un code issu des composants hardware d'un PC
Plus de sujets relatifs à : encore et encore du code pour la maitrise du truc


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR