Page 1 sur 1

expression régulière

Posté : 16 janv. 2014, 18:46
par tryptoto
Bonjour,

Je cherche à faire une expression régulière. Pour vous expliquer, j'ai un fichier avec des champs comme cela :
<temps="3742.38" conv="0.738"> truc</temps>
<temps="3807.50" conv="0.921"> bidule</temps>
<temps="4200.76" conv="1.000"> !</temps>

Je voudrais donner en entrée un chiffre ( exemple 3800) et ca me sorte tous le reste du document à partir de ce match.
Donc étant donné un nombre je dois cherche l'occurence la plus proche de manière inférieur et extraire le tout à partir de là.
Avec mon exemple, en donnant 3800, je devrai sortir :

<temps="3807.50" conv="0.921"> bidule</temps>
<temps="4200.76" conv="1.000"> !</temps>

Est ce possible de faire cela avec une expression régulière.

Merci de toute aide apporté

Re: expression régulière

Posté : 16 janv. 2014, 20:40
par sirakawa
Convertissons d'abord en tableau un peu dépouillé:
$données = array(
0 => array("temp"=>3742.38, "conv" =>0.738, "autre" => "truc"),

);

Je suppose que ! indique la fin des données.

Autre idée
Si le fichier est ligne par ligne ET ordonné par les températures on doit pouvoir le lire ligne à ligne, extraire la valeur de temp, et passer à la ligne suivante sans rien faire si la valeur du fichier est inférieure à celle requise, sinon afficher et continuer:
while (!eof)
{
if ()
{
}
else
{
}
}

Re: expression régulière

Posté : 17 janv. 2014, 15:30
par Invité
Le point ! n'est pas la fin des données.
En fait je récupère ce champs via une base de données.

Mon code
$temp ='<p>uiui</p><temps="3742.38" conv="0.738"> truc</temps>
<temps="3807.50" conv="0.921"> bidule</temps>
<temps="4200.76" conv="1.000"> !</temps><span>bonjour</span>';

			if(isset($temp) && $temp){
			//récupère le nombre apres la balise temps
			preg_match_all('#<temps="((?:\d+)(?:\.\d*))(.*)#', $temp,$entete);
				if($entete[0]>=3800) { 
					foreach ($entete[0] as $value)
						echo  htmlentities($value);
			}
			
		}
			
		}
			
	

Cela me renvoie :
<temps="3742.38" conv="0.738"> truc</temps> <temps="3807.50" conv="0.921"> bidule</temps> <temps="4200.76" conv="1.000"> !</temps><span>bonjour</span>

Il n'y a que mon test if($entete[0]>=3800) { qui ne doit pas être bon

Re: expression régulière

Posté : 17 janv. 2014, 15:38
par tryptoto
De plus je vais avoir un autre problème.
En fait au final le code que j essaie d'écrire prend donc une valeur temps min en parametre dans mon exemple 3800. Mais je voudrais également lui donner une autre valeur genre 3900.
Et je voudrais récupérer tout le code, toutes les balises, tout ce qu'il y aura entre 3800 et 3900.
Donc tout le travail que j'essaie de faire fonctionnera avec une valeur en entrée mais comment donc faire pour que cela fonctionne entre les bornes....
Bon ce dernier message n'étant pas clair, si on m'aide sur le message précédent ce sera déjà top ^^