Détection d'un nombre dans une chaine...

cs_hygieaa Messages postés 17 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 11 mai 2010 - 10 mai 2010 à 09:15
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 - 11 mai 2010 à 11:11
Merci de tout coeur à ceux ou celles qui répondront à ce problème que je ne sais gérer en PHP. Mais très bien en d'autres languages.

En fait il s'agit dans un message HTML que j'appelle ' $msg ' de récupérer un nombre compris entre 0 et 10 000

Il s'agit donc d'une chaine à convertir en nombre et à tester pour une valeur > à 10 dans ce cas je fais une ' Action '

Voici le message HTML:
Nb Pat:1

Cour.att:<font color=

Les 'Font color' correspondent à des changements de couleur.

On remarque un saut de ligne'[b]
/b'après l'indication de'Nb Pat:'

Qui donne ceci en affichage:
[b]Nb Pat:1
Cour.att:0/b

Les mots immuables à détecter en position pour borner la recherche sont:

' Nb Pat: ' et: ' Cour.att: ' et on récupère ici le chiffre '1'

Je compte donc sur la gentillesse et les connaissances de certains d'entre vous....
merci par avance.

alain

8 réponses

Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
10 mai 2010 à 17:44
Je n'ai pas assez de temps pour tout te detailler mais je te donnes une piste :
preg_match('#()\d*
#', $msg, $arr);
echo '';
print_r
(
$arr
);
echo '

';

j'ai teste sa rapidement, ton chiffre est dans $arr[0];
0
cs_hygieaa Messages postés 17 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 11 mai 2010
10 mai 2010 à 18:50
Bonsoir l'ami et merci d'avoir été rapide

Ta solution ne doit pas à priori fonctionner car dans d'autres langages, elle ne fonctionnerait pas.

En effet pour que cela fonctionne il faut détecter la position de:
Nb Pat: et de Cour.att:

c'est une condition obligatoire. de plus ce n'est pas un chiffre que j'attends en réponse mais un nombre variant de 0 à 10000.

Merci d'avoir répondu... alain
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
11 mai 2010 à 02:33
salut avant que je ne poste ma solution je tiens a tinformer que malheureusement pour moi j'ai utiliser les fonctions pre oui je dit bien malheuresement puisque c'est une notion que je ne maitrise pas donc au lieu d'appeler sa une solution je la nomerai plutot bidouille bon voila ce que j'ai pus trouver pour toi
function tafunction ($msg) {
   
   
   $tab = preg_split("##",$msg);

   $tabInfos = array();
   
   $tabInfos[$tab[1]] = intval($tab[2]);
   
   if (isset($tab[4]) && !empty($tab[4])) {
 	   $tabInfos[$tab[3]] = $tab[4];
   } else {
  	   $tabInfos[$tab[3]] = 0;
   }
 return $tabInfos;
}

explication:
cette fonction prend en parametre ton message et renvoi un tableau index par Nb pat: et Cour.att: voici un exemple
$msg = "Nb Pat:1

Cour.att:"
//remarque j'ai ajouter ">" pour pouvoir recuperer la valeur de Cour.att
donc
$tab = tafunction($msg);
echo "la valeur de NB pat == ".$tab['Nb pat:'];
echo "la valeur de Cour.att == ".$tab['Cour.att'];
c'est tous bon en conseil je dirai plutot que si la solution te vas soumet la au membre qui ont plus d'experience que moi dans les expression reguliere pour qu'il l'ameliore
mais je voudrai savoir pourquoi la soluce de Morphinof ne te convient pas
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
11 mai 2010 à 08:28
Salut,

Ta solution ne doit pas à priori fonctionner car dans d'autres langages, elle ne fonctionnerait pas.

L'as tu seulement testée ??
Et puis c'est sur que si tu entres ça en VB ça ne risque pas de fonctionner hein.
Nous sommes en PHP, donc parlons de ce qui fonctionne en PHP

La solution proposée par Morphinof peut sembler fonctionner, sauf qu'il ne capture pas ce qu'il faut, et à l'affichage on n'y voit que du feu.

Si tu veux "blinder" avec tes conditions "obligatoires" tu peux peut être faire un truc du genre :

<?php
$msg = 'Nb Pat:1

Cour.att:Nb\sPat:(.+)
\s*Cour\.att:



Cordialement,


Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_hygieaa Messages postés 17 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 08:48
Bonjour,


Bien sur que je n'ai pas introduit un code source VB dans un PHP, !!!

Je ne l'ai pas testée pour la raison suivante..

Pour moi le premier code ne convient pas pour la raison tres simple qu'il ne tient pas compte de la position des 2 balises NB.Pat et Cour.att .

C'est la seule possibilité de récupérer le nombre en question. Par contre des il y en a plein le message donc ceux ci ne peuvent servir de balise.

Le 2eme code que tu m'adresses devrait fonctionner, car il parait beaucoup plus soigné et en tous cas tient compte des positions de balise.. Je teste et te dit ce qu'il en est..

A+++ et merci........ALAIN
0
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
11 mai 2010 à 09:39
C'etait le but en fait de ne pas tester ou ce trouvent NB.Pat et Cour.att car tu recherche le pattern suivant : une balise font suivie d'un chiffre variant entre 0 et 10 000 suivit d'un
et du coup sa marche :) sauf evidement si tu as d'autre patterns du meme type je me suis base sur le petit bout de code que tu nous as donne ^^ En gros pour arriver a faire ce que tu veux il faut utiliser preg_match et l'expression reguliere qui va bien pour faire ce que tu veux :)
0
cs_hygieaa Messages postés 17 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 09:45
Re bonjour,

J'avais écrit ceci:

Les mots immuables à détecter en position pour borner la recherche sont:
' Nb Pat: ' et: ' Cour.att: ' et on récupère ici le chiffre '1'

Je savais de quoi je parlais..!! On ne pouvait faire autrement seulement peut etre aurait-il fallu que je m'explique plus clairement.. Excuses..

Pour ce qui est du code ci-dessus, il fonctionne à la perfection!!! Il ne me reste plus qu'à broder sur l'action et cela devrait aller, car c'est beaucoup plus simple...

Merci donc cher ami.. d'avoir perdu un peu de temps avec mon PHP
a Bientôt alain
0
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
11 mai 2010 à 11:11
Bonne continuation :)
0
Rejoignez-nous