Partage
  • Partager sur Facebook
  • Partager sur Twitter

soucis de réécriture de données dans un csv

26 avril 2022 à 15:19:52

Bonjour à tous, cela fait déjà plusieurs jours que je tourne en boucle sur ce problème.

<?php
//Ectraction des email et tel d'un csv

function extractEmails($d) 
{
  if(false !== preg_match_all('`\w(?:[-_.]?\w)*@\w(?:[-_.]?\w)*\.(?:[a-z]{2,4})`', $d, $aEmails))
  {
    if(is_array($aEmails[0]) && sizeof($aEmails[0])>0)
    {
      return array_unique($aEmails[0]);
    }
  }
  return null;
}
function extractTel($d)
{
  if(false !== preg_match_all('/\d{10}|\+33\d{9}|\+33\s\d{1}\s\d{2}\s\d{2}\s\d{2}\s\d{2}|\d{2}\s\d{2}\s\d{2}\s\d{2}\s\d{2}|0\d(?:\.\d{2}){4}|0\d(?:-\d{2}){4}/', $d, $aTel)) 
  {
    if(is_array($aTel[0]) && sizeof($aTel[0])>0) 
    {
      return array_unique($aTel[0]);
    }
  }
  return null;
}

if(!empty($_POST))
{
  $csvFileToLoad = $_FILES["file"]["tmp_name"]; //
  $isSavingToDB = false;

  //ouvrir le fichier temporaire en lecture
  if(($readCSVFile = fopen("{$csvFileToLoad}", "r+")) != false) 
  {

    while(!feof($readCSVFile) && ($data = fgetcsv($readCSVFile)) !== false) 
    {   
      foreach($data as $d)
      {       

          /**
          * Exemple d'utilisation
          */

          $aEmails = extractEmails($d);//extraction des emails du csv
          $aTel = extractTel($d);

          // header("Content-Type: text/csv");
          // header("Content-Disposition: attachment; filename=file.csv");
          //print_r($aEmails);
          // var_dump($aEmails);
          // var_dump($aTel);

          $a = json_encode($aEmails);
          $b =json_encode($aTel);

          // Retire ["
          $Cherche_dans_cette_variable = $a ;
          $Trouve_ceci   = '["';
          $remplace_Trouve_ceci_par_ceci = "";
          $a= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);
          // Retire "]
          $Cherche_dans_cette_variable = $a ;
          $Trouve_ceci   = '"]';
          $remplace_Trouve_ceci_par_ceci = "";
          $a= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire [" du tel
          $Cherche_dans_cette_variable = $b ;
          $Trouve_ceci   = '["';
          $remplace_Trouve_ceci_par_ceci = "";
          $b= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire "] du tel
          $Cherche_dans_cette_variable = $b ;
          $Trouve_ceci   = '"]';
          $remplace_Trouve_ceci_par_ceci = "";
          $b= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire les espaces du tel
          $Cherche_dans_cette_variable = $b ;
          $Trouve_ceci   = ' ';
          $remplace_Trouve_ceci_par_ceci = "";
          $b= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire . du tel
          $Cherche_dans_cette_variable = $b ;
          $Trouve_ceci   = '.';
          $remplace_Trouve_ceci_par_ceci = "";
          $b= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          $conteur = strlen($b);

        if(empty($aTel))
        {
          $aTel="";
          $b = "";
        }
        else
        {
          $conteur = strlen($b);
          if($conteur<10)
          {//si le retour est moins de 10 c'est qu'il manque le 0, alors attribution du 0
            $b = "0".$b;    
          }
        }
        if(empty($aEmails))
        {
          $aEmails = "";
          $a ="";
        }
        if(empty($aEmails)&&empty($aTel))
        {
          $d="";
          $a ="";
        }
        //Si ce n'est pas vide l'un ou l'autre
        if(!empty($aEmails) OR !empty($aTel))
        {

        // $listee = array (array($d, $a, $b));
         $listee = array (array($a, $b));
          $ligne =json_encode($listee);

          // Retire [[" du tel
          $Cherche_dans_cette_variable = $ligne ;
          $Trouve_ceci   = '[["';
          $remplace_Trouve_ceci_par_ceci = "";
          $ligne= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire "]] du tel
          $Cherche_dans_cette_variable = $ligne ;
          $Trouve_ceci   = ']]';
          $remplace_Trouve_ceci_par_ceci = ";";
          $ligne= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire "]] du tel
          // $Cherche_dans_cette_variable = $ligne ;
          // $Trouve_ceci   = '\n';
          // $remplace_Trouve_ceci_par_ceci = " ";
          // $ligne= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire "]] du tel
          // $Cherche_dans_cette_variable = $ligne ;
          // $Trouve_ceci   = '\u00e9';
          // $remplace_Trouve_ceci_par_ceci = "é";
          // $ligne= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire " du tel
          // $Cherche_dans_cette_variable = $ligne ;
          // $Trouve_ceci   = '"';
          // $remplace_Trouve_ceci_par_ceci = "";
          // $ligne= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

          // Retire \ du tel
          $Cherche_dans_cette_variable = $ligne ;
          $Trouve_ceci   = '\/';
          $remplace_Trouve_ceci_par_ceci = "/";
          $ligne= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);

              // Retire " du tel
              // $Cherche_dans_cette_variable = $ligne ;
              // $Trouve_ceci   = '"';
              // $remplace_Trouve_ceci_par_ceci = "";
              // $ligne= str_replace($Trouve_ceci, $remplace_Trouve_ceci_par_ceci, $Cherche_dans_cette_variable);
          //  header("Content-Type: text/csv");
          // header("Content-Disposition: attachment; filename=Fichier.csv");  

         // $list = array(array($ligne));

        }else{        }            
      }
    }
    // var_dump($ligne);
    // $fp = fopen('file.csv', 'w');

    // foreach ($list as $fields) 
    // {
    //   fputcsv($fp, $fields,";");
    // } 

}
// fclose($fp);
// exit('<a href ="file.csv">Récupération de mon fichier</a>');
}
if(!empty($ligne)){
  $list = array($ligne);
        header("Content-Type: text/csv");
           header("Content-Disposition: attachment; filename=Fichier.csv");  

       print($list);
  exit();
}

