Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb avec un fichier texte et la fonction trim

3 réponses
Avatar
Phil P.
Bonjour,
J'essaie de récupérer un array depuis un fichier text avec la fonction
explode().

Le fichier txt est du style:
----------------------
May 18, 2006|*|bjones|*|Encore un petit message!!!!!!!|*|
May 18, 2006|*|bjones|*|coucou. this is a test!|*|
-----------------
ma fonction en php est la suivante:
---------------
$entries = "../entries.txt";
$filesize = filesize($entries);
$delimiter = "|*|";$fp =
fopen($entries,"rb");
$content = @fread($fp,$filesize);fclose($fp);
$content = trim($content);
$lines = explode($delimiter,$content);
echo '<pre>';
print_r($lines);
echo '</pre>';
if ($filesize == 0) {$total = 0;}
else {$total = count($lines);}
echo $total;
-----------------
et j'obtiens:
------------------
Array
(
[0] => May 18, 2006
[1] => bjones
[2] => Encore un petit message!!!!!!!
[3] =>
May 18, 2006
[4] => bjones
[5] => coucou. this is a test!
[6] =>
)
7
--------------------
J'aimerais supprimer le retour chariot a la fin de
chaque ligne du fichier txt et la fonction trim() ou rtrim() n'a pas l'air
de fonctionner ici.
Une idee ou est le pb.

Merci.
Phil P.

3 réponses

Avatar
Olivier Miakinen

Le fichier txt est du style:
----------------------
May 18, 2006|*|bjones|*|Encore un petit message!!!!!!!|*|
May 18, 2006|*|bjones|*|coucou. this is a test!|*|
-----------------
ma fonction en php est la suivante:
---------------
[...]
$fp = fopen($entries,"rb");
$content = @fread($fp,$filesize);fclose($fp);


Autant écrire directement :
$content = file_get_contents($entries);

$content = trim($content);
$lines = explode($delimiter,$content);
[...]
J'aimerais supprimer le retour chariot a la fin de
chaque ligne du fichier txt et la fonction trim() ou rtrim() n'a pas l'air
de fonctionner ici.


Normal, trim() et rtrim() ne suppriment aucun caractère en milieu de chaîne.

Tu peux remplacer :
$content = trim($content);

par :
$content = str_replace(array("r", "n"), "", $content);

Et si tu es sûr que file_get_contents() retourne toujours un simple "n"
comme fin de ligne, c'est encore plus simple :
$content = str_replace("n", "", $content);

Tu peux alors tout écrire en une seule ligne :
$content = str_replace("n", "", file_get_contents($entries));

Avatar
Florian Sinatra
*Olivier Miakinen* @ 18/05/2006 22:57 :
J'aimerais supprimer le retour chariot a la fin de
chaque ligne du fichier txt et la fonction trim() ou rtrim() n'a pas l'air
de fonctionner ici.


Normal, trim() et rtrim() ne suppriment aucun caractère en milieu de chaîne.

Tu peux remplacer :
$content = trim($content);

par :
$content = str_replace(array("r", "n"), "", $content);


Si ca peut servir à quelqu'un, j'ai écrit une fonction qui fait un peu
le boulot de trim à l'intérieur d'une chaîne:

/* enlève les caractères suivants en début et fin de chaîne, et remplace
leurs doublons dans la chaîne par un espace
" " (ASCII 32 (0x20)), un espace ordinaire.
"t" (ASCII 9 (0x09)), une tabulation.
"n" (ASCII 10 (0x0A)), une nouvelle ligne (line feed).
"r" (ASCII 13 (0x0D)), un retour chariot (carriage return).
"" (ASCII 0 (0x00)), le caractère NUL
"x0B" (ASCII 11 (0x0B)), une tabulation verticale.
*/
function trim_pawa($str,$charlist = " tnrx0B") {
$str = (string)trim($str,$charlist);
$str = str_replace(str_split($charlist)," ",$str);
return preg_replace('`s{2,}`'," ",$str);
}

S'il y a des améliorations notables à faire, je suis toute ouïe.


Avatar
Phil P.
J'avais finalement trouve ceci quelques heures apres.

$content = str_replace(array("rn", "n", "r"), $delimiter,
trim($content));
a la place de cette ligne:
$content = trim($content);

J'avais poste une reponse sur le forum mais elle avait ete rejete parce que
j'avais tout simplement poste mon message en entier. Merci pour vous
reponses.

Phil P.