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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1386509
saternius
Ce n'est que mon avis ...
Posté le 13-06-2006 à 14:11:03  profilanswer
 

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.

mood
Publicité
Posté le 13-06-2006 à 14:11:03  profilanswer
 

n°1386534
nargy
Posté le 13-06-2006 à 14:35:31  profilanswer
 

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.

n°1386570
saternius
Ce n'est que mon avis ...
Posté le 13-06-2006 à 15:07:31  profilanswer
 

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

n°1386597
nargy
Posté le 13-06-2006 à 15:26:29  profilanswer
 

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 ".

n°1386629
saternius
Ce n'est que mon avis ...
Posté le 13-06-2006 à 15:46:57  profilanswer
 

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>"

n°1386647
nargy
Posté le 13-06-2006 à 16:01:03  profilanswer
 

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

n°1386665
saternius
Ce n'est que mon avis ...
Posté le 13-06-2006 à 16:09:41  profilanswer
 

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. }


n°1386702
nargy
Posté le 13-06-2006 à 16:38:07  profilanswer
 

> 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.

n°1386763
saternius
Ce n'est que mon avis ...
Posté le 13-06-2006 à 16:59:28  profilanswer
 

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...

n°1386796
nargy
Posté le 13-06-2006 à 17:11:59  profilanswer
 

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.

mood
Publicité
Posté le 13-06-2006 à 17:11:59  profilanswer
 

n°1386899
afbilou
pouet your life
Posté le 13-06-2006 à 19:56:40  profilanswer
 

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
n°1386937
saternius
Ce n'est que mon avis ...
Posté le 13-06-2006 à 20:47:15  profilanswer
 

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. }


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

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

 

Sujets relatifs
Acceder en VBS via ligne de cmd à un fichier excel[sql/Excel] requête sql vers Excel : problème de saut de ligne ...
acceder excel déjà ouvert avec XP en vbs via ligne de commandeEcrtiure ligne en fortrant
[HTML] Aller à la ligne automatiquement dans une <table>[VBA] Methode la plus rapide de recopiage de ligne
afficher ligne sur un graphique vbaSupprimer une ligne d'un fichier txt
"Résolu" Ignorer les espaces lors d'une comparaison de motsEXCEL - Inserer 1 nouvelle ligne toutes les 3 lignes
Plus de sujets relatifs à : Comment ignorer les sauts de ligne lors d'un parsing ?


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