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 :

Lecture d'une chaine de caractère avec fgets


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Lecture d'une chaine de caractère avec fgets
    salut a tous je suis nouveau dans le monde du php. Après avoir lu pas mal de tuto je commence à avancer un ti projet.
    Avec une commande novell j'ai editer un fichier texte Liste_S.txt dans ce fichier ça se présente comme ça:

    Files Size Last Update Owner
    (Propriétaire)
    ----------------- --------- --------------- -------------------------
    doc.HTM 30 720 11/10/05 15:32 util1.nomduservice.
    doc.XLS 17 408 11/10/05 11:49 util2.nomduservice.

    J'aimerais récupérer la chaine de caractère dans la colonne owner (util1 par exemple) pour m'en servir dans la variable $str.
    Deja si je suis bien la logique il faut d'abord que:
    1) je verifie si mon fichier existe
    2) j'ouvre mon fichier en lecture
    3) lire mon fichier
    et c la ou je bloc ! jfais comment pour lire juste util1 ???? comment on definit une plage de caractère car jveux pas lire ce qu'il y a avant? merci pour vo reponse

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut
    Tu peux definir un separateur entre tes champs, par exemple un ";" ou un "|".

    Tu recuperes les lignes sous forme de string par un fgets et ensuite tu fais un explode en passant en parametre la chaine de caractere recuperée et le separateur que tu as choisi.

  3. #3
    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
    je dirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $filename = 'mon_fichier.txt';
    $lines = file($filename);
    $nb_lines = count($lines);
    //On saute les deux premières lignes
    for($i = 2 ; $i < $nb_lines ; $i++) {
       $infos = split("[ \t]", $lines[$i]);
       $str = $infos[count($info) - 1];
    }

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    jsuis un gros newbie en dev je commence donc jsuis pas une bete . dans ton code tu recupere juste la chaine util1 et pas la chaine ligne entiere? :

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    jpige pas cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $infos = split("[ \t]", $lines[$i]);

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut
    split fonctionne comme explode.
    Ces 2 fonctions "explosent" une chaine a chaque fois qu elles rencontrent un separateur "ici \t" donc un espace

    $infos est donc un tableau
    et $infos[0]="doc.HTM"; (si je suis ton exemple)
    $infos[1]="30";

    ...

    Le dernier element du tableau (apres le dernier espace) est le champ que tu souhaites isolé.

  7. #7
    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
    tu as une ligne qui contient des items séparés par des espaces.
    le split prend en premier argument le critère de séparation (ici espace ou tabulation => [ \t])et en deuxième argument la chaine de caractères. Elle retourne la chaine scindée suivant le critère sous forme de tableau.
    J'explique boucoup moins bien que la doc officielle
    http://php.net/split

    EDIT: grilled

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Le code php serait du style:
    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
     
    <? php
    $filename="Liste_S";
    if ($fd=fopen($filename,'r'))                        //jouvre mon fichier en lecture
    {
    $lines = file($filename);         
    $nb_lines = count($lines);                           //jcompte les lignes 
     
                 //On saute les deux premières lignes 
    for($i = 2 ; $i < $nb_lines ; $i++) { 
       $infos = split("[ \t]", $lines[$i]); 
       $str = $infos[count($info) - 1]; 
    fclose ($fd);                                       //jferme le fichier
    echo $str;                                          //j'affiche mon resultat juste pour voir
    }}
    else 
    { die ("ouverture du fichier <b>$filename</b>impossible."); }
     
    ?>
    C'est bon ou pas comme code???? le resultat si le fichier existe serait donc le util1 et si le fichier n'existe pas je devrais avoir le message comme quoi le fichier n'existe pas ??? :

  9. #9
    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
    tu n'a pas besoin de faire fopen, file s'en charge. idem pour fclose

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    ah ok jvais essayer de voir ça un peu

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

Discussions similaires

  1. [RegEx] Prélever une chaine de caractères avec contraintes
    Par Voodu dans le forum Langage
    Réponses: 5
    Dernier message: 17/03/2007, 23h36
  2. lecture d'une chaine de caractères
    Par freestyler dans le forum C#
    Réponses: 2
    Dernier message: 01/03/2007, 17h20
  3. Réponses: 3
    Dernier message: 26/12/2006, 09h13
  4. Dégradé sur une chaine de caractères avec 3 a 4 couleurs
    Par avogadro dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/03/2006, 13h21
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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