begin process at 2012 05 28 08:52:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

Autre

 > 

Comparer une chaine avec un fichier xml et isoler les doublons


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comparer une chaine avec un fichier xml et isoler les doublons

vendredi 17 septembre 2010 à 23:09:13 | Comparer une chaine avec un fichier xml et isoler les doublons

lestephnet

Bonsoir,

Je trouve en rond avec un code et plus j'avance et plus ca devient n'importe quoi, je pense qu'il y a beaucoup plus simple.

J'ai un fichier xml ou je stock des adresses emails

Mon xml--------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<emails>
<node mail="email01@hotmail.com" nom="import" />
<node mail="email02@hotmail.com" nom="import" />
<node mail="email03@hotmail.com" nom="import" />
<node mail="email04@hotmail.com" nom="import" />
<node mail="email05@hotmail.com" nom="import" />
</emails>
---------------------------------------------------

Je voudrais pouvoir envoyer a mon php une variable avec une liste adresses emails séparer par un ";" et qu'il affiche la liste des doublons, et la liste des emails qui ne sont pas enregistrés dans le xml.

Mon PHP------------------------------------------------

<?php
echo "Vous avez ";
include ("compter2.php5");
echo " emails dans votre base";
echo "<BR>----------------------------------------<BR>";
$chaine = "
email01@hotmail.com;
email02@hotmail.com;
email07@hotmail.com;
email03@hotmail.com;
email04@hotmail.com;
email05@hotmail.com;
email06@hotmail.com;
";

$result1=explode(";",$chaine);
$taille = count($result1);
$taille = $taille - 1;

//$id = "lestephnet@hotmail.fr";
$data = new DOMDocument;
$data->load('emails2.xml');
$debut= 0;
foreach($data->getElementsByTagName('node') as $i => $value )
{
if( $debut < $taille){
$debut = $debut - 1;
for($i=0;$i<$taille;$i++){
$leresultat1 = $result1[$i];
$leresultat1 = trim($leresultat1);
$leresultat1=utf8_decode($leresultat1);

if( $value->getAttribute('mail') == $leresultat1){

$mailpasbon .= $leresultat1;
$mailpasbon .="<BR>";
$newchaine = str_replace($mailpasbon,"", $chaine);


}else{
$mailbon .= $leresultat1;
$mailbon .="<BR>";
}
}
}
}
echo '<BR>-------------------------------------------<BR>';
echo "Vous avez envoyé ".$taille." mails";
echo '<BR>-------------------------------------------<BR>';
$taillepasbon = count($mailpasbon);
echo "Emails en double $taillepasbon";
echo '<BR>-------------------------------------------<BR>';
echo $mailpasbon;
echo '<BR>-------------------------------------------<BR>';
echo "Emails ajouté";
echo '<BR>-------------------------------------------<BR>';
echo $mailbon;
echo '<BR>-------------------------------------------<BR>';
?>
-----------------------------------------------------------

Il m'affiche correctement les emails en doubles mais par contre
pour la liste des emails qui ne sont pas présent dans le xml
il me fait totalement n'importe quoi.

Si vous avez la solution ou une méthode plus simple de suis a votre écoute :-) je suis je cherche depuis ce matin.
merci bcp d'avance.

steph
samedi 18 septembre 2010 à 14:26:45 | Re : Comparer une chaine avec un fichier xml et isoler les doublons

jeca

Bonjour,

Un truc dans ce genre peut-être :
Code PHP :
<?php
  function litXml($fichier)
  {
    //-- retourne un tableau contenant la liste des mails dans le fichier XML --
    $data = new DOMDocument;
    $data->load($fichier);
    $items = $data -> getElementsByTagName('node');
    foreach($items as $item )
    {
      $mailXml[] = $item -> getAttribute('mail');
    }
    return $mailXml;
  }

  function litChaine($chaine)
  {
    //-- retourne un tableau contenant la liste des mails contenus dans la chaine --
    $mail = explode(';', $chaine);
    foreach($mail as $cle => $valeur)
    {
      $mail[$cle] = trim($valeur);
    }
    sort($mail);
    return $mail;
  }
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
  $fichier = 'test.xml';

  $listeMail = 'email01@hotmail.com;

                email02@hotmail.com;
                email07@hotmail.com;
                email03@hotmail.com;
                email04@hotmail.com;
                email05@hotmail.com;
                email06@hotmail.com';


  $mailXml = litXml($fichier);
  $mail = litChaine($listeMail);

  $mailManquant = implode('<br>', array_diff($mail, $mailXml));
  echo '------------------------------------------------------------------------<br>

        emails manquant dans le fichier XML :<br><b>' . $mailManquant . '</b><br><br>';

  
  $mailDoublon = implode('<br>', array_intersect($mailXml, $mail));
  echo '------------------------------------------------------------------------<br>

        emails présents dans le fichier XML ET dans la chaine :<br><b>' . $mailDoublon . '</b><br>';

?>


Cordialement.

JC
mercredi 29 septembre 2010 à 11:29:16 | Re : Comparer une chaine avec un fichier xml et isoler les doublons

lestephnet


Super merci beaucoup ça marche très bien.

Je pensais ajouter un système plus complet pour l'ajout d'emails "en vrac" de différentes sources sans avoir obligatoirement un ";" de séparation.

je voudrais ajouter :

$sChaine= "emails en vrac dans du texte"

