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 :

Suppressions des lignes/éléments d'une liste [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut Suppressions des lignes/éléments d'une liste
    Bonjour,

    J'ai un fichier, 1er.txt, je l'ouvre et je mets le contenu dans un array et je fais les traitements...
    Ensuite, je mets le contenu rectifié dans un autre fichier, 2efichier.txt.

    Jusqu'au ici, il n'y a pas de problème



    Voici le contenu du premier fichier, 1er.txt :

    "toto@toto.com","toto","Dupont"
    "titi@toto.com","titi","Mupont"
    "toto@toto.com","toto","Dupont"
    "tata@toto.com","tata","tatant"
    "otot@toto.com","otot","Chose"
    "tata@toto.com","tata","tatant"
    Voici le contenu du 2e fichier, 2efichier.txt :

    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
    if (($handle = fopen($mon1erficher, "r")) !== FALSE) { //Ouverture du fichier en lecture seule.
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $monArrayTraiement = array(
                'e_mail' => $data[0],
                'nomFamille' => $data[1],
                'prenom' => $data[2]
            );
    // traitement	
        $e_mail = $monArrayTraiement['e_mail'];
        $e_mail = str_replace(' ', '', $e_mail); // vider les espace dans les string
        // mon funciton deleteVideDebutFin : suppresion  des espaces en début et fin de chaîne
        //array_walk : Execution d'une fonction sur chacun des éléments d'un tableau
        array_walk($monArrayTraiement, 'deleteVideDebutFin');
        //Si email n'est pas bon enleve cette engretistrement/element/ligne
        if(!formatVerificationEmail($e_mail)){ 
    		  unset($monArrayTraiement['e_mail']);
    		  unset($monArrayTraiement['nomFamille']);
    		  unset($monArrayTraiement['prenom']);
        }
    // DEBUT elimination des lignes/emails identitique en gardant 1 seul ----------------------------------------------------------------------------------
    			//que faire ?			
    // FIN elimination des lignes/emails identitique en gardant 1 seul ------------------------------------------------------------------------------------
    // Création d'un fichier qui ne contient que des emails
    //Debut
    	$creation2efichier = fopen($mon2efichier, "a+");
    	if(empty($monArrayTraiement)) continue; // S'il y a des éléments effacés, sauter la vide
    	foreach ($monArrayTraiement as $cle=>$valeur){
    		$stringParEmail= $monArrayTraiement['e_mail'];
            }
    	fputs($creation2efichier, $stringParEmail."\n"); // écrire le string ensuite  aller à la ligne
    	fclose($ouvrir_FD);	
            }
        }
    Voici ma question :

    Comment peux-je éliminer les doublons de lignes avant la création du fichier ?
    Autrement dit, avant de mettre le contenu traité dans 2e fichier, j'aimerais bien supprimer les lignes qui sont double ou triple pour avoir le contenu suivant dans mon 2e fichier :


    toto@toto.com
    titi@toto.com
    tata@toto.com
    otot@toto.com


    merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu aimes faire compliqué.
    C'est une drole d'idée de mettre des éléments dans un tableau pour les retirer ensuite s'ils ne conviennent pas.

    Reduction de 50 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (($handle = fopen('toto.txt', "r")) !== FALSE) { //Ouverture du fichier en lecture seule.
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
           $email = str_replace(' ', '', trim($data[0]));
           if(formatVerificationEmail($email))  { 
    		 $monArrayTraitement[$email] = $email;
           }
       }
    }
     
    if (isset($monArrayTraitement)) {
         file_put_contents('titi.txt', implode("\r\n",$monArrayTraitement));
    }

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    A la fin, tu repasses ton tableau par cette moulinette, et ensuite, tu exploites $distinctEmails. Je n'ai pas testé, mais ça devrait fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $dejaLa=array();
    $distinctEmails=array();
    for($stringParEmail as $email){
    	if( ! in_array($dejaLa,$email)){
    		array_push($distinctEmails,$email);
    		array_push($dejaLa,$email);
    	}
    }

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Merci Vincent,

    C'est vraiment beau ton idée du simplifier...
    Alors je vais l'utiliser

    Un gros merci.

    Merci Sylvie,

    Avec ton code, j'ai rectifié un peu, et cela marche bien...

    comme cela :

    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
    if (($handle = fopen($mon1erficher, "r")) !== FALSE) { //Ouverture du fichier en lecture seule.
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $monArrayTraiement = array(
                'e_mail' => $data[0],
                'nomFamille' => $data[1],
                'prenom' => $data[2]
            );	
     
     
    // Création d'un fichier qui ne contient que des emails
    //Debut	
    			$creation2efichier = fopen($mon2efichier, "a+");
    			if(empty($monArrayTraiement)) continue; // S'il y a des engregistrement sont effacer, sauter la vide
     
     
    // traitement
    			$distinctEmails = false;
     
        // mon funciton deleteVideDebutFin : suppresion  des espaces en début et fin de chaîne
        //array_walk : Execution d'une fonction sur chacun des éléments d'un tableau
    			array_walk($monArrayTraiement, 'deleteVideDebutFin');
     
     
     
    			$e_mail=$monArrayTraiement['e_mail'];
     
    			// traitement sur email		
           		$e_mail = str_replace(' ', '', $e_mail); // vider les espace dans les string
     
     
        //Si email n'est pas bon enleve cette engretistrement/element/ligne
        if(!formatVerificationEmail($e_mail)){ 
    		  unset($monArrayTraiement['e_mail']);
    		  unset($monArrayTraiement['nomFamille']);
    		  unset($monArrayTraiement['prenom']);
        }
     
     
    			if( ! in_array($e_mail,$stringParEmail))  // In array -  Indique si une valeur ($e_mail) appartient à un tableau ($stringParEmail) 
    			{
    				$stringParEmail[] = $e_mail; // comme array_push
     
     
     
     
     
    				$distinctEmails = true;
    					// Création d'un fichier qui ne contient que des emails
    					//Debut
    				fputs($creation2efichier, $e_mail."\n"); // écrire le string ensuite  aller à la ligne
    				fclose($ouvrir_FD);
    			}	
    			continue;
     
     
            }
        }
    Un gros Merci

  5. #5
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    j'ajouterai au code de sabotage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
           if(formatVerificationEmail($email))  { 
              if(!isset($monArrayTraitement[$email])) //si $monArrayTraitement[$email] n'existe pas 
                {
    		 $monArrayTraitement[$email] = $email; //on ajoute la nouvelle adresse
                }
           }
    ...
    ce qui permetra d'éliminer les doublons

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il y avait déjà ça dans mon code.

  7. #7
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Il y avait déjà ça dans mon code.
    Effectivement réécrire la même chose dans la même clef, donne le même résultat sans doublon, mea culpa.

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

Discussions similaires

  1. Suppression d'un élément d'une List
    Par cedric774 dans le forum C#
    Réponses: 7
    Dernier message: 27/02/2011, 18h09
  2. Suppression d'un élément dans une liste chainée
    Par jbarreau-mainson dans le forum Débuter
    Réponses: 1
    Dernier message: 06/05/2009, 16h49
  3. Suppression d'un élément d'une list
    Par SimOOn dans le forum SL & STL
    Réponses: 15
    Dernier message: 16/01/2008, 22h18
  4. Réponses: 2
    Dernier message: 29/03/2007, 11h18
  5. Réponses: 8
    Dernier message: 01/04/2006, 11h10

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