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 :

[CSV] Tri de données dans fichier CSV


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut [CSV] Tri de données dans fichier CSV
    Bonjour le forum
    Cela fait un bon moment que je galère, j'ai du faire fumer google
    voici un extrait de mon fichier csv :
    1;26/09/2008;23:28:48;12;48499040225;481501110225;16;successful call (call with answer);16842217216842218801916623422114814647
    2;26/09/2008;23:28:48;12;48499040223;481501110223;16;successful call (call with answer);1684221721684221880132442344423083164
    3;26/09/2008;23:28:48;12;48499040229;481501110229;16;successful call (call with answer);168422172168422188026242234177198119235
    4;26/09/2008;23:28:48;12;48499040227;481501110227;16;successful call (call with answer);1684221721684221882519123422021810181
    5;26/09/2008;23:28:49;12;48499040233;481501110233;16;successful call (call with answer);16842217216842218829251234130200147217
    6;26/09/2008;23:28:49;12;48499040237;481501110237;16;successful call (call with answer);1784221721784221882171712345755391
    7;26/09/2008;23:28:49;12;48499040231;481501110231;16;successful call (call with answer);1684221721684221882424923417913817835
    8;26/09/2008;23:28:49;12;48499040241;481501110241;16;successful call (call with answer);1784221721784221882271962341388917363
    9;26/09/2008;23:28:49;12;48499040239;481501110239;16;successful call (call with answer);1784221721784221880118223451432328
    10;26/09/2008;23:28:49;12;48499040235;481501110235;16;successful call (call with answer);1784221721784221882271552341363715073

    J'aimerais trier ce fichier par le 2eme champs(date) puis par le 3eme(heure)
    Mais est-ce possible ?

  2. #2
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    bonjour
    utiliser la fonction
    pour charger le fichier dans un tableau et
    pour le trie

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Effectivement j'utilise la fonction fgetcsv et je trie avec array_multisort
    Mais je ne suis pas sur de l'utiliser correctement
    Je veux trier par date puis par heure
    Voici mon bout de code
    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
    $fichier_err = fopen("CDRTOT".$Aujourdhui.".csv", "r");
    while (($data = fgetcsv($fichier_err, 4096, ";")) !== FALSE)
    	{
    	$ar=array(
    		array($data[0]),
    		array($data[1]),
    		array($data[2]),
    		array($data[3]),
    		array($data[4]),
    		array($data[5]),
    		array($data[6]),
    		array($data[7]),
    		array($data[8]));
     
    array_multisort($ar[1],sort_asc,sort_numeric,$ar[2],sort_asc,sort_numeric);
     
    var_dump($ar);

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Essaie ce code. Cela semble fonctionner. Tu dois mettre le nom de ton fichier dans la variable '$fichier'.
    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
    <?php
      function temps()
      {
        $result = explode(' ', microtime());
        $temps = $result[1] + $result[0];
     
        return $temps;
      }
     
      $fichier = 'test.txt';
     
      $debut = temps();
      $tableau = array();
      $date = array();
      $heure = array();
     
      $i = 0;
      //-- méthode N°1 ----------------------------------------------------
    ///*  
      $ligne = file($fichier);
      foreach ($ligne as $valeur)
      {
        $colonne = explode(';', $valeur);
        //-- met la date au format AAAA-MM-JJ -----------------------------
        $colonne[1] = implode('-', array_reverse(explode('/', $colonne[1])));
        $tableau[$i] = $colonne;
        $date[$i] = $colonne[1]; 
        $heure[$i] = $colonne[2]; 
        $i ++;
      }
    //*/
     
      //-- méthode N°2 ----------------------------------------------------
    /*
      $fichier_err = fopen($fichier, 'r');
      while (($colonne = fgetcsv($fichier_err, 4096, ";")) !== FALSE)
      {
        //-- met la date au format AAAA-MM-JJ -----------------------------
        $colonne[1] = implode('-', array_reverse(explode('/', $colonne[1])));
        $tableau[$i] = $colonne;
        $date[$i] = $colonne[1]; 
        $heure[$i] = $colonne[2]; 
        $i ++;
      }
      fclose($fichier_err);
    */  
     
      $sauve = $tableau;
      array_multisort($date, SORT_ASC, $heure, SORT_ASC, $tableau);
      $fin = temps();
     
      echo ($fin - $debut) . '<br><br>';
     
      echo '<table>
              <tr>
                <td><b>Tableau d\'origine</b></td>
                <td><b>Tableau trié</b></td>
              </tr>
              <tr>
                <td><pre>';
      print_r($sauve);
      echo '</pre></td>';
     
      echo '<td><pre>';
      print_r($tableau);
      echo '</pre></td>';
      echo '</tr></table>';
    ?>
    A priori, la méthode de lecture N°1 est plus rapide que la N°2.

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Excellent jeca, quelle réactivité
    Juste une autre petite question :
    Je voudrais remettre le résultat du tri dans un autre fichier csv !!
    Merci de ton aide

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    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
    <?php
      function litFic($fichier)
      {
        $tableau = array();
        $date = array();
        $heure = array();
     
        $i = 0;
        $ligne = file($fichier);
        foreach ($ligne as $valeur)
        {
          $colonne = explode(';', $valeur);
          //-- met la date au format AAAA-MM-JJ -----------------------------
          $colonne[1] = implode('-', array_reverse(explode('/', $colonne[1])));
          $tableau[$i] = $colonne;
          $date[$i] = $colonne[1]; 
          $heure[$i] = $colonne[2]; 
          $i ++;
        }
        array_multisort($date, SORT_ASC, $heure, SORT_ASC, $tableau);
        return $tableau;
      }
     
      function ecritFic($fichier, $tableau)
      {
        $cible = array();
        foreach ($tableau as $valeur)
        {
          //-- rétablit la date au format JJ/MM/AAAA -------------------------
          $valeur[1] = implode('/', array_reverse(explode('-', $valeur[1])));
          $cible[] = trim(implode(';', $valeur));
        }
        file_put_contents ($fichier, implode("\r\n", $cible));
      }
      //----------------------------------------------------------------------
      //----------------------------------------------------------------------
      $fichierSource = 'test.txt';
      $fichierCible = 'test.csv';
     
      ecritFic($fichierCible, litFic($fichierSource));
    ?>

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    GG jeca, je testerais ta manip,
    Entre temps j'en ai fais une autre qui marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $j=1;
    for($i=0;$i<count($ligne);$i++)
    {
    fwrite($RESTOT,sprintf("%d;%s;%s;%s;%s;%s;%s;%s;%s",$j,implode('/',array_reverse(explode('-',$tableau[$i][1]))),$tableau[$i][2],$tableau[$i][3],$tableau[$i][4],$tableau[$i][5],$tableau[$i][6],$tableau[$i][7],$tableau[$i][8]));
    $j++;
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/02/2012, 09h29
  2. Script extraction données dans fichier CSV
    Par nollier dans le forum VBScript
    Réponses: 18
    Dernier message: 20/06/2008, 09h32
  3. Réponses: 4
    Dernier message: 29/02/2008, 11h11
  4. [CSV] Ecriture des données dans un fichier
    Par kagura dans le forum Langage
    Réponses: 3
    Dernier message: 07/11/2006, 22h55
  5. Sauvegarde de données dans fichier csv
    Par issou dans le forum C
    Réponses: 1
    Dernier message: 22/12/2005, 08h36

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