Traitement de données

Eléphanteau du PHP | 36 Messages

12 sept. 2006, 11:09

Salut je bloque sur un petit script pour traiter le code suivant

Code : Tout sélectionner

<table> <tr> <td><h4>Nom de la commune</h4><strong>Lisle-en-Rigault</strong></td> <td><h4>Région</h4><a href="./regions.html?mode=detail&reg=57" title="fiche de la région">Lorraine</a></td> </tr> </table> <div class="donnees"> <h4>Généralités historiques</h4> <p><ul><li>Occupation préhistorique.</li> </ul></p> <h4>Vestiges préhistoriques et antiques</h4> <p><ul><li>Grottes dans la vallée du Boulou.</li> </ul></p>

Avec le script suivant j'arrive a récupérer comme info le "nom de la commune" mais pas les "Vestiges préhistoriques et antiques"
<?php
$fp = fopen("...", "r");

while (!feof($fp)) { 
        $ligne = fgetss($fp, 4096); 
                
if ( strstr($ligne,'Nom de la commune'))
{
$commune = substr(strstr($ligne,'Nom de la commune'),17) ;
}
				
if ( strstr($ligne,'Région'))
{
$region = substr(strstr($ligne,'Région'),6) ;
}

if ( strstr($ligne,'Vestiges préhistoriques et antiques'))
{
$vpa = substr(strstr($ligne,'Vestiges préhistoriques et antiques'),36) ;
}

}
?>
je ne comprend pas pourquoi cela fonctionne pour le nom de la commune et la région et non pour le reste ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 sept. 2006, 11:14

Salut,
Pour la simple raison que tu lis le fichier ligne par ligne. Pour la région et la commune pas de soucis les repères et les libellés se trouvent sur le même ligne mais pas pour les "vestiges préhistoriques et antiques".

Ceci dit ce n'est certainement pas la bonne manière de faire... tu devrais te tourner vers les expression régulières.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 36 Messages

12 sept. 2006, 12:34

Avant de refaire le script avec les regex je voulais savoir s'il y avait une solution a mon probleme, même si la méthoine n'est pas la meilleure.

Aller au bout pour bien comprendre et pouvoir par la suite mesurer les avantages et inconvéniants des deux méthodes.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 sept. 2006, 17:58

Non il n'y a pas de solution... trop de bidouillage pour le faire.

Faudrait relever la ligne comme tu le fait donc avec un test y inclure une lecture de ligne du fichier puis refaire une autre coupure avec substr().
Ou encore te débrouiller pour tout avoir sur une seule ligne comme pour les autres critères.

Ca ressemble à rien :?


Je suis pas non plus expert en matière d'expression régulières mais tu devrais vraiment te tourner vers cette solution sans perdre de temps avec celle-ci.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 1380 Messages

12 sept. 2006, 18:23

Voici une piste avec les regex.
$motif = '#Nom de la commune</h4><strong>(.*?)</strong>.*Vestiges préhistoriques et antiques.*<li>(.*?)</li>#s';


preg_match($motif, $txt, $captures);

unset($captures[0]);
echo '<pre>'; print_r($captures);
ripat