Aller au contenu

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


Aller à la solution Solutionné par captain_torche,

Sujets conseillés

Posté

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.


Posté

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.



Posté

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().


Posté

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 ?


Posté (modifié)

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
Posté

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


Merci beaucoup captain_torche.


Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...