Page 1 sur 1

[PHP] Extraire une partie du texte

Posté : 29 avr. 2013, 12:29
par stoye
Bonjour,

Ci-dessous, j'ai un fichier xml dont je souhaiterai extraire une partie du text, je ne sais pas porgrammer en PHP.

Le contenu du fichier à traiter:

--------------- Debut ------------------------
tatatatatatatatatatatta
titititititititititititititit
dododododododododod
papapapapapapapapapap

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Linge_1
Linge_2
Linge_3
Linge_4
Linge_5
Linge_6
....
Linge_n
Content-Transfer-Encoding: 7bit

tatatatatatatatatatatta
titititititititititititititit
dododododododododod
papapapapapapapapapap--[/color]

------------ Fin -----------------------------


Le contenu du fichier après extraction

---------- Debut -----------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Linge_1
Linge_2
Linge_3
Linge_4
Linge_5
Linge_6
....
Linge_n
Content-Transfer-Encoding: 7bit


--------------- Fin -----------

en clair, extraire à partir de la ligne contenant "<?xml version="1.0" encoding="UTF-8" standalone="yes"?>"
jusqu'à "Content-Transfer-Encoding: 7bit" inclus.

Quelqu'un pourrait m'aider svp ? j'ai essayé avec ce code mais ça ne parche pas.

$MyfpM=/tmp/fichier_recu

function DisplayService ($MyfpM) {
while(!feof($MyfpM)) {
$line = fgets($MyfpM,4096);
echo($line);
if(preg_match('#<?xml(.*)Content-Transfer-Encoding#',$line,$ret)) {
}
}

fclose($MyfpM);

Re: [PHP] Extraire un partie du texte

Posté : 29 avr. 2013, 12:43
par ghost5922
Bonjour,

test mais rien de garantie

<?php

function DisplayService ($MyfpM) {
	$mavar = file_get_contents($MyfpM);
	if(preg_match('#<\?xml(.*?)Content-Transfer-Encoding#',$mavar,$ret)) {
		return $ret;
	}
	else{
		return false;	
	}
}

$MyfpM="/tmp/fichier_recu";

$xml=DisplayService ($MyfpM);

print_r($xml);

?>

Re: [PHP] Extraire un partie du texte

Posté : 29 avr. 2013, 13:49
par moogli
Salut,

Tu peux le faire avec un substr et deux strppos ;)

Je te laisse tester.


@+

Re: [PHP] Extraire une partie du texte

Posté : 29 avr. 2013, 14:58
par stoye
Re-Bonjour ghost5922,

Merci beaucoup pour ce retour rapide, je viens de tester, l'execution se termine sans erreur, mais rien de s'affiche
sur la sortie standard. Je vais continuer à chercher mais si quelqu'un aurait une idée, je suis preneur.

Merci à vous.

Stoye

Re: [PHP] Extraire une partie du texte

Posté : 29 avr. 2013, 15:40
par ghost5922
Bonjour,

cela doit venir de la regex regarde un peu sur google sur regex php

Re: [PHP] Extraire une partie du texte

Posté : 30 avr. 2013, 11:45
par stoye
Bonjour,

J'ai essayé avec ses 2 regexp ci-dessous mais rien à faire.

if(preg_match('#^[<]?xml(.*)bit#',$mavar,$ret))
if(preg_match('#\<\?xml(.*)bit#',$mavar,$ret))

Je commence à désespérer car il ne me reste plus que 2 jours pour rendre mon projet.

Merci à vous

Re: [PHP] Extraire une partie du texte

Posté : 30 avr. 2013, 12:15
par ghost5922
Bonjour,

Voila

explication : on récupéré le fichier dans une variable on remplace les deux lignes par rien puis on return le résultat
<?php

function DisplayService ($MyfpM) {
         $mavar = file_get_contents($MyfpM);
		$mavar=str_replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '', $mavar);
		$mavar=str_replace('Content-Transfer-Encoding: 7bit', '', $mavar);
		return $mavar;
}

$MyfpM="xml.php";

$xml=DisplayService2 ($MyfpM);

echo $xml;

?>

Re: [PHP] Extraire une partie du texte

Posté : 06 mai 2013, 15:03
par stoye
Bonjour,

Merci beaucoup pour cette proposition mais elle ne me convient car cet exemple laisse des lignes vides et aussi les mots
clé pouvant à tout moment changer.

J'ai donc utilisé la solution de "Moogli" avec 1 substr et deux strppos, j'avoue que c'est très efficace.

<?php

$findme1="<?";
$findme2="bit";

$pos1 = stripos($body2, $findme1);
if ($pos1 !== false)
{

echo "La chaine '$findme1' a ete trouve dans le texte ";
echo " a la position $pos1 ";
}

$pos2 = stripos($body2, $findme2);

if ($pos2 !== false)
{

echo "La chaine '$findme2' a ete trouve dans le texte ";
echo " a la position $pos2 ";
}

$taille_tempo = $pos2 - $pos1;

// la taille de la 2e chaine de recherche (bit) etant de 3 caracteres, on le rajoute
$taille = $taille_tempo + 3;
echo $taille;

$rest = substr($body2, $pos1, $taille);
echo $rest;

}

$MyfpM="xml.php";

$xml=DisplayService ($MyfpM);

?>