Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/03/2007, 18h09   #1
Membre du Club
 
Développeur informatique
Inscription : août 2004
Messages : 136
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 136
Points : 52
Points : 52
Envoyer un message via MSN à Zen_Fou
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.
Zen_Fou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2007, 22h19   #2
Membre actif
 
Avatar de renaudjuif
 
Inscription : avril 2006
Messages : 300
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 300
Points : 174
Points : 174
Salut,

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

Code :
1
2
3
 
$cmd="grep -c findMe file.txt";
echo exec($cmd);
renaudjuif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2007, 23h25   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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 :
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h37.


 
 
 
 
Partenaires

Hébergement Web