recuperation fichier texte : supprimer saut de ligne

Eléphant du PHP | 223 Messages

23 avr. 2007, 10:17

Bonjour,
J'ai un fichier texte contenant des enregistrements que j'ouvre avec fopen. Je recupere ces enregistrements ligne par ligne avec fgets.
Le problème est que qd j'affiche le contenu de mon tableau créé avec fgets, il y a un saut de ligne entre chaque ligne de mon tableau. Comment faire pour le supprimer? Mais surtout, comment faire pour recuperer les lignes de mon fichier texte sans ce saut de ligne...
Si ca peut mettre sur la voie, le fichier texte a été rempli par un fputs auparavant
fputs($fp,$value."\r\n")
Merci

Eléphant du PHP | 223 Messages

23 avr. 2007, 10:43

j'ai refait un ptit script qui reprend les étapes de mon traitement pour expliquer
<?php

$tab=array();
$chaine='jfdkgjkhgkdhfg-jkjhgfkgbfbhg-kgkjgkbgkh-kgkgkhgkhgkjg-hgjhgvjh';
$tab=explode('-',$chaine);

echo '<pre>';
print_r($tab); 
echo '</pre>';
/********************on place chque ligne de $tab dans le fichier ouverture.txt********************/
$fp = fopen("ouverture.txt","w+"); 
fseek($fp,0);                     

foreach ($tab as $value) {
	fputs($fp,$value."\r\n");}            
fclose($fp);

/********************on ouvre le fichier ouverture.txt pour afficher chaque ligne******************/

$fic=fopen("ouverture.txt",'r+');
while(!feof($fic)){
	$ligne2[]= fgets($fic,4096);
	}

echo '<pre>';
print_r($ligne2); 
echo '</pre>';

?>
Donc qd je reouvre mon fichier ouverture.txt crée, des sauts de lignes viennent se mettre à la fin de chaque enregistrements, comment faire pour les enlever?
merci

ViPHP
ViPHP | 5924 Messages

23 avr. 2007, 10:43

Met juste \n pour le saut de ligne, le retour charriot est inutile derrière.

Eléphant du PHP | 223 Messages

23 avr. 2007, 11:34

\n uniquement me donne exactement la meme chose...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 avr. 2007, 12:02

C'est normal.. fgets() te retourne les données du fichier ligne par ligne, mais n'a aucune raison d'y supprimer des caractères. Il conserve donc les retours charriot qui se trouvent au bout de chaque ligne.

Si tu veux les supprimer, il te suffit d'utiliser str_replace() ou substr() pour les dégager :) (le premier étant plus propre, puisque tu peux virer aussi bien "\r\n" que "\n" sans te soucier de la façon dont le fichier a été créé)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 223 Messages

23 avr. 2007, 12:32

j'ai rajouté le str_replace, mais les sauts de lignes sont toujours présents!!!

voilà ce que j'ai rajouté
$old=array("\r\n","\n");
foreach ($ligne2 as $value){
	$value=str_replace($old,"",$value);
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 avr. 2007, 16:09

Euh... attention, là tu colle la valeur de ton tableau dans ta variable, et tu modifies le contenu de ta variable, mais ca ne change en rien le contenu du tableau. Essayes comme ceci :) :
for ($i=0; $i < count($ligne2); $i++) {
  $ligne2[$i] = str_replace(array("\r\n","\n"), "", $ligne2[$i]); 
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...