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

?>  


4 réponses

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

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