compteur avec parametres [PHP] - PHP - Programmation
Marsh Posté le 02-03-2004 à 14:17:28
bon on simplifie le probleme :
j'ai dans un fichier texte des données comme il suit :
... DUR=70.252 ... DUR=56.252 ... DUR=96.235 ...
je voudrais créer un tableau du type $duration[$time] avec :
$duration[0]=70.252
$duration[1]=56.252 ...
Marsh Posté le 02-03-2004 à 14:35:44
j'ai fait :
$f='ticketsUE';
preg_match_all("/DUR((\d+)(\.|)(\d{0,3}))/", $f, $out, PREG_PATTERN_ORDER);
print_r($out[1]);
résultat :
Array ( )
snif snif ca ne marche pas
Marsh Posté le 02-03-2004 à 14:38:29
même en ayant rajouté le "=" ca ne change rien ... je précise que mon ticketsUE.txt et mon toto.php4 sont dans le même répertoire ...
Marsh Posté le 02-03-2004 à 14:50:11
mirascheat a écrit : j'ai fait : |
, ça marche très bien. Par contre je pense qu'il te serait extrêmement instructif d'aller sur http://www.phpdebutant.org et de faire toutes les leçons jusqu'à la 7 ( et surtout celle la)
Marsh Posté le 02-03-2004 à 15:02:08
je ne pense pas que :
$f= fopen("ticketsUE.txt", "r" );
preg_match_all("/DUR=((\d+)(\.|)(\d{0,3}))/", $f, $out, PREG_PATTERN_ORDER);
fclose($f);
print_r($out[1]);
suffise vu le résultat
Marsh Posté le 02-03-2004 à 15:07:51
non mais ça a suffit à me dépiter ...
Ptain mais tu veux pas faire un éffort et lire la leçon 7 jusqu'au bout.
Marsh Posté le 02-03-2004 à 15:10:58
si si j'ai bien lu la lecon 7 jusqu'au bout et je me suis rendu compte qu'il fallait ouvrir et fermer un fichier pour pouvoir agir dessus.
Par contre l'information que je n'ai pas trouver c'est comment lire la totalité du fichier parce qu'ils indiquent seulement pour un nombre fini de caractère ...
Désolé de t'agacer ... je me désole moi même de mon niveau
Marsh Posté le 02-03-2004 à 15:18:28
et le vainqueur est :
$fp= fopen("ticketsUE.txt", "r" );
$taillefichier=filesize('ticketsUE.txt');
$fichier=fread($fp,$taillefichier);
preg_match_all("/DUR=((\d+)(\.|)(\d{0,3}))/", $fichier, $out, PREG_PATTERN_ORDER);
fclose($fp);
print_r($out[1]);
merci beaucoup de ta patience Anapajari
Je suis peut être un mec désolant mais je sais dire merci quand il le faut, alors mille merci gars
Marsh Posté le 02-03-2004 à 15:27:33
arg mon fichier est trop grand est j'ai une erreur de ce type :
Fatal error: Maximum execution time of 30 seconds exceeded in ...
Marsh Posté le 02-03-2004 à 15:44:30
c'est marrant mais je sens que tu cherches à faire un truc pour lequel php n'est pas forcément conseilé.
Au pire découpe le tout en plusieurs fichiers ...
Marsh Posté le 02-03-2004 à 15:48:37
ouaip de toute facon je viens de m'apercevoir que j'avais mal évalué ce que je voulais ...
ce que je veux finalement c'est pas un tableau pour avoir tous les résultats mais je veux simplement faire un traitement sur chaque dur, je veux juste comptabiliser ceux dont la valeur est entre 70 et 85.
Reste plus qu'à trouver comment faire !?!
Je n'ai pas le choix du langage, c'est du PHP donc je dois travailler en PHP
Marsh Posté le 02-03-2004 à 16:12:46
déjà tu peux améliorer un peu la regex:
Code :
|
ainsi elle ne remonte plus que les nombres entre 70.000 et 89.999
Après pas d'autres choix que de parcourir le tableau pour regarder lequels sont bien inférieurs à 85...
Tu es nux ou windows? PArce que sous nux à doit pouvoir s'en sortir juste à base de grep.
Sinon tu peux pas le faire en perl ?
Enfin au pire execute ton php en ligne de commande pour eviter le 'maximum execution time' lié à apache.
[edit]
on peut aussi faire ça pour la regex:
Code :
|
Je trouve ça bien cochon mais au moins tu n'as pas a parcourir ton tableau!
Marsh Posté le 02-03-2004 à 16:22:37
bein moi je travaille sous windows mais après ca tourne sous unix donc si tu as l'équivalent en grep n'hésite pas
Marsh Posté le 02-03-2004 à 16:48:06
sous nux, la commande suivante te donne directement le résultat:
Code :
|
Marsh Posté le 02-03-2004 à 17:29:59
comment le concatener avec les précédentes commandes nux ?
$rc = exec("cat $f | $g grep -c =" );
le nom de fichier étant représenter par $f
Marsh Posté le 02-03-2004 à 17:34:48
tu m'auras fatigué toi ...
la commande que je t'ai donné suffit de l'executer sous nux toute seule en dehors d'un script php pour avoir le nombre d'occurence trouvée.
Bon mais si tu en as besoin dasn ton script php:
Code :
|
a oui et note bien que si tu n'as jamais plus d'un DUR=... par ligne dans ton fichier tu n'as pas besoin de toute la partie avec le sed et tu peux juste ecrire:
Code :
|
Marsh Posté le 02-03-2004 à 18:03:37
Est-ce que lancer un gunzip avant peut perturber la commande ?!? (oui je sais c'est moi qui suis perturbé!!!)
parce que j'ai fait un : zcat ticketsUE.txt | grep -Eci "DUR=((70|71|72|73|74|75|76|77|78|79|80|81|82|83|84)(\.|)(\d{0,3}))"
le fichier ticketsUE.txt étant zippé et j'obtiens 0 alors qu'il y a des lignes avec des valeurs de DUR comprises entre 70 et 85 ...
Marsh Posté le 02-03-2004 à 18:10:38
non aucun probleme, commande suivante testée et approuvée chez moi:
Code :
|
sur un fichier contenant
Code :
|
donne le résultat:
Code :
|
[edit: pré-sentiment] montre 2/3 lignes de ce que tu obtiens en faisant ton zcat sur le fichier
Marsh Posté le 03-03-2004 à 09:46:55
Quand je fais ca (vu que je n'ai qu'un DUR par ligne):
Code :
|
j'obtiens :
Code :
|
alors j'apprends qu'il y a deux grep donc j'utilise :
/usr/xpg4/bin/grep
malheureusement je trouve en résultat 0, ce qui est faux ...
un exemple d'une partie du fichier ticketsUE.txt
Code :
|
Marsh Posté le 03-03-2004 à 10:27:11
Au fait les expressions regulieres en PHP et sous unix c'est les même ?
Marsh Posté le 03-03-2004 à 11:36:24
Sincerement je pense que l'expression reguliere n'est pas bonne parce que qd je lui demande de me chercher uniquement DUR il me sort une reponse ...
Marsh Posté le 03-03-2004 à 11:42:33
tu noteras que le -E dans grep c'est pour qu'il interprete la pattern comme une regex. Alors si tu fais sans et bien ça cherche exactement la chaine de caractère décrite après.
Sinon je te reconfirme par ailleurs que la regex marche très bien.
Marsh Posté le 03-03-2004 à 14:17:24
j'ai reessayé sans le | dans ...(\.|)... et ca marche maintenant ... il reste plus qu'à l'insérer dans mon script ...
Marsh Posté le 27-02-2004 à 15:07:18
Bonjour,
J'ai une fonction qui compte le nombre d'objets ayant certains parametres, dans une liste d'objet avec plusieurs parametres (TYPE, DIR, CAUSE ...)
Jusqu'à maintenant les parametres étaient prédéfinis (TYPE ne peut valoir que 0 ou 1 et ainsi de suite ...) mais maintenant je veux compter avec un parametre supplementaire qui est DURATION mais qui est totalement variable ...
function ticket_multi_count($f, $a)
{
foreach ($a as $keyword) {
$g .= "grep $keyword |";
}
$rc = exec("cat $f | $g grep -c =" );
return (int)($rc);
}
... ancien type de comptabilité
$this->cs_mt_busy=ticket_multi_count($f, array( "TYPE=RELEASE" , "DIR=1", "CAUSE=17" ) );
... nouveau avec DURATION mais ca ne pmarche pas?!?
$this->cs_mo_susp=ticket_multi_count($f, array( "TYPE=RELEASE" , "DIR=0", "CAUSE=-1", "DURATION=$dur" and 70<$dur<85) );
quelqu'un aurait-il une idée pour m'aider ?!?