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 fichier.txt avec différent traitement.


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Par défaut Lecture fichier.txt avec différent traitement.
    Bonjour je rencontre un problème tout bête pour effectuer un traitement sur un fichier.txt en php.

    J'ai un fichier qui contient une centaine d'adresse mail, et j'aimerais ouvrir le fichier, le parcourir, relever les noms de domaine type : hotmail.fr. et le nombre de fois où ils apparaissent.

    Sur le principe je voit comment faire mais sa aboutie 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
    21
    22
    23
    <?php
    /*Ouverture du fichier en lecture seule*/
    $handle = fopen('a.txt','r');
    /*Si on a réussi à ouvrir le fichier*/
    if ($handle)
    {
    	/*Tant que l'on est pas à la fin du fichier*/
    	while (!feof($handle))
    	{
    		/*On lit la ligne courante*/
    		$buffer = fgets($handle);
     
    		$element = explode('@', $buffer);
     
                    Ici je bloque ... je voit pas trop le traitement à effectuer j'aimerais stocker les résultat dans un tableau si il n'y sont pas déja présent
                    sinon on incrémente un compteur.
     
    	}
    	/*On ferme le fichier*/
    	fclose($handle);
    }
     
    ?>
    Je vous remercie d'avance pour votre aide cordialement.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 700
    Par défaut
    déjà est ce que tu as ton adresse e-mail dans la variable $element ?

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Par défaut
    Oui mon adresse est bien dans ma variable élément, ici par exemple j'affiche à chaque itération le domaine

    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
    <?php
    /*Ouverture du fichier en lecture seule*/
    $handle = fopen('a.txt','r');
    /*Si on a réussi à ouvrir le fichier*/
    if ($handle)
    {
    	/*Tant que l'on est pas à la fin du fichier*/
    	while (!feof($handle))
    	{
    		/*On lit la ligne courante*/
    		$buffer = fgets($handle);
    		$element = explode('@', $buffer);
     
     
    	/*On l'affiche*/
    	/*  $element[0] contient tout ce qu'il y a avant le @
    		$element[1] contient tout ce qu'il y a après le @*/
     
    	echo $element[1];
     
    	}
     
     
    	/*On ferme le fichier*/
    	fclose($handle);
     
    }
     
     
    ?>
    Je voudrai stocker ce résultat dans un tableau, si il n'y est pas déja, sinon incrémenter un compteur lié à ce domaine. Mais je vois pas trop comment faire, car à la première itération mon tableau sera vide et la boucle foreach n'accepte pas les tableaux vident :/

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 700
    Par défaut
    au début du code rajoute ça pour initialiser le tableau :
    $tabEmails = array();

    ensuite dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (!isset($tabEmails[$element[1]])) {
        // création de la liste des adresses e-mails pour le domaine $element[1]
        $tabEmails[$element[1]] = array();
    }
     
    // ajout de l'adresse dans la liste
    $tabEmails[$element[1]][] = $buffer;
    à la fin tu peux afficher le tableau entier pour voir comment il est présente et tu pourras ensuite faire les traitements que tu veux avec
    var_dump($tabEmails);

  5. #5
    Membre éclairé Avatar de MTroy_
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 63
    Par défaut
    Bonjour,

    Tu peux aussi simplifier ton code de la sorte.

    En utilisant la fonction file() qui retourne le contenu d'un fichier sous forme de tableau, ligne par ligne.
    Et in_array() pour tester l'existence des domaines déjà testés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $list_emails = file($"a.txt", FILE_SKIP_EMPTY_LINES); // le second argument permet d'exclure les lignes vides dans a.txt
    $domain_stats = []; // tableau de statistiques des domaines qui sera rempli ainsi ("domaine.tld" => nombre d'occurrences en int)
     
    foreach($list_emails as $email)
    {
       $domain = array_pop(explode('@', $email)); // explode retourne l'email concaténé sous forme d'un tableau (['prenom', 'domain.tld']), et array_pop dépile le dernier element de celui ci (en l'occurrence domain.tld)
       $domain_indexes = array_keys($domain_stats); // retourne le nom de chaque domaines déjà indexés (qui constituent les clés du tableau $domain_stats), sous la forme d'un tableau
       if(in_array($domain, $domain_indexes)) // in_array recherche si dans ce tableau de noms $domain y figure
          $domain_stats[$domain]++; // si oui, on incrémente de 1 pour ce domaine
       else
          $domain_stats[$domain] = 1; // sinon, le domaine n'existe pas encore dans $domain_stats, donc on l'ajoute en démarrant à 1
    }
    tu peux faire un coup de print_r($domain_stats);

    Tu obtiendras la liste comme tel :

    Array(
    [ domain0.fr ] => 4,
    [ domainA.net ] => 34,
    ...
    )

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Par défaut
    Merci Mathieu t'es explication sont clair j'ai presque réussi à faire ce que je voulais.

    Par contre MTroy_ lorsque je tente d'utiliser la fonction file(), je rencontre toujours le même problème, j'ai une erreur qui m'indique que mon fichier est introuvable alors qu'il s'ouvre parfaitement avec fopen() Une idée pour m'aider, de plus en essayant d'intégrer ton code à la méthode utilisant fopen(), le navigateur me spécifie une erreur de type : Illegal offset type in C:\pageeasy\test.php on line 55.

    Cet erreur correspond à cet ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $domain_stats[$domain] = 1;
    Merci pour votre aide

    Edit : Problème résolu, en utilisant la méthode fopen(),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $element = explode('@', $buffer);
    retourne un tableau avec deux élément, et j'oublier de spécifier l'élément que je voulais. Ici c'est donc $element[1];


    Néanmoins je serais curieux de savoir pourquoi file(), je fonctionne pas si vous avez des idées (y)

Discussions similaires

  1. Lecture fichier txt avec n occurrences selon une zone
    Par manu4u2 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 21/10/2014, 15h24
  2. Probléme de lecture d'un fichier .txt avec java
    Par samorra dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 29/09/2009, 00h13
  3. Problème de lecture de fichier .txt avec Flash
    Par cdevl32 dans le forum Flex
    Réponses: 0
    Dernier message: 25/05/2008, 17h35
  4. Réponses: 2
    Dernier message: 01/05/2007, 18h50
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08

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