Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1335 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Insérer un retour chariot dans une chaine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Insérer un retour chariot dans une chaine

n°2148431
Ellia
Peace and Love
Posté le 06-07-2012 à 14:20:12  profilanswer
 

Bonjour,
 
J'ai un petit soucis à régler dans mon fichier php.
Alors, j'ouvre un fichier, je met tous le contenu dans une variable. Puis j'explose cette variable par chaque ";".
Car chaque ligne termine par un point ; .
 
Mais moi j'aimerai faire en sorte que si une ligne mesure plus de 36 caractères, je fais un retour chariot.
 
J'ai ça comme code pour l'instant, mais ça n'a pas l'air de marcher
 
 
 

Code :
  1. $tabfich = explode(';',$recuperation);
  2.       foreach($tabfich as $ligne)
  3.       {
  4.         if (strlen(trim($ligne))>36)  {
  5.          $recuperation .= "\n";
  6.         }
  7.       }


 
si quelqu'un a une solution ?  
 
Ellia

mood
Publicité
Posté le 06-07-2012 à 14:20:12  profilanswer
 

n°2148456
Archaygo
Posté le 06-07-2012 à 16:09:19  profilanswer
 

Je te propose la solution suivante :

Code :
  1. // Gère l'ajout de fin de ligne
  2. $addEOL = function($line, $maximumLength, &$buffer) use (&$addEOL) {
  3.   // Découpage de la ligne si trop longue
  4.   if(strlen($line) > $maximumLength) {
  5.     // Récupération des deux morceaux de la ligne découpée
  6.     $newLineRest = substr($line, $maximumLength);
  7.     $newLine = substr($line, 0, $maximumLength);
  8.     // Ajout de la fin de ligne sur le premier morceau
  9.     $buffer .= trim($newLine).PHP_EOL;
  10.     // Vérification de la longueur du morceau restant
  11.     if(strlen($newLineRest) > $maximumLength)
  12.       $addEOL($newLineRest, $maximumLength, $buffer);
  13.     else
  14.       $buffer .= trim($newLineRest).PHP_EOL;
  15.   } else {
  16.     if(!empty($line))
  17.       $buffer .= trim($line).PHP_EOL;
  18.   }
  19. };
  20. // Ouverture du fichier
  21. $fileResource = fopen($filename, 'r');
  22. $buffer = "";
  23. // Parcourt du fichier
  24. while(!feof($fileResource)) {
  25.   // Découpage de la ligne si on trouve un ;
  26.   $lines = explode(';', fgets($fileResource, 4096));
  27.   // Ajout des fins de ligne
  28.   foreach($lines as $line) {
  29.     $addEOL($line, 36, $buffer);
  30.   }
  31. }
 

Étant donné que je doute de la ré-utilisabilité de la fonction qui ajoute des fins de ligne, j'ai utilisé une closure, mais tu peux très bien utiliser une fonction normale. Par contre, une fonction récursive comme celle-là te sera indispensable pour être sûr qu'aucune ligne n'excède la longueur que tu souhaites. La faiblesse de ton bout de code est, entre autre, qu'il ne se soucie pas du reste de ta ligne qui peut très bien excéder une fois de plus 36 caractères.


Message édité par Archaygo le 06-07-2012 à 16:14:34

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Insérer un retour chariot dans une chaine

 

Sujets relatifs
Récupérer les nombres d'une chaine de caractère ???remplacer un caractère dans une chaine
Insérer fichier en xml sur une page en htmlInsérer une page dans formulaire d'inscription
inserer une ligne grace a un bouton vba/excelExtraire chaine numérique en VB
Que signifie chaine[i]='\0';Inserer une balise div dans une balise a
Trouver une URL dans une chaineRetour fonction C
Plus de sujets relatifs à : Insérer un retour chariot dans une chaine


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR