Page 1 sur 1
Pb lignes vides dans un fichier
Posté : 01 nov. 2005, 20:57
par DarkBlue
Voila mon probleme :
Je lis un fichier dans lequel se trouve du texte avec des sautes de ligne par moments .
J'utilise ce petit code :
$fichier="fichier.txt";
if ($ligne= file($fichier)) {
for($i = 0; $i < count($ligne); $i++)
if ($ligne[$i]!=''){echo $ligne[$i]."<BR>";};
}else
{echo "LE ficher ne peut pas etre lu";};
Normalement il devrait seulement afficher les liignes non vide et donc me renvoyer le contenu de mon fichier texte SANS les sautes de lignes mais rien a faire iil me lit le fichier texte tel quel ...
Si vous auriez une idee ça serait sympa merci a vous !
Posté : 01 nov. 2005, 20:58
par Vaedan
Tu es sous windows je suppose, les lignes sont donc de la forme \r\n
Posté : 01 nov. 2005, 21:02
par DarkBlue
Merci ton idee fonctionne seulement certaines lignes subsistent (si 2 lignes etaient sautees en meme temps)
Posté : 01 nov. 2005, 21:03
par Vaedan
Petit cours
Les lignes sont exprimées de différentes manières sur Windows, Mac et Linux (globalement les systèmes Unix).
Sous Mac le retour à la ligne est un retour charriot CR \r.
Sous *nix le retour à la ligne est une fin de ligne ( ? ) LF \n.
Sous Windows, c'est les 2 ! CR_LF \r\n
La bonne représentation devrait être la notation *nix \n. En attendant, il faut donc faire attention au type utilisé. Je te suggère de choisir le mode *nix dans ton éditeur (tout bon éditeur propose cette option !)
Posté : 01 nov. 2005, 21:06
par DarkBlue
MErci pour cet eclaircissement qu va m etre tres util !
Posté : 01 nov. 2005, 21:06
par Vaedan
/**
NL to LF
New Line to Line Feed
Convertit les retours lignes d'une chaine
au format *nix
@param string Chaine de caractère
@return string
*/
function nl2lf( $string )
{
if ( empty( $string ) )
{
return '';
}
$string = str_replace( "\r\n", "\n", (string)$string );
$string = str_replace( "\r", "\n", $string );
return $string;
}
Posté : 01 nov. 2005, 21:14
par Vaedan
Concernant ton code, certaines choses pourraient être optimisées, à commencer par ta boucle for qui compte à chaque fois le nom de ligne !
Je te suggère une boucle while couplée à un trim()
$file = 'fichier.txt';
while ( $line = file( $file ) )
{
$line = trim( $line );
if ( ! empty( $line ) )
{
echo $line, '<br />';
}
}
Posté : 01 nov. 2005, 21:23
par DarkBlue
Merci de ton aide !

Posté : 01 nov. 2005, 21:44
par DarkBlue
Et si je veux les ecrire dans un ficher je fais comment ? je n'y arrive pas !
J'ai remplacer la ligne "echo" ou j'affiche par fwrite mais ren a faire le script s execute et le fichier est vide !
Posté : 01 nov. 2005, 21:53
par Cyrano
Voir d'abord
fopen() et après seulement
fwrite()
Posté : 01 nov. 2005, 21:54
par DarkBlue
J'ai troue la solution (je me sus mal exprime mais il etait evident que j avais ouvert le ficher avec fopen() avant lol)
Posté : 01 nov. 2005, 21:55
par Vaedan
Euh ... je ne comprends pas bien ce que tu veux faire ...
La méthode proposée ici permet de lire le contenu d'un fichier, et plus précisément, les lignes contenant qqch.
Si tu veux écrire dans un fichier, tu peux utiliser :
- fopen()
- file_put_contents()
Methode avec fopen
$fp = fopen( $file, 'w' );
// ou pour ajouter du texte :
// $fp = fopen( $file, 'a' );
fwrite( $fp, $contenu_du fichier );
fclose( $fp );
Methode avec file_put_contents (PHP5)
file_put_contents( $file, $contenu_du_fichier );