8796 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Une page web s'affiche avec un tableau de 8 cases de large et 25 cases de haut. Dans chaque case il y a 5 lignes et sur la 5ème ligne il y a deux informations : exemple ->

Agen
ZI Agen sud
47000
Carrefour
Surface 15000m2 Employés 134

Je voudrais pouvoir, par script, lire automatiquement tout le tableau en ne gardant que la ligne 4 et une partie de la 5 : 'Carrefour' et 'Employés 134'

Je coince.

NB Les cases sont indépendantes c'est à dire que la ligne 1 de la case 1 ne se poursuit pas sur la case 2 mais à la ligne 2 de la case 1...

Cordialement,

Whombat.
Modifié par whombat (19 Oct 2009 - 07:05)
Salut,

quelque chose comme ça ?
$chaine = str_replace("\n", "", file_get_contents('mapage.html'));
preg_match_all('#<td>(.+?)</td>#i', $chaine, $matches);
foreach($matches[1] as $match) {
	$ligne = preg_split("#<br>|<br/>|<br />#", $match);
	echo '<h1>Magasin : '.$ligne[3]."</h1>\n";
	preg_match_all('#m2 (.+)#i', $ligne[4], $matches);
	echo '<p>'.$matches[1][0].'</p>';
}

Modifié par Heyoan (17 Oct 2009 - 10:38)
Merci de ta réponse.

Allez, zou...! j'ose le dire, je n'y ai rien compris...
Ce sont les expressions régulières, non ?
Et développé, en français, ça donne quoi comme raisonnement applicable ?
Bouhhh...! Je viens de relire ta réponse pour la xème fois et j'y vois du martien, mâtiné de vénusien. Ils vont pas rire les ricains quand ils vont poser le pied dessus...

Cordialement,

Whombat
J'avais déjà fait un tour sur les expressions régulières.

Je viens d'y retourner pour la xième fois mais, il n'y a rien a faire, c'est trop puissant pour moi. Comprendre le principe, ça va, mais l'appliquer, comme toi par exemple, c'est une autre histoire.

J'ai bien compri comment fonctionnait un sous-marin, de là à le piloter...
Alors la version commentée :

$chaine = str_replace("\n", "", file_get_contents('mapage.html'));
Récupération de la page html sous forme de string dans la variable $chaine (et suppression des sauts de lignes).

preg_match_all('#<td>(.+?)</td>#i', $chaine, $matches);
On recherche tout ce qui se trouve entre <td> et </td> (avec utilisation du ? : quantificateur paresseux) qui sera stocké dans un array : $matches[1].

foreach($matches[1] as $match) {
Pour chacun des contenus...

$ligne = preg_split("#<br>|<br/>|<br />#", $match);
On crée un array pour chacune des lignes. La fonction explode aurait fait la même chose sauf qu'on ne connaît pas le délimiteur de saut de ligne <br>, <br/> ou <br />. On a donc :
$ligne[0] = 'Agen';
$ligne[1] = 'ZI Agen sud';
$ligne[2] = '47000';
$ligne[3] = 'Carrefour';
$ligne[4] = 'Surface 15000m2 Employés 134';

echo '<h1>Magasin : '.$ligne[3]."</h1>\n";
Le nom du magasin est déjà disponible.

preg_match_all('#m2 (.+)#i', $ligne[4], $matches);
On recherche la chaîne de caractères située après 'm2 '.

echo '<p>'.$matches[1][0].'</p>';
On l'affiche.
Modifié par Heyoan (19 Oct 2009 - 06:22)
Ouf!!!!

Merci encore une fois de ta réponse, mais oouuuffff..., c'est pas du petit lait !

Ha, à lire comme ça une fois que tu as l'explication, ça paraît évident mais à écrire...

Alors pour le coup, donner un problème comme le mien, donner la solution et ensuite la commenter, c'est super motivant. Ca donne vraiment envie d'aller se re-re-re-plonger dans les expressions régulières et d'y arriver. C'est très pédagogique, merci.

Alors merci encore,

Très cordialement,

Whombat
C'est vrai que ça n'est pas évident et d'ailleurs personnellement je dois tout redécouvrir ou presque à chaque fois que je veux m'en servir ! Smiley langue

Si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne