Archaygo | Je te propose la solution suivante :
Code :
- // Gère l'ajout de fin de ligne
- $addEOL = function($line, $maximumLength, &$buffer) use (&$addEOL) {
- // Découpage de la ligne si trop longue
- if(strlen($line) > $maximumLength) {
- // Récupération des deux morceaux de la ligne découpée
- $newLineRest = substr($line, $maximumLength);
- $newLine = substr($line, 0, $maximumLength);
- // Ajout de la fin de ligne sur le premier morceau
- $buffer .= trim($newLine).PHP_EOL;
- // Vérification de la longueur du morceau restant
- if(strlen($newLineRest) > $maximumLength)
- $addEOL($newLineRest, $maximumLength, $buffer);
- else
- $buffer .= trim($newLineRest).PHP_EOL;
- } else {
- if(!empty($line))
- $buffer .= trim($line).PHP_EOL;
- }
- };
- // Ouverture du fichier
- $fileResource = fopen($filename, 'r');
- $buffer = "";
- // Parcourt du fichier
- while(!feof($fileResource)) {
- // Découpage de la ligne si on trouve un ;
- $lines = explode(';', fgets($fileResource, 4096));
- // Ajout des fins de ligne
- foreach($lines as $line) {
- $addEOL($line, 36, $buffer);
- }
- }
| É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
|