Jump to content
dimi3

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

Rate this topic

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.


Share this post


Link to post
Share on other 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.



Share this post


Link to post
Share on other 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().


Share this post


Link to post
Share on other 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 ?


Share this post


Link to post
Share on other 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 ?

Edited by dimi3

Share this post


Link to post
Share on other 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.


Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...