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 :

Tri de données puis séparation d'un csv en 2 nouveaux csv (ou tableau)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 35
    Par défaut Tri de données puis séparation d'un csv en 2 nouveaux csv (ou tableau)
    Bonjour, je dois faire en sorte que selon la présence d'un code dans un CSV au choix bloquer ce csv sur un serveur ftp sur lequel il avait été uploadé. Sachant que ce CSV contient des informations sur plusieurs clients à la fois et que tous les clients ne doivent pas être bloqués, je dois donc séparé les données de ce csv afin que:

    - pour le client bloqué, prendre ces données et le mettre dans un autre csv avec nom quelconque (l'essentiel c'est qu'il ne garde pas le même nom)
    - pour les autres clients, soit laisser ces infos dans le même csv, soit créer un nouveau csv avec le nom du premier csv pour qu'il soit traiter normalement.

    Là où je rencontre des difficultés c'est justement au niveau de la "séparation des données". Je n'arrive pas à faire la boucle afin que ça récupère toutes les lignes d'un client et le mettre dans un autre csv, sachant que chaque client est délimité lorsque Data[0]= "H" (en clair, lorsque la 1ère colonne d'une ligne est à "H", c'est un nouveau client).

    J'espère avoir été le plus clair que possible.

    Ce que j'ai essayé de faire et qui ne fonctionne pas donne ça:

    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
        $Final_file_content = "";
        $handle = @fopen('test.csv', "r");
        if ($handle) {
        	while (!feof($handle))
        	{
                $buffer = fgetcsv($handle, 10000, ";");
     
    	        do 
    	        {
    	        	$linne = array();
    		        foreach ($buffer as $key)
    	            {
    	            	$linne[] .= $key;
    	            }	        	
     
    	        } while ($buffer[0] != "H");
     
        	}
     
            $Final_file_content .= $linne;
        }
     
        fclose($handle);
     
        echo $Final_file_content;
     
     
     
          //Creation du nouveau fichier 
          $new_file = @fopen("test2.csv", "w+");
     
          // Ajout des informations
          if (fwrite($new_file, $Final_file_content) === FALSE) {
              echo "Impossible d'écrire dans le fichier ($filename)";
              exit;
          }
     
          fclose($new_file);
    Merci par avance de votre aide (ou même de m'avoir juste lu, ça voudra dire que vous avez pris la peine d'y réfléchir un peu, ce qui est déjà beaucoup pour moi)

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    montre nous un exemple de csv, pour qu'on puissent faire quelques tests

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 35
    Par défaut
    En gros ça donne un truc comme ça:
    |H|;|B|;|16096938|;|FZ4|;|0FE123456789|;||;||;|0FE987654321|;|12/15/2099|;||;||;|02|;|COMMERCIAL|
    |D|;|16096938|;|63522227|;|0FE31000154|;|02|;||;|1956515TDUN|;|ENV. 195/65R15 DUNL SP STR.RESP. TL91T|;|7107204|;|NEW|;|OMP|;|1-2F4WEZ|;|1500073837|
    |D|;|16096938|;|63522228|;|0FE31000154|;|02|;||;|STOFORLLD|;|FOR.ENV.TOURISME MASTER PARC ET VALVE|;|7103510|;|NEW|;|OMP|;|1-7MG-1237|;|1500027803|
    |I|;|16096938|;|1-108Z1M|;||;|0FE31000154|;|02|;|KILOMETRAGE|;|124801|;| KILOMETRAGE|;;;;
    |P|;|63522227|;|24409721|;||;||;||;||;||;||;||;||;;
    |H|;|B|;|16155614|;|FE3|;|0FE31000155|;||;||;|0FE31000159|;|12/16/2099|;||;||;|02|;|COMMERCIAL|
    |D|;|16155614|;|63766743|;|0FE31000155|;|02|;||;|SPLFOR|;|FORFAIT DEM.MONT-DEP.POSE LOURD|;|7106967|;|NEW|;|OMP|;|1-7M4-1373|;|1500004882|
    |D|;|16155614|;|63766744|;|0FE31000155|;|02|;||;|SPLREP|;|REP ENV TUB LOURD SANS FOURNITURE|;|7955982|;|NEW|;|OMP|;|1-7MV-2050|;|1500004894|
    |D|;|16155614|;|63766745|;|0FE31000155|;|02|;||;|REPSCH|;|EMPLATRE +110 SCHR 55X 75 60600-67|;|7955983|;|NEW|;|OMP|;|1-7MY-1956|;|1500033546|
    |I|;|16155614|;|1-108Z1L|;||;|0FE31000155|;|02|;|FICHE DE TRAVAIL (FD/FI)|;|00610890|;|CO FICHE DE TRAVAIL (FD/FI)|;;;;
    |I|;|16155614|;|1-5LW-6|;||;|0FE31000155|;|02|;|IMMATRICULATION|;|8888YG972|;|VE IND. NO VEHICULE (C)|;;;;
    J'ai remplis certains champs type mais pas la totalité parce qu'il y avait vraiment trop d'infos (il y a moins d'un tiers des infos totales par client).
    Il y a ici les infos de 2 clients (on le voit aux 2 "H" de début de colonnes)

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Le plus simple est de représenter chaque client par un objet, et gérer ensuite la liste de ces objets.

    Un truc du genre :

    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
    class Client{
    	public $data = array();
     
    	function __construct( $donnees ){
    		$this->data[] = $donnees;
    	}
     
    	function addData( $donnees ){
    		$this->data[] = $donnees;
    	}
    }
     
    $fichier = fopen( 'monFichierCSV.csv' , 'r' );
    $listeClients = array();
    $clientCourant = null;
    while( $ligne = fgetcsv( $fichier , 0 , ';'  ) ){
    	if( $ligne[ 0 ] == '|H|' ){
    		// on crée un nouvel objet client
    		$clientCourant = new Client( $ligne );
    		// on ajoute cet objet à la liste des clients
    		$listeClients[] = $clientCourant;
    	}
    	else{
    		// on rajoute des données au client en cours
    		$clientCourant->addData( $ligne );
    	}
    }
    Code d'exemple écrit à l'arrache, peut contenir des coquilles.

    A partir de là, reste à adapter l'objet et les traitements pour gérer tes conditions de blocage/tri etc.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 35
    Par défaut
    Désolé de ne répondre que maintenant, j'avais un peu de boulot.

    J'ai pus régler mon problème, merci de votre aide.

    Si besoin, je mettrais la solution.

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

Discussions similaires

  1. [CSV] Tri de données dans fichier CSV
    Par PhilippeIEP dans le forum Langage
    Réponses: 6
    Dernier message: 08/10/2008, 10h48
  2. Tri de données dans un tableau
    Par GESCOM2000 dans le forum Contribuez
    Réponses: 6
    Dernier message: 06/12/2006, 15h55
  3. gestion et tri de donnée en mémoire
    Par lenectar dans le forum C++
    Réponses: 2
    Dernier message: 05/10/2005, 13h18
  4. [JTable] Tri des données
    Par soulhouf dans le forum Composants
    Réponses: 7
    Dernier message: 08/09/2005, 14h01
  5. [CR9] Tri de données
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 24/07/2003, 09h30

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