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 :

parcourir un fichier txt à la recherche d'une chaine


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut parcourir un fichier txt à la recherche d'une chaine
    bonjour,

    je cherche une méthode qui me permettrait d'exploiter une ligne contenant une chaine de caractère dans un fichier TXT.
    j'aimerai évite de charger tout le fichier dans une variable avec file_get_content() afin d'optimiser au mieux l'application.

    merci d'avance pour votre aide.

  2. #2
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Salut,

    si tu n'es pas en safe_mode, tu peux éventuellement faire en ligne de commande, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $cmd="grep -c findMe file.txt";
    echo exec($cmd);

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Un script que j'ai adapté d'un que j'avais déjà donné :
    Récupérer toutes les lignes où apparaissent un mot :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    define('FICHIER', 'noms.txt');
     
    if (!isset($_POST['valider'])) {
    ?>
    <form method="POST">
        Mot recherché : <input type="text" name="mot" value=""/><br/>
        <input type="submit" value="valider" name="valider"/>
    </form>
     
    <?php
    } else {
        $resultats =array();
        @ $fp = fopen(FICHIER, 'r') or die('Ouverture en lecture de "' . FICHIER . '" impossible !');
        while (!feof($fp)) {
            $ligne = fgets($fp, 1024);
            if (preg_match('|\b' . preg_quote($_POST['mot']) . '\b|i', $ligne)) {
                $resultats[] = $ligne;
            }
        }
        fclose($fp);
        $nb = count($resultats);
        if ($nb > 0) {
            echo "'$mot' trouvé $nb fois :";
            echo '<ul>';
            foreach ($resultats as $v) {
                echo "<li>$v</li>";
            }
            echo '</ul>';
        } else {
            die("Ce nom n'est pas présent !");
        }
    }
    ?>
    Savoir si un mot a été trouvé dans un fichier et à quelle ligne (il s'arrête à la première ligne) :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    define('FICHIER', 'noms.txt');
     
    if (!isset($_POST['valider'])) {
    ?>
    <form method="POST">
        Mot recherché : <input type="text" name="mot" value=""/><br/>
        <input type="submit" value="valider" name="valider"/>
    </form>
     
    <?php
    } else {
        $existe = FALSE;
        @ $fp = fopen(FICHIER, 'r') or die('Ouverture en lecture de "' . FICHIER . '" impossible !');
        while (!feof($fp) && !$existe) {
            $ligne = fgets($fp, 1024);
            if (preg_match('|\b' . preg_quote($_POST['mot']) . '\b|i', $ligne)) {
                $existe = TRUE;
            }
        }
        fclose($fp);
        if ($existe) {
            echo "'$mot' trouvé dans '$ligne'.";
        } else {
            die("Ce nom n'est pas présent !");
        }
    }
    ?>
    La lecture par ligne est beaucoup moins gourmande puisque si le fichier est volumineux il occupera moins de mémoire (une ligne à la fois à la place de son intégralité). Pour un fichier binaire, remplacer la fonction fgets par fread.

    En espérant que cela vous aide.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 08/03/2007, 17h54
  2. Réponses: 3
    Dernier message: 25/07/2006, 09h40
  3. Réponses: 10
    Dernier message: 22/05/2006, 12h45
  4. [VB]Recherche d'une chaine de caractère dans un fichier
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 16/02/2006, 10h10
  5. Réponses: 18
    Dernier message: 08/08/2005, 21h52

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