Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1033 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Parser un fichier ligne par ligne

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Parser un fichier ligne par ligne

n°1371705
weed
Posté le 21-05-2006 à 20:59:04  profilanswer
 

Voilou je dois parser un fichier xml et j'ai un petit souci avec fread. Comme 2ème argument de fread, il faut indiquer la taille du bloc à lire.  
J'avais mis 1024 au début mais je me suis vite apercus que certaines balises de mon fichier XML n'etait pas inserer dans ma base de donnée. J'ai alors augmenté la longueur à 2024 et bingo, c'etait ca.  
 
Le problème c'est que j'aimerais lire ligne par ligne mais si je mets un nombre trop petit, ca va lire la moitié de la ligne, si je mets trop grand, il va y avoir un décalage. Ca va lire la ligne en entiere et une partie de ligne suivante, ce qui fait que ca fait merder mon parsage.  
 
La solution serait de charger tout dans une variable mais c'est pas tres propre comme solution : fread ($fd, filesize ($filename))
 
Je sais pas trop quoi faire, comment faire ?  
 
J'ai regardé, dans les tutos dont celui de commentcamarche, zend et ils font pareil que moi.  
http://www.commentcamarche.net/php/phpxml.php3
http://www.zend.com/zend/art/parsing.php
 
Il parse au fur et mesure de la lecture du fichier mais leur systeme n'est pas du tout fiable non plus.
 
 
 
voici mon bout de code si cela peut servir ...
 
PS : je suis en PHP4  :cry: bien sur sinon je me serais renseigné sur le fameux simpleXML  :sol:  

Code :
  1. function exportToMySQL ($tablename, $champs)
  2.  {
  3.   $this->parser = xml_parser_create();
  4.   xml_set_object($this->parser, $this);
  5.   xml_set_element_handler ($this->parser, 'OpenTag', 'CloseTagToMySQL');
  6.   xml_set_character_data_handler($this->parser, 'donnee');
  7.   while ($fd = parsingXML::LectureFichier ())
  8.   {
  9.    echo "<br><br>lecture de fichier = ".$fd;
  10.    parsingXML::ParseData ($fd);
  11.   }
  12.  }
  13.  //méthode privée
  14.  function ParseDaTa ($data)
  15.  {
  16.    if(!xml_parse($this->parser, $data))
  17.    {
  18.     die(sprintf("<br>XML error: %s at line %d",
  19.     xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)));
  20.  
  21.    }
  22.  }
  23.  function LectureFichier ()
  24.  {
  25.   static $fd;
  26.   if ($fd == "" )
  27.    $fd = fopen ($this->fichier, "r" );
  28.   if (feof($fd))
  29.   { fclose ($fd);
  30.    return FALSE;
  31.   }
  32.   else
  33.   {
  34.    return fread ($fd, 2024);
  35.   }
  36.  }
  37.  function OpenTag ($parser, $tagName, $attribu)
  38.  {
  39.   echo "<br>OpenTag : ".$tagName;
  40.   $attribu = implode("|", $attribu);
  41.   $this->TabLine[$tagName]="";
  42.   $this->TagNameCurrent = $tagName;
  43.  if (trim ($attribu) != "" )
  44.   $this->TabLine[$tagName]=$attribu;
  45.  }
  46.  function CloseTagToMySQL ($parser, $tagName)
  47.  {
  48.   if (trim($tagName) == $this->NewLine)
  49.   {
  50.    $q = "INSERT `INDEX_EUROPE` set TRANSACTION_ID='".$this->TabLine['TRANSACTION']."', MSISDN='".$this->TabLine['MSISDN']."',
  51.    DATE='".$this->TabLine['DATE']."', PRICE='".$this->TabLine['PRICE']."', CURRENCY='".$this->TabLine['CURRENCY']."', TAG='".$this->TabLine['TAG']."',
  52.    MODE='".$this->TabLine['MODE']."', STATUS='".$this->TabLine['STATUS']."', NOTICE='".$this->TabLine['NOTICE']."', PRODUCT_ID='".$this->TabLine['PRODUCT']."',
  53.    TYPE='".$this->TabLine['TYPE']."', LABEL='".$this->TabLine['LABEL']."'
  54.    ";
  55.    $rm = mysql_query ($q); 
  56.    if (!$rm)
  57.     echo ('<br><br>Requête invalide : ' . mysql_error());
  58.   }
  59.  }
  60.  function donnee ($parser, $data)
  61.  {
  62.   $data = addslashes ($data);
  63.   if (trim ($data) != "" )
  64.   {
  65.    $this->TabLine[$this->TagNameCurrent] = $data;
  66.   }
  67.   $this->TagNameCurrent = "";
  68.  }
  69. }

mood
Publicité
Posté le 21-05-2006 à 20:59:04  profilanswer
 

n°1371709
KangOl
Profil : pointeur
Posté le 21-05-2006 à 21:03:13  profilanswer
 
n°1371722
weed
Posté le 21-05-2006 à 21:21:05  profilanswer
 

Citation :

file
 
(PHP 3, PHP 4, PHP 5)
file -- Reads entire file into an array


 
et bien c'est ce que j'aimerais bien eviter de faire si j'ai un gros fichier .....
 

n°1371725
weed
Posté le 21-05-2006 à 21:40:03  profilanswer
 

bon je viens de découvrir une vrai fonction  :o  que j'ai nommé fgets qui lit ligne par ligne.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Parser un fichier ligne par ligne

 

Sujets relatifs
macro copier coller 2 colonnes sur une ligneFormulaire HTML--> fichier XML
TextBox : Petit carré devant chaque saut de lignetransfert de donnée d'un fichier
coment avoir la racine d'1 fichier que j'ouvre ac une boite de dialStocker un fichier dans un programme VB
Afficher le nom d'un fichier sans chemin d'acces ni extensionexporter un fichier csv vers une table sql
rechercher, et faire quelquechose avec le fichier trouvé après...Generation d'un fichier cab sous Visual Studio 2005
Plus de sujets relatifs à : Parser un fichier ligne par ligne


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR