Modification de lignes d'un document avec explode, preg_repl

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Modification de lignes d'un document avec explode, preg_repl

Re: Modification de lignes d'un document avec explode, preg_repl

par Moosh » 29 janv. 2011, 11:49

normal,
foreach ($lignes_document as $ligne)
lire : http://php.net/manual/fr/control-structures.foreach.php
Note:
A moins que le tableau soit une référence, foreach opère sur une copie des valeurs du tableau spécifié et non sur les valeurs elles-mêmes. foreach affecte le pointeur interne du tableau.

Re: Modification de lignes d'un document avec explode, preg_repl

par Bosyphe » 29 janv. 2011, 11:19

Oui effectivement,

J'ai donc remplacé les preg_replace par str_replace dans la mesure où l'expression à remplacer est dans chaque cas déterminée en amont à l'aide d'instructions preg_match.

Merci du conseil

Re: Modification de lignes d'un document avec explode, preg_repl

par stealth35 » 28 janv. 2011, 16:24

tu sais que ton preg_replace sert a rien dans ton cas, que str_replace suffis, et que tu le faire sur le document direct...

Re: Modification de lignes d'un document avec explode, preg_repl

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.

Re: Modification de lignes d'un document avec explode, preg_repl

par Mazarini » 27 janv. 2011, 15:59

Bonjour,

Pourquoi ne pas faire un $document = preg_replace("/BWP/", "BWPP", $document ); ? (hors pb de str_replace)

=> Pas d'explode, ni de foreach et d'implode.

Re: Modification de lignes d'un document avec explode, preg_repl

par jojolapine » 26 janv. 2011, 22:54

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 ;)

Re: Modification de lignes d'un document avec explode, preg_repl

par Bosyphe » 26 janv. 2011, 21:17

Rebonjour,

J'avais oublié de me connecter, d'où le "Invité".

Bosyphe

Modification de lignes d'un document avec explode, preg_repl

par Invité » 26 janv. 2011, 21:10

Bonjour,

Je veux modifier certaines lignes d'un document.

Voici le code d'essai sur lequel je bute :

/* Découpage du document en lignes */
$lignes_document = explode("\n", $document);

/* Analyse de chaque ligne */
foreach ($lignes_document as $ligne)

{
	$ligne = preg_replace("/BWP/", "BWPP", $ligne);
	echo $ligne;	
}

print_r($lignes_document);
$document = implode("\n", $lignes_document);

L'instruction echo affiche bien les lignes modifiées.

Par contre, $lignes_document (et par voie de conséquence $document) reste inchangé !

Je comprends d'autant moins que j'ai déjà utilisé cette technique et qu'elle marchait.

Quelqu'un peut-il m'aider à me débloquer ?

Grand merci d'avance