par
Bosyphe » 28 janv. 2011, 16:17
Bonsoir,
Il y a un problème majeur dans ton code...
// contenu d'origine
$lignes_document = $document;
foreach ($lignes_document as $ligne)
{
// initilisation de la variable $ligne
$ligne = preg_replace("/BWP/", "BWPP", $ligne);
}
// on remet à la place du contenu d'origine.... le contenu d'origne!
$document = implode("\n", $lignes_document);
A aucun moment, tu n'indiques que $ligne doit remplacer quelque chose...
D'autres petits détails:
-Pour le traitement que tu montres, str_replace(à suffit amplement et est bien plus adapté/rapide, que preg_replace()
-Pour lire un fichier dans un tableau directement, il existe la fonctione file() :
http://fr2.php.net/manual/fr/function.file.php
Bon courage

Merci de ta réponse et excuse-moi de n'avoir pas répondu rapidement.
Tout d'abord, j'ai présenté ici un code volontairement très simplifié. Le traitement réel consiste à analyser un texte xhml (dans lequel se trouve pour l'instant le code php) en y modifiant et en y complétant le contenu de certaines balises, contenu que je ne connais bien évidemment pas a priori. La fonction preg_replace est donc nécessaire ici pour remplacer des contenus de balise déterminés à l'aide d'expressions régulières. (J'ai utilisé la chaîne "BWP" pour faire des essais car elle est facilement identifiable dans le document que je traite, étant présente dans le premier titre. Je peux ainsi savoir rapidement quel résultat donne tel ou tel essai.)
Effectivement, je comprends la distinction subtile entre variable et image de cette variable.
Lorsque j'écris
$ligne = preg_replace("/BWP/", "BWPP", $ligne);
j'affecte une valeur à
l'image de la variable $ligne extraite du tableau $lignes_document. Mais le contenu du tableau n'est pas modifié. Piège !..
Ne voulant pas travailler avec des indices dans tout mon programme (de type $lignes_document[$i] ), et après une petite dose de recherche et de compréhension, j'ai très simplement résolu le problème en utilisant l'opérateur de référence & :
foreach ($lignes_document as & $ligne) // opérateur & placé ici
{
$ligne = & preg_replace("/AWP/", "AWPP", $ligne);
}
Tout le reste de mon programme reste donc inchangé. Voila un seul caractère très rentable
Merci de vos interventions.
[quote="jojolapine"]Bonsoir,
Il y a un problème majeur dans ton code...[php]
// contenu d'origine
$lignes_document = $document;
foreach ($lignes_document as $ligne)
{
// initilisation de la variable $ligne
$ligne = preg_replace("/BWP/", "BWPP", $ligne);
}
// on remet à la place du contenu d'origine.... le contenu d'origne!
$document = implode("\n", $lignes_document);[/php]
A aucun moment, tu n'indiques que $ligne doit remplacer quelque chose...
D'autres petits détails:
-Pour le traitement que tu montres, str_replace(à suffit amplement et est bien plus adapté/rapide, que preg_replace()
-Pour lire un fichier dans un tableau directement, il existe la fonctione file() : http://fr2.php.net/manual/fr/function.file.php
Bon courage ;)[/quote]
Merci de ta réponse et excuse-moi de n'avoir pas répondu rapidement.
Tout d'abord, j'ai présenté ici un code volontairement très simplifié. Le traitement réel consiste à analyser un texte xhml (dans lequel se trouve pour l'instant le code php) en y modifiant et en y complétant le contenu de certaines balises, contenu que je ne connais bien évidemment pas a priori. La fonction preg_replace est donc nécessaire ici pour remplacer des contenus de balise déterminés à l'aide d'expressions régulières. (J'ai utilisé la chaîne "BWP" pour faire des essais car elle est facilement identifiable dans le document que je traite, étant présente dans le premier titre. Je peux ainsi savoir rapidement quel résultat donne tel ou tel essai.)
Effectivement, je comprends la distinction subtile entre variable et image de cette variable.
Lorsque j'écris
$ligne = preg_replace("/BWP/", "BWPP", $ligne);
j'affecte une valeur à [u]l'image de la variable $ligne[/u] extraite du tableau $lignes_document. Mais le contenu du tableau n'est pas modifié. Piège !..
Ne voulant pas travailler avec des indices dans tout mon programme (de type $lignes_document[$i] ), et après une petite dose de recherche et de compréhension, j'ai très simplement résolu le problème en utilisant l'opérateur de référence & :
[php]
foreach ($lignes_document as & $ligne) // opérateur & placé ici
{
$ligne = & preg_replace("/AWP/", "AWPP", $ligne);
}
[/php]
Tout le reste de mon programme reste donc inchangé. Voila un seul caractère très rentable :)
Merci de vos interventions.