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 :

Fusion de fichiers CSV via un identifiant unique [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut Fusion de fichiers CSV via un identifiant unique
    Bonjour à tous,
    J'essaye de fusionner 2 gros fichiers CSV en un seul en les liants via un ID unique.
    Voici le code que j'ai essayé mais il ne me sort qu'une seule entrée.
    Où est-ce que je me plante svp ?
    Merci de vos lumières.

    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
    $handle_modified = fopen($fullpath_modified, 'r');
    $handle_standard = fopen($fullpath_standard, 'r');
     
    $jsdatas = [];
    $flag1 = true;
    while (($csv_standard = fgetcsv($handle_standard, 0, ';')) !== false)
    {
        // titles
        if ($flag1)  {
            $titles_standard = $csv_standard;
            $flag1 = false;
            continue;
        }
        $reference_standard = $csv_standard[0];
     
        $flag2 = true;
        while (($csv_modified = fgetcsv($handle_modified, 0, ';')) !== false)
        {
            // titles
            if ($flag2)  {
                $titles_modified = $csv_modified;
                $flag2 = false;
                continue;
            }
     
            $reference_modified = $csv_modified[12];
     
            if ($reference_modified == $reference_standard)
            {
                $jsdatas[$reference_standard] = array_merge($csv_standard, $csv_modified);
                //continue;
            }
        }
    }

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Est-ce que tu pourrais poster une petite partie des deux fichiers et montrer le résultat que tu veux?

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Citation Envoyé par badaze Voir le message
    Est-ce que tu pourrais poster une petite partie des deux fichiers et montrer le résultat que tu veux?
    Oui. Les voici

    Fichier CSV 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ID;CATEGORY;NAME;ATTRIBUTE1;ATTRIBUTE2;VALUE1;VALUE2;DESCRIPTION;BRAND;FEATURE;PRICE;PVP;PVD;IVA;VIDEO;EAN13;WIDTH;HEIGHT;DEPTH;WEIGHT;STOCK;DATE_ADD;DATE_UPD;IMAGE1;IMAGE2;IMAGE3;IMAGE4;IMAGE5;IMAGE6;IMAGE7;IMAGE8
    H4510100;2403,2489;"Jeu à Boire spécial Shooters";;;;;;2250;;;"2014-08-04 07:12:05";"2017-04-15 08:36:55";image.jpg;;;;;;
    [...]
    Fichier CSV2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ID;ACTIVE;NAME;CATEGORIES;PRICE_TAX_EXCLUDE;TAX_RULE_ID;WHOLESALE_PRICE;ON_SALE;DISCOUNT_AMOUNT;DISCOUNT_PERCENT;DISCOUNT_FROM;DISCOUNT_TO;bb_REFERENCE;SUPPLIER_REFERENCE;SUPPLIER;MANUFACTER;EAN13;UPC;ECOTAX;WIDTH;HEIGHT;DEPTH;WEIGHT;QUANTITY;MINIMAL_QUANTITY;VISIBILITY;ADDITIONAL_SHIPPING_COST;UNITY;UNIT_PRICE;SHORT_DESCRIPTION;DESCRIPTION;TAGS;META_TITLE;META_KEYWORDS;META_DESCRIPTION;URL_REWRITTEN;TEXT_WHEN_IN_STOCK;TEXT_WHEN_BACKODER_ALLOWED;AVAILABLE_FOR_ORDER;PRODUCT_AVAILABLE_DATE;PRODUCT_CREATION_DATE;PRODUCT_UPDATE_DATE;SHOW_PRICE;IMAGES_URL;DELETE_EXISTING_IMAGES;FEATURE;AVAILABLE_ONLINE_ONLY;CONDITION;CUSTOMIZABLE;UPLOADABLE_FILES;TEXT_FIELDS;OUT_OF_STOCK;ID_NAME_OF_SHOP;ADVANCED_STOCK_MANAGEMENT;DEPENDS_ON_STOCK;WAREHOUSE
    2;1;"Jeu à Boire spécial Shooters";2489;7.07;1;3.62;;;;;;H4510100;;;;;0;6;10;21.5;0.235;91;1;both;;;;"jeu à boire";;;;;;jeu-a-boire-special-shooters;;;1;;2014-08-04;2017-04-15;1;image.jpg;0;;0;new;0;0;0;0;0;0;0;0
    [...]
    Résultat Attendu
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    Array
    (
        [H4510100] => Array
            (
                [0] => H4510100
                [1] => 2403,2489
                [2] => Jeu à Boire spécial Shooters
                [3] => 
                [4] => 
                [5] => 
                [6] => 
                [7] => 
                [8] => 2250
                [9] => 
                [10] => 12
                [11] => 7.07
                [12] => 3.62
                [13] => 21
                [14] => 0
                [15] => 
                [16] => 6
                [17] => 10
                [18] => 21.5
                [19] => 0.235
                [20] => 91
                [21] => 2014-08-04 07:12:05
                [22] => 2017-04-15 08:36:55
                [23] => image1.jpg
                [24] => image2.jpg
                [25] => 
                [26] => 
                [27] => 
                [28] => 
                [29] => 
                [30] => 
                [31] => 2
                [32] => 1
                [33] => Jeu à Boire Shooters
                [34] => 2489
                [35] => 7.07
                [36] => 1
                [37] => 3.62
                [38] => 
                [39] => 
                [40] => 
                [41] => 
                [42] => 
                [43] => H4510100
                [44] => 
                [45] => 
                [46] => 2250
                [47] => 
                [48] => 
                [49] => 0
                [50] => 6
                [51] => 10
                [52] => 21.5
                [53] => 0.235
                [54] => 91
                [55] => 1
                [56] => both
                [57] => 
                [58] => 
                [59] => 
                [60] => Jeu de shooter
                [61] => 
                [62] => 
                [63] => 
                [64] => 
                [65] => 
                [66] => jeu-de-shooters
                [67] => 
                [68] => 
                [69] => 1
                [70] => 
                [71] => 2014-08-04
                [72] => 2017-04-15
                [73] => 1
                [74] => image1.jpg,image2.jpg
                [75] => 0
                [76] => 
                [77] => 0
                [78] => new
                [79] => 0
                [80] => 0
                [81] => 0
                [82] => 0
                [83] => 0
                [84] => 0
                [85] => 0
                [86] => 0
            )
     
    )
    Certaines valeurs ont été modifiée mais la structrue est telle quelle. Le champ 0 du CSV1 correspond au champ 12 du CSV2.

    Merci

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Et c'est sur ces deux champs que tu veux faire la fusion ?

    Est-ce qu'il n'y a qu'il y a une seule ligne avec le même id dans les deux fichiers ?

  5. #5
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Citation Envoyé par badaze Voir le message
    Et c'est sur ces deux champs que tu veux faire la fusion ?
    Oui uniquement sur ces 2 champs.

    Citation Envoyé par badaze Voir le message
    Est-ce qu'il n'y a qu'il y a une seule ligne avec le même id dans les deux fichiers ?
    Les ID sont uniques en effet.

  6. #6
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Essaie ça.

    Code php : 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
     
    <?php
    function CSV($fichier) {
     $donnees  = array();
     $header   = "";
     if (($handle = fopen($fichier, "r")) !== FALSE) {
      while (($data = fgetcsv($handle, 1000, ";",'"')) !== FALSE) {
       if ($header == "") {
        $header = $data;
       } else {
        $donnees[]   = $data;
       }
      }
      fclose($handle);
      $retour    = array();
      $retour[0] = $header;
      $retour[1] = $donnees;
      return $retour;
     } 
     return false;
    }
    //---- Fichier avec id en position 0
    $fichier_droite = CSV("droite.csv");
    $droite         = $fichier_droite[1];
    $header_droite  = $fichier_droite[0];
    //---- Fichier avec id en position 12
    $fichier_gauche = CSV("gauche.csv");
    $gauche         = $fichier_gauche[1];
    $header_gauche  = $fichier_gauche[0];
    //---- Fusion 
    $array_fusionne = array();
    foreach($droite as $ligneD) {
     $idD = $ligneD[0];
     foreach($gauche as $ligneG) {
      $idG = $ligneG[12];
      if ($idD == $idG) {
       $array_fusionne[] = array_merge($ligneD,$ligneG);
      } 
     } 
    }
    //---- Fichier fusionné 
    $handle = fopen('fichier_fusionne.csv', 'w');
    //-- Entêtes
    $entete = array_merge($header_droite,$header_gauche);
    fputcsv($handle, $entete,";",'"');
    //-- Lignes
    foreach ($array_fusionne as $fields) {
        fputcsv($handle, $fields,";",'"');
    }
    fclose($handle);
    print "Fini";

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

Discussions similaires

  1. ouvrir un fichier .csv via VB
    Par modjo dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 18/12/2008, 14h01
  2. Fusion de fichier csv
    Par malox dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 26/05/2008, 12h19
  3. Fusion de fichiers .csv et comparaison avec fichier .xls
    Par GourenBZH dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/04/2008, 14h15
  4. Réponses: 1
    Dernier message: 10/01/2008, 13h52
  5. ourir un fichier CSV via Access
    Par pioupiouafr008 dans le forum VBA Access
    Réponses: 1
    Dernier message: 01/08/2007, 09h54

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