?>

<form enctype="multipart/form-data" action="" method="post">
    <label class="col-md-2 control-label">extraire les email et tel</label>
    <input type="file" name="file" id="file" accept=".csv">
    <button type="submit" id="submit" name="import" class="btn btn-info">lancer</button>

</form>

Ce que je veux

Je cherche à isoler l'email et le tel trouver dans un cellule et le réécrire sur la meme ligne dans une autre cellule
exemple dans la cellul A1 j'ai
coucou tu peux me contacter sur le 06000000 ou par email sur mon@email.com
je voudrais obtenir ceci
A1 =coucou tu peux me contacter sur le 06000000 ou par email sur mon@email.com
A2 = 06000000
A3 = mon@email.com

Ce que j'obtiens

Ectuellement j'ai bien les données isolée, mais seulement la première ligne se réécrit correctement.


  • Partager sur Facebook
  • Partager sur Twitter
27 avril 2022 à 0:02:35

Bonsoir,

Les expressions régulières c'est pas mon fort.

Mais la vérification que tu fait n'est pas très bonne je trouve, si A1 contient "coucou tu peux me contacter sur le 00 00232 1212 323 ou par email sur mon adresse@mail.com ou addresse2@mail.com" que fera ton programme ?

Si tu restes avec cette procédure on peut en déduire que c'est toi qui remplira la chaine (peut-être). Et si c'est le cas tu peux bien envoyer la chaine et envoyant aussi le mail et le numéro a part, n'est-ce pas?

-
Edité par Asmitta 27 avril 2022 à 0:03:16

  • Partager sur Facebook
  • Partager sur Twitter
15 mai 2022 à 21:04:45

Coucou désolé pour ce retard, j'ai eu un accident, bref ça va bien et c'est l'essentiel.

Avec ton exemple, normalement, mon script devrait remettre en 10 chiffres le tel avec un 0 au départ.

Concernant mon souci, je n'arrive pas à écrire à la suite de a la ligne, les données trouvées. 

  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2022 à 1:33:01

La partie affichant les lignes est bien dans la section de  la ligne 186 a 192 ?

Ligne 191: Comment tu peux faire print($list) sans avoir d'erreur sachant que $list est un array ?

Mets ton $list = array($ligne) dans ta boucle while ou foreach...je ne me reperes pas bien dans ton code. Et hors de ces boucles tu fais print_r($list) ou tu utilises une autre boucle pour afficher chaque element.

Bonsoir

  • Partager sur Facebook
  • Partager sur Twitter