function extractEmailsFromString($sChaine) {

if(false !== preg_match_all('`\w(?:[-_.]?\w)*@\w(?:[-_.]?\w)*\.(?:[a-z]{2,4})`', $sChaine, $aEmails)) {
if(is_array($aEmails[0]) && sizeof($aEmails[0])>0) {
return array_unique($aEmails[0]);
}
}

return null;
}

retourner $aEmails en chaine et faire un foreach filtre

if(filter_var($leresultat, FILTER_VALIDATE_EMAIL))
{

Tu en penses quoi ? comment l'ajouter proprement à ton code ?



steph
mercredi 29 septembre 2010 à 13:14:34 | Re : Comparer une chaine avec un fichier xml et isoler les doublons

jeca

Si tu n'as besoin que d'un résultat global :
Code PHP :
<?php
  function litXml($fichier)
  {
    //-- retourne un tableau contenant la liste des mails dans le fichier XML --
    $data = new DOMDocument;
    $data->load($fichier);
    $items = $data -> getElementsByTagName('node');
    foreach($items as $item )
    {
      $mailXml[] = $item -> getAttribute('mail');
    }
    return $mailXml;
  }

  function litChaine($chaine)
  {
    //-- retourne un tableau contenant la liste des mails contenus dans la chaine --
    $mail = explode(';', $chaine);
    foreach($mail as $cle => $valeur)
    {
      $mail[$cle] = trim($valeur);
    }
    sort($mail);
    return $mail;
  }

  function extractEmailsFromString($sChaine)
  {
    if(false !== preg_match_all('`\w(?:[-_.]?\w)*@\w(?:[-_.]?\w)*\.(?:[a-z]{2,4})`', $sChaine, $aEmails))
    {
      if(is_array($aEmails[0]) && sizeof($aEmails[0])>0)
      {
        return array_unique($aEmails[0]);
      }
    }
    return null;
  }

  function valideMail($mail)
  {
    foreach ($mail as $cle => $valeur)
    {
      if(!filter_var($valeur, FILTER_VALIDATE_EMAIL))
      {
        unset($mail[$cle]);
      }
    }
    return $mail;
  }
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
  $fichier = 'test.xml';

  $listeMail = 'email01@hotmail.com;

                email02@hotmail.com;
                email07@hotmail.com;
                email03@hotmail.com;
                email04@hotmail.com;
                email05@hotmail.com;
                email06@hotmail.com';


//  $sChaine = "emails en vrac dans du texte" ;
  $sChaine = file_get_contents('test.txt');

  $mailXml = litXml($fichier);
  $mailListe = litChaine($listeMail);
  $mailChaine = extractEmailsFromString($sChaine);

  $mailResultat = valideMail(array_unique(array_merge($mailXml, $mailListe, $mailChaine)));
  echo '<pre>';
  print_r($mailResultat);
  echo '</pre>';
?>



Cordialement.

JC
mercredi 6 octobre 2010 à 02:11:23 | Re : Comparer une chaine avec un fichier xml et isoler les doublons

lestephnet


super merci bcp une bonne prise de tête de moins :-)

Dis moi tu connais comment ajouter ou modifier un cdata dans un XML avec un createCDATASection , un new DOMCDATASection ou un addCData ? Les docs que je trouve en ligne ne sont pas très claire.
j'ai lancé ce sujet mais personne n'arrive à répondre

http://www.phpcs.com/forum/sujet-PHP-XML-AJOUTER-CDATA-NOEUD_1470587.aspx

Si tu as la solution merci d'avance ;-)

steph


Cette discussion est classée dans : xml, echo, hotmail, emails, com


Répondre à ce message

Sujets en rapport avec ce message

Probleme d'enregistrement dans un parseur XML [ par sniktwo ] Salut à tous, alors mon parser XML marche parfaitement et m'affiche bien les données mais, là où ça coince, c'est pour les enregistrer tout betement d php et base de données [ par lsamsoumal ] bonjour j'ai un code qui récupére un tableau d'une base de données. dans ce tableau je veux avoir 3 liens vers des pages internet:mauritanie,infoclima Problème Insertionflux xml [ par richardjul ] Bonjour,j'ai réalisé un script qui doit récupérer des annonces de job sur un flux xml, et me les injecter dans ma BDD Mysql pour ensuite les afficher XML dynamique avec php [ par kingsaiz ] voila je fais un xml à la volée avec une page php Resultat du xml avec mon code php <parameters bigframeheight ="410" bigframewidth ="500" noofcolum Scan repertoire + xml [ par Defray ] Bonjour, j'aimerai enregistrer cette function 'scan' en fichier XML. j'ai essayai de passer les echo en variable '$xml' mais l'imbrication de la fonct insérer contenu xml dans bdd mysql [ par indutec ] Bonjour à tous, Voilà, j'aimerais encoder le contenu d'un fichier xml, que je ne génère pas, vers une base de données mysql. Pour l'instant, il m'enc insérer contenu xml dans bdd mysql [ par indutec ] Bonjour, Je souhaite insérer le contenu d'un fichier xml externe dans une base de données sur mon serveur. Pour l'instant, il me génère une erreur Probleme avec la fonction fopen [ par meltraxxx ] Bonsoir, J'ai toujours des problèmes avec la fonction fopen en php. Pour info url_1 est une page qui existe et url_2 et une page qui n'existe pas. Php xml ajouter un cdata à un noeud [ par lestephnet ] Bonjour je voudrais trouver une solution pour ajouter un n½ud CDATA à mon xml mon xml////////////contact.xml le test pour le test /////////


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,137 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales