Aller au contenu
dimi3

écrire une dernière ligne dans un fichier texte sans retour chariot

Noter ce sujet :

Recommended Posts

Bonjour,



L'écriture dans un fichier texte par la fonction fputs() crée un retour chariot après la dernière ligne, ce qui crée une ligne vide inutile.


J'ai tenté de passer par la création d'un tableau, mais je ne réussis pas à éviter l'ajout de cette dernière ligne vide.



Comment faire ?



Je vous remercie.


Partager ce message


Lien à poster
Partager sur d’autres sites

fputs() et fwrite() ne rajoutent pas de retour chariot... tu es certain que ce n'est pas la chaîne de caractère que tu écris qui en contient un ?

Un simple code montre bien cela :

<?php$fp=fopen("file.txt", "w");fputs($fp, "hello");fclose($fp);?>

# od -c file.txt0000000   h   e   l   l   o0000005

le fichier fait bien exactement 5 caractères.



Partager ce message


Lien à poster
Partager sur d’autres sites

Merci de ta réponse.



Afin de corriger un fichier contenant une dernière ligne vide et contenant quelques erreurs de frappe, je lis ce fichier ligne par ligne par un fgets(), pour remplir dans la foulée un fichier corrigé par un fputs() . Je ne parviens pas à empêcher la copie de la ligne vide en faisant une copie du premier fichier en réduisant la boucle de 1. C'est pourquoi, j'en ai conclu que c'est le fputs() qui me crée cette ligne inutile. D'après ton message, ce n'est donc pas le cas. Mais qui crée cette ligne vide ? Je n'inclus pas de \n dans mes fputs().


Partager ce message


Lien à poster
Partager sur d’autres sites

Je crois comprendre... Il doit y avoir un dernier \n inclus dans le fichier à copier !


Ma question devient donc : comment empêcher ce dernier \n d'être copié sur le fichier cible ?


Partager ce message


Lien à poster
Partager sur d’autres sites

C'était bien ça...



Pour supprimer le retour chariot, je fais :






$lines = file($fichier1);
$n = count($lines);


$fica = fopen($fichier1, "r");
$ficc = fopen($fichier2, "w");


for($f = 0; $f < $n; $f++)
{
$ligne = fgets($fica,4096);
if( $f == $n-1)
{
$longueur = strlen($ligne);
$ligne = substr($ligne,0,$longueur-1);
fputs($ficc, $ligne);
}
else
{
fputs($ficc, $ligne);
}




Ca marche. Voyez-vous quelque chose de plus intelligent ou efficace ?

Modifié par dimi3

Partager ce message


Lien à poster
Partager sur d’autres sites

Effectivement, trim() efface bien le retour chariot. J'étais sûr qu'il y avait plus simple que ma proposition.


Merci beaucoup captain_torche.


Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×