[PHP] Boucler sur mon code

Résolu
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); 

?>  


4 réponses

  1. 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,
    1. je mets le eof mais ça me met une boucle infinie et le programme ne se termine pas
  2. 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); 
    
    ?>
    1. ça boucle pas ton code, je l'ai vu sur l'autre post
    2. Est-ce que tu pourrais m'expliquer ce que veulent dire les : "/\?([^\s]*?)[\s]/"
    3. parce que y'a besoin de boucler ....

      Avoues que tu n'as pas testé tout simplement
    4. 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">
    5. /\?([^\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
  3. J'aimerai boucler sur le remplaçage des caracteres et sur l'ecriture
    1. function add_input($matches){
        return '<input type="text" id="'.$matches[1].'">';
      }
      $contenuMod =  preg_replace_callback( "/\?([^\s]*?)[\s]/","add_input",$text);
      1. oui je l'ai testé et ça me donne toujours un id="array"
      2. 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
      3. oui merci beaucoup maka54 ça fonctionne