Page 1 sur 1

Extraction d'une partie d'un fichier texte

Posté : 19 oct. 2007, 11:08
par matgk26
Bonjour à tous.

Tout d'abord désolé pour ce titre si peu explicite mais je ne sais pas comment présenter clairement mon problème en une simple ligne...je ne suis qu'un pauvre débutant qui a du mal à mettre des mots sur les choses en php.

Ce que je cherche à faire :

Créer une fonction qui affiche une partie d'un script existant. Ce dit script se structure de la sorte : <?php "contenu1 "<mabalise>"contenu2"</mabalise>"contenu3" ?>. Je veux donc que ma fonction n'affiche que le "contenu2" de mon script, situé entre les 2 bornes de ma balise <mabalise>.

J'ai pour le moment réussi à faire arréter mon affichage au bon endroit mais pas à le faire démarrer là où je le souhaite. En gros j'en suis au stade où ma fonction m'affiche "contenu1 "<mabalise>"contenu2"</mabalise>"(exit "contenu3"...c'est déja un bon début) mais je souhaite n'avoir que <mabalise>"contenu2"</mabalise>"

Je serai très reconnaissant envers la personne qui pourra éclairer ma lanterne de noob sur comment faire pour démarrer à <mabalise> et ne pas afficher tout ce qu'il y a avant.

Voici mon code :
function DisplayService ($MyfpM) {

	while(!feof($MyfpM)) {	
		$line = fgets($MyfpM,4096);	
		echo($line);
		if ($line == "</mabalise>\r\n") {
			break;
		}
		
	}
	fclose($MyfpMixad);
}
Merci d'avance.

Posté : 19 oct. 2007, 11:19
par d0m
tu peux utiliser les fonctions de chaines de caractère, par exemple strpos pour trouver la place de ta balise
et ensuite substr pour la sous chaine.

Sinon, les expressions régulières....

Posté : 19 oct. 2007, 11:28
par matgk26
Retrouver <mabalise> ne me pose pas trop de difficulté à vrai dire. Ce qui me pose problème c'est de commencer à afficher le contenu de ma boucle uniquement à partir de <mabalise>.

On peut diviser ça en différentes étapes :
1-je boucle sans afficher
2-je trouve <mabalise>
3-je continue à boucler mais j'affiche à partir de <mabalise>
4-je trouve </mabalise>
5-j'arrette de boucler

Les étapes 1,2,4 et 5 ne sont pas un soucis...là où je bloque c'est sur l'étape 3 : boucler et afficher à partir d'un point donné que j'ai au préalable identifié (et non pas l'identification de ce point). Je me suis mal exprimé sur l'exposition de mon problème :) ...désolé.

Peut-être que l'utilisation d'un booléen peut aider...mais je dois avouer ne pas du tout savoir comment utiliser ça à cet effet... :?

Posté : 19 oct. 2007, 13:07
par d0m
on dirait que ton script pour extraire les données du fichier suit certaines règles.
Tu as donc une structure de fichier à respecter? Pourrais tu donner le modèle du fichier
(ex : <mabalise> et </mabalise> toujours en début de ligne,...)

Re: Extraction d'une partie d'un fichier texte

Posté : 19 oct. 2007, 13:07
par Truc
Tout d'abord désolé pour ce titre si peu explicite mais je ne sais pas comment présenter clairement mon problème en une simple ligne
:-* Pas plus difficile que ça :wink:

Regarde du coté des expression régulières ou preg_match()
preg_match('#<mabalise>(.*)</mabalise>#',$texte,$ret); //expression basique, la moins restrictive

var_dump($ret); // test d'affichage

Posté : 22 oct. 2007, 17:57
par Invité
Hélas plus difficile que ça...:(

Utiliser les regex serait adapté dans le cas d'un affichage "d'un bloc".

Là il est important que mon affichage se fasse ligne par ligne au fur et à mesure (boucler et echo est donc indispenable pour chaque ligne)...

Je ne m'en sors vraiment pas...

Posté : 22 oct. 2007, 19:33
par Truc
boucle ou pas boucle l'affichage se fera en une fois... à moins de faire appel au fonction de bufferisation

Posté : 23 oct. 2007, 13:39
par fgranjon
Bonjour ,

Le seul problème lié au preg_match , c'est que l'on doit obligatoirement chargé l'ensemble du texte dans une variable ce qui peux s avérer problématique dans le cadre d'un fichier volumineux.

Tout comme le stipule Truc si tu peux charger l'ensemble du fichier texte dans une variable sa solution est tres adapté.

Sinon utilise une boucle avec un flag
0- flag affichage à 0
1-je boucle jusqu'a fin de lecture du fichier ou flag d affichage a 2
2-je trouve <mabalise> ,je positionne le flag d affichage à 1
3-je trouve </mabalise>,je positionne le flag d affichage à 2
4-si le flag d affichage > 0 ,j'affiche le texte

Enfin ce n est qu une solution parmis d autre. A toi de voir la plus adaptée.

Posté : 23 oct. 2007, 15:11
par h0_noMan
Il peut faire les 2.

Rechercher ligne par ligne jusqu'a ce que l'expression regulière soit vrai.
function DisplayService ($MyfpM) {

    while(!feof($MyfpM)) {    
        $line = fgets($MyfpM,4096);    
        echo($line);
        if(preg_match('#<mabalise>(.*)</mabalise>#',$line,$ret)) {
        
        }
        
    }
    fclose($MyfpMixad);
}