Pb lignes vides dans un fichier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pb lignes vides dans un fichier

par Vaedan » 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 );

par DarkBlue » 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)

par Cyrano » 01 nov. 2005, 21:53

Voir d'abord fopen() et après seulement fwrite()

par DarkBlue » 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 !

par DarkBlue » 01 nov. 2005, 21:23

Merci de ton aide ! :P

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

par Vaedan » 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;
}

par DarkBlue » 01 nov. 2005, 21:06

MErci pour cet eclaircissement qu va m etre tres util !

par Vaedan » 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 !)

par DarkBlue » 01 nov. 2005, 21:02

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

par Vaedan » 01 nov. 2005, 20:58

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

Pb lignes vides dans un fichier

par DarkBlue » 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 !