Auteur Sujet: Parser  (Lu 5355 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne diaoul

  • Expert
  • ****
  • Messages: 663
    • http://diaoul.net
Re : Parser
« Réponse #15 le: 06 septembre 2006 à 00:15:58 »
bon, en fait , c'est normal, je ne faisais qu'un echo, il faut bosser un peu pour la fonction complète,comme annoncé -_-
function get_nom_commune() {
  $file=fopen($this->filename,"r");
       if (!$file) { echo "<p>Impossible d'ouvrir le fichier</p>.\n"; exit; }
  while (!feof ($file)) {
     $line=fgetss($file);
     $nom=substr(strstr($line,"Nom de la commune"),17);
     if ($nom<>"")  return($nom);
  }

de même pour les fonctions get_superficie, get_altitude, etc..

dans la page qui appelle get_nom_commune(), il te suffit de faire :
$nom=parser->get_nom_commune();
...
$sql="insert into commune values ('$nom',....);

mais ça fait relire le texte x fois pour x types de données.

si tu ne veux appeler qu'un fonction qui retourne tous les resultats pour une page, tu stocke les resultats dans un tableau:
function get_result()
 ...
if ($nom<> "") $result[0]=$nom;
...
if ($super<>"") $result[1]=$super;
...}

fclose($file);
return($result);
}

et dans page.php
data=parser->get_result();
$sql="insert into commune values ('$data[0]','$data[1]'....);
« Modifié: 06 septembre 2006 à 00:56:49 par diaoul »

Hors ligne Vincent59

  • Débutant
  • *
  • Messages: 10
Re : Parser
« Réponse #16 le: 06 septembre 2006 à 16:22:49 »
Pour l'écriture fichier / base de données :

1 - Base de données
$sql="INSERT INTO communes((nom, superficie, altitude) VALUES ('$nom','$super','$altitude')";
-> il ne faut pas oublier les simples quotes si les champs sont de type caractère

Ou bien, plus facile à maintenir :

$sql=sprintf("INSERT INTO communes((nom, superficie, altitude) VALUES ('%s','%s','%s')", $nom, $super, $altitude);

Ceci a aussi l'avantage de limiter le risque d'injection SQL (surtout dans les formulaires)
Evidemment, il faut d'abord ouvrir la connexion à la base, faire le mysql_query, etc.

2 - Fichier :

Code :

$filename = 'mescommunes.txt';
$txt_fichier = $nom.$super;

// ouverture 'w' : on écrase, 'a' on ajoute
if (!$handle = fopen($filename, 'w')) {
         echo "Cannot open file ($filename)";
         exit;
}

// On écrit le contenu
  if (fwrite($handle, $txt_fichier) === FALSE) {
       echo "Cannot write to file ($filename)";
       exit;
   }
 
fclose($handle);

?>


Un bon site pour le dév PHP : http://php.developpez.com/

Hors ligne stever

  • Débutant
  • *
  • Messages: 22
Re : Parser
« Réponse #17 le: 07 septembre 2006 à 08:35:07 »
ok le script fonctionne si
$data=$parser->get_result(); dans la page.php

parcontre si je fais :

   $nom=substr(strstr($line,"Nom de la commune"),17);
   if ($nom<> "") $result[0]=$nom;
   
   $reg=substr(strstr($line,"Région"),6);
   if ($reg<> "") $result[1]=$reg;
   
   $dep=substr(strstr($line,"Département"),11);
   if ($dep<> "") $result[2]=$dep;

cela ne fonctionne pas ?

car il trouve une "région" et un "département" plus haut dans le texte

Hors ligne Vincent59

  • Débutant
  • *
  • Messages: 10
Re : Parser
« Réponse #18 le: 07 septembre 2006 à 15:23:14 »
J'avais déjà eu le problème.
On peut faire comme ci-dessous : on ne déclenche la recherche que si on trouve Nom de la commune, et on arrête de chercher quand on trouve Altitude
Ceci évite de prendre en compte tout ce qui est en dehors de ces données...


$cherchemedor=0;
while (!feof($fp)) {
        $ligne = fgetss($fp, 4096);
        if ( strstr($ligne,'Nom de la commune') <> "") $cherchemedor = 1;
// Si on trouve donneesprincipales, on peut commencer la recherche des elements
        if ( $cherchemedor == 1 ) {
                echo $lnb,' ';
                if ( strstr($ligne,'Nom de la commune')) { $nomcommune = substr(strstr($ligne,'Nom de la commune'),17) ; }
                if ( strstr($ligne,'Région')) $region = substr(strstr($ligne,'Région'),6) ;
                if ( strstr($ligne,'Population')) $population = substr(strstr($ligne,'Population'),10);
                if ( strstr($ligne,'Altitude')) {
                        $altitude = substr(strstr($ligne,'Altitude'),8) ;
                        $cherchemedor = 0; // On arrete la recherche apres cette ligne
                }
        }
}


Tu peux bien sur remplacer les variables $region, $population par ton tableau $result[]

Hors ligne stever

  • Débutant
  • *
  • Messages: 22
Re : Parser
« Réponse #19 le: 08 septembre 2006 à 07:35:12 »
Salut le codene marche pas il doit y a voir des problemes au niveau des { }

c'est quoi echo $lnb,' ';
« Modifié: 08 septembre 2006 à 20:56:18 par stever »

Hors ligne Vincent59

  • Débutant
  • *
  • Messages: 10
Re : Parser
« Réponse #20 le: 11 septembre 2006 à 17:57:21 »
Curieux car ça marche chez moi. Au niveau des accolades, le nombre est bon

la ligne echo $lnb, c'était juste des traces pour afficher le numero de ligne que je traite. On peut supprimer sans problème

Hors ligne stever

  • Débutant
  • *
  • Messages: 22
Re : Parser
« Réponse #21 le: 11 septembre 2006 à 18:44:09 »
ok merci effectivement le probleme ne vient pas des {}

il vient de la suite du code a traiter

<h4>Ressources et productions</h4>
<p><ul><li>Exploitation forestière.</li>
<li>Maïs.</li>
<li>Viculture.</li>
<li>Elevage.</li>
</ul></p>
code]


Car si je rajoute au code qui fonctionne

         
if ( strstr($ligne,'Ressources et productions'))
{
$ressources = substr(strstr($ligne,'Ressources et productions'),24) ;
et bien $ressources ne donne rien car les information ne sont pas sur la meme ligne ?

comment faore pour prendre les info sur la ligne suivante ?
« Modifié: 12 septembre 2006 à 17:43:01 par stever »

Hors ligne stever

  • Débutant
  • *
  • Messages: 22
Re : Parser
« Réponse #22 le: 12 septembre 2006 à 12:24:47 »
Il faut il supprimer les /r/n et /n
« Modifié: 12 septembre 2006 à 17:43:36 par stever »