comptage (nb max de user a instant t ) - Perl - Programmation
Marsh Posté le 06-01-2004 à 00:10:49
Si tu ne veut que le nombre de "utilisateur" max a un instant "heure" tu peux t'en sortir avec uen tructure Perl, mais si tu commence à avoir besoin d'autres requetes tu aura interet à passer tout ca dans une BDD et poser tes requetes en SQL
Pour ton probleme particulier, tu peux faire une hash table avec comme clé heure, et que tu increment à chaque fois:
my %nb_utilisateurs;
while (my $ligne = <IN> ) {
my ($utilisateur, $heure) = split(/\s*;\s*, $ligne);
$nb_utilisateurs{$heure}++;
}
Marsh Posté le 06-01-2004 à 08:30:11
Effectivement la meilleur solution aurait ete d avoir un BDD Mais l architecture qu'il y a ne le permet pas .Le bout de code ci-dessus ne me renvoie pas le resultat attendu ..
Marsh Posté le 06-01-2004 à 18:16:01
Citation : Et des lignes comme ca y en a une tripote dans mon fichiers . |
Tu pourrais préciser si tu veux connaître le nombre maximal d'utilisateur étant enregistré à une heure précise (donc par exemple entre 17h00 et 18h00) ou le nombre maximal d'utilisateur dans un écart de temps d'une heure (par exemple 17h15 17h30 17h45 18h00 18h15 18h45 ... le max se trouve entre 17h15 et 18h15 ou 17h30 et 18h30 si on exclu la borne sup).
Dans les 2 cas, le traitement est différent
Marsh Posté le 06-01-2004 à 18:27:28
Ben en fait ce que je veux sortir c le nombre d'utilisateur maximum a un instant donne .. c a la seconde car ... sur une seconde j'ai enormement de transaction . exemple de ligne :
utilisateur2;HH:MM:SS
utilisateur2;HH:MM:SS
utilisateur1;HH:MM:SS
utilisateur1;HH:MM:SS
utilisateur1;HH:MM:SS
utilisateur2;HH:MM:SS
utilisateur2;HH:MM:SS
utilisateur1;HH:MM:SS
utilisateur2;HH:MM:SS
utilisateur2;HH:MM:SS
utilisateur2;HH:MM:SS
utilisateur3;HH:MM:SS
etc ... et a une HH:MM:SS donnee je veux donner le nombre d'utilisateurs different , pour calculer le max .
Pour info c un peu pour determiner a quelle hh:mm:ss de la journee j ai un max
Marsh Posté le 06-01-2004 à 19:50:04
Dernière question, ces lignes sont triées par ordre d'heure hh:mm:ss ou elles peuvent être dans le désordre ? Si c'est en ordre, c'est tout simple mais sinon je pense qu'il faut passer par un tableau.
Marsh Posté le 06-01-2004 à 19:52:57
vu que ces lignes sont extraites d'une log de cache , elles sont triees . dans ordre croissant de HH:MM:SS
Marsh Posté le 06-01-2004 à 20:34:19
Voilà par exemple :
Code :
|
Et en plus ça gère si il y a plusieurs heures qui ont le même pic ... la liste des heures est dans $PeakHours (un tableau) et le nombre d'utilisateurs à ce moment là est $PeakLevel;
Il lit directement le fichier ... dont le nom est dans $FileName.
Marsh Posté le 06-01-2004 à 21:31:16
Euh ...euh ..suis embarasse ..c en perl que je cherche ...connais pas le php
Marsh Posté le 06-01-2004 à 21:51:30
yannvi a écrit : Euh ...euh ..suis embarasse ..c en perl que je cherche ...connais pas le php |
Ho zut désolé, je sais pas pourquoi j'étais embarqué dans PHP
Je vais voir ça en Perl mais c'est pas grandement différent normalement
Disons que l'algorithme est identique
Marsh Posté le 06-01-2004 à 22:24:33
yannvi a écrit : Effectivement la meilleur solution aurait ete d avoir un BDD Mais l architecture qu'il y a ne le permet pas .Le bout de code ci-dessus ne me renvoie pas le resultat attendu .. |
je te dit pas que le bout de code va marcher directe, c'etait juste pour donner l'idée
en gros, si tes lignes sont sous la forme
utilisateur2;HH:MM:SS
utilisateur2;HH:MM:SS
utilisateur1;HH:MM:SS
utilisateur1;HH:MM:SS
utilisateur1;HH:MM:SS
utilisateur2;HH:MM:SS
utilisateur2;HH:MM:SS
pour chaque ligne tu met l'heure (complete, tout ce qui est apres dans un variable $heure, et tu fais:
$compteur{$heure}++;
donc cette hash table te donne le nombre d'utilisateur à chaque HH:MM:SS
ensuite pour connaitre les pics tu classe les clés (c'est à dire les heures) par l'ordre des valurs (c'est à dire le nombre d'utilisateur associés)
donc ca donne un truc du genre :
(j'ai pas ecrit explicitement la boucle et l'extraction de $heure vu que ca dépend de ton script)
Code :
|
Marsh Posté le 06-01-2004 à 22:37:38
yannvi a écrit : Euh ...euh ..suis embarasse ..c en perl que je cherche ...connais pas le php |
Voilà en Perl =)
Code :
|
La partie à la fin étant juste pour afficher le résultat
Marsh Posté le 06-01-2004 à 23:34:47
c bien ce que j'avais fais merci pour l'aide ... j'avais un c ...ille sur le tri en fait et je ne triais pas ce qu il fallait...
Bref ...merci
Marsh Posté le 05-01-2004 à 22:37:33
Bsoir a tous !
Je voudrais avant tout remercier tous ceux qui m ont aider a repondre a toutes les questions que je me posais ...et surtout vous souhaitez une hyper mega BONNE ANNEE 2004 ... bcp de sante bonheur .Et chaleur ds ton corps ... Bref c pas le sujet ...
Je reviens pour une question :
j ai un fichier genre ..
utilisateur; heure ( hh:mm:ss:miliseconde)
Et des lignes comme ca y en a une tripote dans mon fichiers .
Le but es de sortir le nombre de "utilisateur" max a un instant "heure"
Je me suis construit un tableau ..classique ... mais seulement je ne trouve pas le traitement que je dois lui appliquer pour sortir ce qu on veut .
L'un de vous aurait une idee par hasard ...
Merci