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

Signaler
Messages postés
17
Date d'inscription
vendredi 17 octobre 2003
Statut
Membre
Dernière intervention
11 mai 2010
-
Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
-
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

Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
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];
Messages postés
17
Date d'inscription
vendredi 17 octobre 2003
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
17
Date d'inscription
vendredi 17 octobre 2003
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
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 :)
Messages postés
17
Date d'inscription
vendredi 17 octobre 2003
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
Bonne continuation :)