Insérer un retour chariot dans une chaine

Insérer un retour chariot dans une chaine - PHP - Programmation

Marsh Posté le 06-07-2012 à 14:20:12    

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

Reply

Marsh Posté le 06-07-2012 à 14:20:12   

Reply

Marsh Posté le 06-07-2012 à 16:09:19    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed