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 :

Problème de lecture .csv


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut Problème de lecture .csv
    Bonjour,

    je n'arrive pas a comparer les emails de mon fichier avec mon tableaux de domaine (voir ci dessous)

    par contre si je rentre ex : soryo@hotmail.fr en parametre dans ma fonction
    celle ci va bien m'afficher @hotmail.fr
    pourquoi ma fonction ne lit-elle pas mon fichier ?
    pouvez vous m'aider svp ?

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <?php
     
    function check_domain($amail){
    	$domain[] = '@hotmail.fr';
    	$domain[] = '@aliceadsl.fr';
    	$domain[] = '@gmail.com';
    	$domain[] = '@wanadoo.fr';
    	$domain[] = '@orange.fr';
    	$domain[] = '@neuf.fr';
    	$domain[] = '@free.fr';
    	$domain[] = '@laposte.net';
    	$domain[] = '@operationnelle.com';
    	$domain[] = '@msn.com';
    	$domain[] = '@paris.fr';
    	$domain[] = '@yahoo.fr';
    	$domain[] = '@yahoo.com';
    	$domain[] = '@dbmail.com';
    	$domain[] = '@live.fr';
    	$domain[] = '@live.com';
    	$domain[] = '@sfr.fr';
    	$domain[] = '@aol.fr';
    	$domain[] = '@caramail.fr';
    	$domain[] = '@voila.fr';
    	$domain[] = '@ifrance.com';
    	$domain[] = '@numericable.fr';
    	$domain[] = '@numericable.com';
    	$domain[] = '@bbox.fr';
    	$domain[] = '@alicemail.fr';
    	$domain[] = '@club-internet.fr';
    	$domain[] = '@info-paca.fr';
    	$domain[] = '@tele2.fr';
    	$domain[] = '@fnac.net';
    	$domain[] = '@lemonde.fr';
    	$domain[] = '@libertysurf.fr';
    	$domain[] = '@lenotre.com';
    	$domain[] = '@noos.fr';
    	$domain[] = '@freesbee.fr';
    	$domain[] = '@imode.fr';
    	$domain[] = '@imode.net';
    	$domain[] = '@nomade.fr';
    	$domain[] = '@tiscali.fr';
    	$domain[] = '@tiscali.it';
    	$domain[] = '@m6net.fr';
    	$domain[] = '@europarl.fr';
    	$domain[] = '@europarl.net';
    	$domain[] = '@worldonline.fr';
    	$domain[] = '@parti-socialist.fr';
    	$domain[] = '@bnpparibas.fr';
    	$domain[] = '@bnpparibas.com';
    	$domain[] = '@ford.fr';
    	$domain[] = '@ford.com';
    	$domain[] = '@force-ouvriere.fr';
    	$domain[] = '@lycos.fr';
    	$domain[] = '@lycos.com';
    	$domain[] = '@lycos.mail';
    	$domain[] = '@online.net';
    	$domain[] = '@cegetel.net';
    	$domain[] = '@cegetel.fr';
    	$domain[] = '@avocatparis.org';
    	$domain[] = '@amecspie.com';
    	$domain[] = '@agriculture.gouv.fr';
    	$domain[] = '@aber.ac.uk';
    	$domain[] = '@aiic.net';
    	$domain[] = '@ac-caen.fr';
    	$domain[] = '@almacg.fr';
    	$domain[] = '@almacg.com';
    	$domain[] = '@awcgroup.com';
    	$domain[] = '@awcgroup.fr';
    	$domain[] = '@arcelormittal.com';
    	$domain[] = '@atlv.net';
    	$domain[] = '@atlv.fr';
    	$domain[] = '@ac-bordeaux.fr';
    	$domain[] = '@assemblee-nationale.fr';
    	$domain[] = '@annehidalgo.fr';
    	$domain[] = '@accor.com';
    	$domain[] = '@accor.fr';
    	$domain[] = '@ac-versaille.fr';
    	$domain[] = '@amco.fr';
    	$domain[] = '@astengroup.com';
    	$domain[] = '@adh-presse.com';
    	$domain[] = '@africa24tv,com';
    	$domain[] = '@alternatives-economiques.fr';
    	$domain[] = '@autun.fr';
    	$domain[] = '@alicepro.fr';
    	$domain[] = '@akeonet.fr';
    	$domain[] = '@akeonet.com';
    	$domain[] = '@apc-univ-paris7.fr';
    	$domain[] = '@amg-informatique.com';
     
    	foreach ($amail as $omail){
    		foreach ($domain as $mycase){
    			$add= strstr($omail, '@'); //add = @exemple.com quand omail = alo@exemple.com
    			if (strnatcasecmp($add, $mycase) == 0){ //compare la parti @exemple.com de l'email rentre en parametre et ma tab de domaine
    				echo $add . '<br />';					//afficher cet email;
    			}
    		}
    	}
    }
     
    $file_name = "./bounce.2011-11-07.csv"; // fichier de retour d'erreur d'envoi de mail
     
    if (file_exists($file_name)){
    $file = fopen($file_name, "r"); //open du fichier .csv
    $data = fread($file, filesize($file_name)); //read du .csv
    $data = preg_replace("(\r\n|\n|\r)",'retour_ligne',$data); //remplace les \r\n par retour_ligne
    $ligne = explode('retour_ligne', $data); //creation d'un tableau grace au delimiteur retour_ligne
    $vligne = array(); //creation d'un tab
    $vligne[] = explode(';', $ligne); //delimiter mon tableau par ;
    	foreach ($ligne as $line){
        $vligne[] = explode(';', $line);
    	}
    check_domain($ligne); // fonction qui check si le domaine existe dans mon tab de domaine 
    }
    ?>

    Merci d'avance !

    Cordialement,

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    pas d'explode pour du CSv mais fgetcsv

    ps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $domain[] = '@hotmail.fr';
    	$domain[] = '@aliceadsl.fr';
    	$domain[] = '@gmail.com';
    	$domain[] = '@wanadoo.fr';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $domain = array(
        '@hotmail.fr',
        '@aliceadsl.fr',
        '@gmail.com',
        '@wanadoo.fr'
    );
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fopen + fread + filesize = file_get_contents
    http://fr2.php.net/manual/fr/functio...t-contents.php
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace(\r\n, $file)  = file
    http://fr2.php.net/manual/fr/function.file.php

    ...

    et les foreach pour ta fonction c'est inutile utilise in_array

    y'a des bases a revoir

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut
    Je débute ! merci pour ton aide !

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut
    Il n'affiche que les adresses @alicemail.fr et non les @tiscali.fr alors qu'il y en a dans mon fichier. J'en déduis donc qu'il ne parcourt pas mon tableau.. et n'arrive pas a la comparaison. Pouvez vous m’éclairer ?


    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
    $domain = array(
    			'@alicemail.fr',
                            '@tiscali.fr'
    );
     
    $file_name = "./bounce.2011-11-09.csv";
    $data = file_get_contents($file_name);
    $file = preg_replace("(\r\n)", $file);
    $ligne = explode($file, $data);
    $vligne = array();
    $vligne[] = explode(';', $ligne);
    	foreach ($ligne as $line){
        $vligne[] = explode(';', $line);
     }
    	foreach ($vligne as $etab){
    		foreach ($domain as $mycase){
    			if (preg_match('#5.4.4#', $etab[3])){
    			$add = strstr($etab[0], '@');
    				if(strcmp($add, $mycase) != 0){
    					echo $etab[0] . ': email' .$add.': match - code :'.$etab[3]. '<br />';
    				}
    				break;
    			}
    		}
    	}
    ?>

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    utilise fgetcsv ...

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut
    je ne vois pas la différence entre explode et fgetcsv, explode fonctionne dans mon cas il me sépare bien mon tableau. Crois-tu que mon problème de parcourt viens de l'utilisation d'explode ??

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par soryo Voir le message
    je ne vois pas la différence entre explode et fgetcsv, explode fonctionne dans mon cas il me sépare bien mon tableau. Crois-tu que mon problème de parcourt viens de l'utilisation d'explode ??
    on utilise d’abord les bon outils après on regarde le problème, comme ton file_get_contents + preg_match qui revient a faire un file

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    En l’occurrence, dans un fichier csv, tu peux très bien avoir le caractère "séparateur" (ici le point-virgule) à l'intérieur d'un champ, le champ lui-même étant encadré par des caractères de délimitation.
    En utilisant explode, tu vas découper sur tous les points virgules et tu vas garder les délimiteurs. En utilisant fgetcsv, tu auras tes champs correctement découpés.
    Exemple :
    Si ton fichier csv ressemble à ça :
    champ_1;champ2;champ_3
    1;test;"ceci est une chaine ; ceci est une autre chaine"
    explode te renvoie ce tableau :
    0 => 42
    1 => test
    2 => "ceci est une chaine
    3 => ceci est une autre chaine"
    alors que fgetcsv te renvoie :
    0 => 42 
    1 => test
    2 => ceci est une chaine ; ceci est une autre chaine
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    et aussi les sauts de ligne sont pris en compte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    champ_1;champ2;champ_3
    1;test;"ceci est une chaine ; 
    ceci est une autre chaine"

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/12/2014, 12h33
  2. Problème de lecture d'un fichier .csv.
    Par Azuchi dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 20/12/2010, 11h45
  3. problème de lecture base de registre
    Par pafounet3 dans le forum MFC
    Réponses: 10
    Dernier message: 31/12/2003, 14h06
  4. [fread] Problème de lecture de buffer
    Par karl3i dans le forum C
    Réponses: 2
    Dernier message: 25/09/2003, 09h21
  5. Réponses: 4
    Dernier message: 23/07/2003, 13h07

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