dimi3 Posté 13 Février 2013 Posté 13 Février 2013 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.
Dan Posté 13 Février 2013 Posté 13 Février 2013 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.
dimi3 Posté 13 Février 2013 Auteur Posté 13 Février 2013 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().
dimi3 Posté 13 Février 2013 Auteur Posté 13 Février 2013 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 ?
dimi3 Posté 13 Février 2013 Auteur Posté 13 Février 2013 (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é 13 Février 2013 par dimi3
Solution captain_torche Posté 13 Février 2013 Solution Posté 13 Février 2013 un trim() sur le contenu du fichier original ne pourrait-il pas supprimer ce \n ?
dimi3 Posté 14 Février 2013 Auteur Posté 14 Février 2013 Effectivement, trim() efface bien le retour chariot. J'étais sûr qu'il y avait plus simple que ma proposition. Merci beaucoup captain_torche.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant