IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonction de recherche de ligne...


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut Fonction de recherche de ligne...
    Bonjour, j'ai écrit une fonction pour lire la dernière ligne d'un fichier.
    Mais elle plente avec le caractère "0" quand il se trouve dans le fichier...

    Pouriez vous m'aider? J'ai esseiller avec !== mais sa ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    	  //Récupération de la ligne actuèle :
    	  $Act_Pos = ftell($this->output);
    	  $Search_Pos = $Act_Pos - 3;//Remontée du dernier \n || \r || \r&&\n
    	  fseek($this->output, $Search_Pos, SEEK_SET);
    	  while($Char = fgets($this->output, 2))
    	  {
    		if($Search_Pos == $Star_Pos)
    		  {
    		    fseek($this->output, 0, SEEK_SET);
    		    break;
    		  }
    		if($Char == "\n" || $Char == "\r")
    		  break;
    	    $Search_Pos--;
    	    fseek($this->output, $Search_Pos, SEEK_SET);
    	  }
    	  $String = fread($this->output, 4096);
    	  fseek($this->output, $Act_Pos, SEEK_SET);
    	  return $String;

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Si tu considères que \n est le séparateur de ligne, pourquoi ne pas faire plus simple?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?
    define('FILE','myfile');
    $fp=fopen(FILE,'r');
    $buffer=fread($fp,filesize(FILE)-1);
    if(($pos=strrpos($buffer,"\n"))!== FALSE)
      echo substr($buffer,$pos+1);
    else
     echo $buffer;
    fclose($fp);
    ?>
    Ici, tu récupèreras dans tous les cas la dernière ligne du fichier.

  3. #3
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    En fait c'est une class de log, et je veut éviter de fermer/rouvrir le fichier, pour un tas de réson.
    J'ai seulement une connection vers le fichier ouverte, et mon pointeur est a l'endroit ou j'écrit(Sa peut être au milieu du fichier). Je voudrais donc retourner la dernière ligne ou se trouve le pointeur, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Blablabla
    blabla123 12|3Blabla
    Blablabla
    Le but est de récupèrer "blabla123 123Blabla".

    Seulement sa plente avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Blabla
    Blabla 0 bla|blabla
    Car la variable $Char qui contient "0" est intérpréter comme un false.
    J'ai esseiller avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $Char = fgets(...) !== false
    Mais alors $Char devien soit false, soit true.

    J'ai esseiller avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while(1)
    {
    $Char = fgets(...);
    if($Char === false)
      break;
    }
    Mais sa sort avec "0" !!!

    Je m'en remet donc a vous

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    +1 pour stéphane à mon sens.

    Si tu crées une classe de log, à priori tu lis tes logs ligne par ligne et non caractère par caractère.

    Mais ton problème me parait difficilement solvable puisque même si tu faisais un is_bool($Char); sa ne fonctionnerait pas... Sachant que $Char=0; is_bool($Char) renvoie true :/

  5. #5
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    non, $Char = "0" et non 0
    Enfin, si je ne me trompe pas, puisque fgets retourn des char....

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(false !== ($Char = fgets($this->output, 2)))

  7. #7
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Merci, pas bête
    Je vais esseiller sa.

    Edit : Sa marche!!! Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Recherche de ligne en fonctions de la position géographique
    Par rastacouaire dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 20/05/2009, 11h31
  2. Recherche une ligne en fonction d'une date
    Par c+cool dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/09/2006, 15h30
  3. recherche fonction equivalente a goto ligne 12 en php
    Par carmen256 dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2006, 22h34
  4. [String] Fonction de recherche de caractères numériques
    Par david71 dans le forum Général Java
    Réponses: 10
    Dernier message: 16/02/2005, 12h05
  5. Réponses: 14
    Dernier message: 09/04/2004, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo