Pb lignes vides dans un fichier

Eléphant du PHP | 440 Messages

01 nov. 2005, 20:57

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 !

Eléphant du PHP | 493 Messages

01 nov. 2005, 20:58

Tu es sous windows je suppose, les lignes sont donc de la forme \r\n

Eléphant du PHP | 440 Messages

01 nov. 2005, 21:02

Merci ton idee fonctionne seulement certaines lignes subsistent (si 2 lignes etaient sautees en meme temps)

Eléphant du PHP | 493 Messages

01 nov. 2005, 21:03

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 !)

Eléphant du PHP | 440 Messages

01 nov. 2005, 21:06

MErci pour cet eclaircissement qu va m etre tres util !

Eléphant du PHP | 493 Messages

01 nov. 2005, 21:06

/**
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;
}

Eléphant du PHP | 493 Messages

01 nov. 2005, 21:14

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 />';
    }
}

Eléphant du PHP | 440 Messages

01 nov. 2005, 21:23

Merci de ton aide ! :P

Eléphant du PHP | 440 Messages

01 nov. 2005, 21:44

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 !

Mammouth du PHP | 19672 Messages

01 nov. 2005, 21:53

Voir d'abord fopen() et après seulement fwrite()
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 440 Messages

01 nov. 2005, 21:54

J'ai troue la solution (je me sus mal exprime mais il etait evident que j avais ouvert le ficher avec fopen() avant lol)

Eléphant du PHP | 493 Messages

01 nov. 2005, 21:55

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 :
  1. fopen()
  2. 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 );