Comment ignorer les sauts de ligne lors d'un parsing ?

Comment ignorer les sauts de ligne lors d'un parsing ? - PHP - Programmation

Marsh Posté le 13-06-2006 à 14:11:03    

Voilà ma question est très simple, j'ai le fichier suivant :
 

Code :
  1. <DEBUT>ksjdflksdjflkjslkdfjljsdfljsdf
  2. sdfsdfsdfq
  3. qsdfqdf
  4. sdfsdfdfddddd<FIN>


 
J'aimerais récupérer la chaine entre les marqueurs DEBUT et FIN, soit tel quel, soit en remplacant les sauts de lignes par un espace par exemple.
 
Je propose le code suivant :
 

Code :
  1. $file = fopen ("test.html", "r" );
  2. while (!feof ($file)) {
  3. $line = fgets ($file, 2048);
  4. if(eregi ("<DEBUT>([^<]*)<FIN>", $line, $out)) {
  5.  echo "resultat: ".$out[1];
  6. }
  7. }


 
Oui mais voilà ca ne marche pas, cette fonction eregi s'arrete à la premiere fin de ligne qu'il rencontre, et donc ne m'affiche aucun résultat.
 
Quelqu'un aurait-il une idée pour m'aider ?
 
D'avance merci.

Reply

Marsh Posté le 13-06-2006 à 14:11:03   

Reply

Marsh Posté le 13-06-2006 à 14:35:31    

essaye:
http://php.net/file_get_contents
...pour récupérer le fichier d'un seul coup, à la condition qu'il ne soit pas trop volumineux.

Reply

Marsh Posté le 13-06-2006 à 15:07:31    

Le parsing ne marche malheureusement pas mieux avec cette fonction :/

Reply

Marsh Posté le 13-06-2006 à 15:26:29    

heu oui oui ton expression régulière est foireuse.

Code :
  1. "\\<DEBUT\\>([^\\<]*)\\<FIN\\>"


Le ``<`` indique le début d'un mot (après un espace/ponctuation, avant une lettre/nombre).
Pour avoir vraiment ``<`` il faut ajouter un \, c'est à dire deux \\ en comptant que tu est à l'intérieur de doubles guillemets ".

Reply

Marsh Posté le 13-06-2006 à 15:46:57    

Le probleme avec file_get_contents en fait est qu'il ne récupère que le contenu et interprete les balises... même si elles n'existent pas comme dans mon cas.
En gros dans mon cas elle renvoie "ksjdflksdjflkjslkdfjljsdfljsdf sdfsdfsdfq qsdfqdf sdfsdfdfddddd" au lieu de "<DEBUT>ksjdflksdjflkjslkdfjljsdfljsdf sdfsdfsdfq qsdfqdf sdfsdfdfddddd<FIN>"

Reply

Marsh Posté le 13-06-2006 à 16:01:03    

nan.
Renseignes toi sur les expressions régulières.
Y a plein de tutos sur le net.

Reply

Marsh Posté le 13-06-2006 à 16:09:41    

nargy a écrit :

nan.
Renseignes toi sur les expressions régulières.
Y a plein de tutos sur le net.


 
Ok au temps pour moi c'est juste mon navigateur qui interpretait les balise, pas la fonction.
Par contre le code suivant ne me renvoi toujours aucun résultat :/
 

Code :
  1. $file = file_get_contents ("test.html" );
  2. if(eregi ("\\<DEBUT\\>([^\\<]*)\\<FIN\\>", $file, $out)) {
  3. echo "resultat: ".$out[1];
  4. }


Reply

Marsh Posté le 13-06-2006 à 16:38:07    

> Renseignes toi sur les expressions régulières.
Lit la doc:
http://php.net/eregi
et fait tourner tes méninges.
 
J'ai horreur de corriger les regexp des autres, ça dépend beaucoup trop du format d'entrée, et c'est toujours pour faire de la bidouille. Apprends à en faire, ça t'aidera.

Reply

Marsh Posté le 13-06-2006 à 16:59:28    

Je ne suis vraiment pas du genre à faire faire mon boulot par les autres...
Ce probleme ca fait pas mal de temps que je suis dessus et si je demande de l'aide c'est que vraiment je n'y arrive pas (alors que la solution doit etre si simple..).
Des expressions regulieres ca fait longtemps que j'en fait en perl, en c et en php, et la page que tu m'indique en lien j'ai du la visiter au moins 100 fois déjà...
Et même après pas mal de recherche sur google, ce probleme de saut de ligne à l'air d'être loin d'etre evident...
 
Sinon pour les "<", ca a toujours fonctionné pour moi sans les "\\"...
 
Enfin bon...

Reply

Marsh Posté le 13-06-2006 à 17:11:59    

voui voui, les regexp perl ne sont pas le mêmes.
 
Si tu as l'habitude de perl, regarde plutôt:
http://fr.php.net/manual/fr/function.preg-match.php
(en plus c'est + efficace que eregi)
 
Je me souviens plus de la façon dont perl traite les retours à la ligne. Sinon, retour à la doc des regexp perl sur perl.org, il me semble. <<perlrequick>> (rapide) et <<perlretut>> (complet) comme mots clés dans les moteurs de recherche.

Reply

Marsh Posté le 13-06-2006 à 17:11:59   

Reply

Marsh Posté le 13-06-2006 à 19:56:40    

Code :
  1. preg_match('#<DEBUT>(.*)<FIN>#s' , file_get_contents('ton_fichier_texte.txt') , $out);
  2. echo $out[1];


Message édité par afbilou le 13-06-2006 à 19:58:47
Reply

Marsh Posté le 13-06-2006 à 20:47:15    

Ca marche :)  
J'allais justement poster mon code :  
 

Code :
  1. $line = file_get_contents("test.html" );
  2. if(preg_match("#<DEBUT>(.*)<FIN>#s", $line, $out))  {
  3. echo "resultat: ".$out[1];
  4. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed