[PHP] Boucler sur mon code

Résolu
almaje -  
 almaje -
Bonjour,
Mon code ouvre un fichier, et dés qu'il trouve le caractère '?' il coupe ce qui a derrière lui jusqu'au prochain espace et le remplace par un input type="text" avec un id de ce qu'il a coupé. ET dans la 2e partie du code il ouvre mon fichier en mode ecriture et met ma variable.

Ce que je souhaite faire c'est de faire une boucle qui parcourt tout mon document et remplace tous les sous-chaines qui sont après un '?' par un input type.

La il s'arrete au premier '?' il ne continue pas sur tout le fichier

<?php 

$fichier="test.txt"; 

//ouverture en lecture et modification 
$text=fopen($fichier,'r') or die("Fichier manquant"); 
// la variable contenu reçoit tout le texte du document 
$contenu=file_get_contents($fichier, NULL, NULL, 0, 40000); 
echo $contenu; 
// chercher la variable a 
$a = '?'; 
// retourne la chaine après la chaine cherchée 
//while (!feof($text)) 
//{ 
$v = strstr($contenu,$a); 
// retourne un tableau de chaînes, chacune d'elle étant une sous-chaîne de la variable contenu extraite en utilisant le séparateur delimiter espace  
$v = explode( ' ', $v); 
// Supprimer le caractere '?'  
$remplace=str_replace('?', '', $v[0]); 
// Afficher premiere chaire 
// echo $v[0];  
// permet de chercher une sous chaine et de la remplacer. Dans notre cas on chaine la sous chaine $a et on la remplace par la sous chaine $v dans la chaine $contenu 
$contenuMod=str_replace($v[0], '<input type="text" id="' . $remplace . '">', $contenu); 
// echo $contenuMod; 
//} 
fclose($text); 

//ouverture en écriture 
$text2=fopen($fichier,'w+') or die("Fichier manquant"); 
fwrite($text2,$contenuMod); 
fclose($text2); 

?>  



A voir également:

4 réponses

benbax Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   29
 
Bonjour...

Alors pour ma part, ça remonte à très loin mais si je ne dit pas de bêtise, tu doit créer ta boucle de manière à ce qu'elle se termine sur le fameux caractère de contrôle "EOF" signifiant End Of file...

Je crois que tu pourra te débrouiller avec ça :
http://oseox.fr/php/traitement-fichier.html


Cordialement,
0
almaje
 
je mets le eof mais ça me met une boucle infinie et le programme ne se termine pas
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
je t'ai répondu sur ton premier post, apparemment tu n'as pas pris le temps de regarder ...

<?php  

$fichier="test.txt";  

fopen($fichier,'r') or die("Fichier manquant");  
$contenu=file_get_contents($fichier, NULL, NULL, 0, 40000);  

preg_match_all( "/\?([^\s]*?)[\s]/" , $contenu, $matches ); 
print_r($matches); 

?>
0
almaje
 
ça boucle pas ton code, je l'ai vu sur l'autre post
0
almaje
 
Est-ce que tu pourrais m'expliquer ce que veulent dire les : "/\?([^\s]*?)[\s]/"
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
parce que y'a besoin de boucler ....

Avoues que tu n'as pas testé tout simplement
0
almaje
 
Oui j'ai pas testé parce que j'ai trouvé une autre solution mais la quand j'ai testé ta solution ça marche mais quand je souhaite mettre :
$contenuMod=str_replace($matches[0], '<input type="text" id="' . $matches[1] . '">', $contenu);

ça me met dans l'id array
<input type="text" id="Array">
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
/\?([^\s]*?)[\s]/

signifie que tu recupere tous les elements commentcant par un point d'interrogation et se terminant par un espace

il faudrait utiliser preg_replace a la place de preg_match
0
almaje
 
J'aimerai boucler sur le remplaçage des caracteres et sur l'ecriture
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
function add_input($matches){
  return '<input type="text" id="'.$matches[1].'">';
}
$contenuMod =  preg_replace_callback( "/\?([^\s]*?)[\s]/","add_input",$text);
0
almaje
 
oui je l'ai testé et ça me donne toujours un id="array"
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
remplace $text par $contenu dans l'exemple

$fichier="test.txt";

$text=fopen($fichier,'r') or die("Fichier manquant");
$contenu=file_get_contents($fichier, NULL, NULL, 0, 40000);
fclose($text);

function add_input($matches){
  return '<input type="text" id="'.$matches[1].'">';
}
$contenuMod = preg_replace_callback( "/\?([^\s]*?)[\s]/","add_input",$contenu);

//ouverture en écriture
$text2=fopen($fichier,'w+') or die("Fichier manquant");
fwrite($text2,$contenuMod);
fclose($text2);


le code fonctionne
0
almaje
 
oui merci beaucoup maka54 ça fonctionne
0