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

PHP & Base de données Discussion :

2 fichiers vers 1 seul avec calcul


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut 2 fichiers vers 1 seul avec calcul
    Bonjour,

    Je suis en manque d'inspiration pour la réalisation d'une moulinette permettant de fusionner 2 fichiers CSV tout en additionnant la dernier colonne

    J'ai deux fichiers de stocks venant de deux magasins différents sous cette forme
    ref;prixht;prixttc;tauxtva;prixachat;qte

    toutes les colonnes sont identiques sauf la qte, il faut que je fusionne le stock afin d'avoir un seul est unique fichier afin de mettre à jour mon stock dans mon logiciel d'ecommerce pour ne pas le citer sachant que je vais avoir beaucoup de ligne

    que conseillez vous ? des idées ?

    merci d'avance pour votre aide

    bonne fin de journée
    Ludo
    Tout sur le cyclisme : Annuaire vélo - Emploi Vélo

  2. #2
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 40
    Points : 55
    Points
    55
    Par défaut
    salut

    Si j'ai bien compris, tu récupères deux fichiers, que tu ouvres, tu les lis, tu récupères le contenu, que tu sauvegardes peut être dans un tableau afin de plus facilement parcourir tes données, tu boucles dessus afin de créer un tableau résultat ayant seulement la dernière colonne de différente puisqu'elle correspond à la somme des dernières colonnes des deux tableaux ? et ensuite tu recrées un fichier csv correspondant à ton tableau résultat ???

    C'est bien cela ....????

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Est-ce que les deux fichiers ont exactement le même nombre de lignes et chaque ligne de chaque fichier correspond au même produit (i.e. la première ligne correspond au produit A dans les deux fichiers, la deuxième au produit B, etc.)? Car dans ce cas tu peux lire les deux fichiers ligne par ligne de manière synchronisée ce qui évite de stocker quoi que ce soit. Quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if ( (false !== $fh1 = fopen('fichier1.csv', 'r')) &&
         (false !== $fh2 = fopen('fichier2.csv', 'r')) &&
         (false !== $fhr = fopen('result.csv', 'w')) ) {
        $qte_index = 5;
        while ( false !== $rec1 = fgetcsv($fh1, 1024, ';') &&
                false !== $rec2 = fgetcsv($fh2, 1024, ';') ) {
            $rec1[$qte_index] += $rec2[$qte_index];
            fputcsv($fhr, $rec1, ';');
        }
        fclose($fh1);
        fclose($fh2);
        fclose($fhr);
    }
    Par contre si les enregistrements sont dans un ordre indéterminé ou que certains produits sont présents dans l'un mais pas dans l'autre, tu devras stocker dans un tableau associatif avec pour clef la reférence du produit:
    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
    if ( (false !== $fh1 = fopen('fichier1.csv', 'r')) &&
         (false !== $fh2 = fopen('fichier2.csv', 'r')) &&
         (false !== $fhr = fopen('result.csv', 'w')) ) {
        $qte_index = 5;
        $ref_index = 0;
     
        $storage = [];
     
        while ( false !== $rec = fgetcsv($fh1, 1024, ';') ) {
            $storage[$rec[$ref_index]] = $rec;
        }
        fclose($fh1);
     
        while ( false !== $rec = fgetcsv($fh2, 1024, ';') ) {
            if ( isset($storage[$rec[$ref_index]]) )
                $storage[$rec[$ref_index]][$qte_index] += $rec[$qte_index];
            else
                $storage[$rec[$ref_index]] = $rec;
        }
        fclose($fh2);
     
        foreach ($storage as $record) {
            fputcsv($fhr, $record, ';');
        }
        fclose($fhr);
    }
    Cette solution est bien sur plus gourmande en mémoire, après tout dépend de la quantité de données (au passage "beaucoup de lignes" est une information assez maigre). Si la quantité de données impacte trop la mémoire, la solution, c'est l'utilisation d'un SGBD.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    bonsoir,
    merci pour votre aide je vais regarder tout cela demain, oui les fichiers sont identiques donc je dois pouvoir faire la première solution
    bonne soirée à vous
    ludo
    Tout sur le cyclisme : Annuaire vélo - Emploi Vélo

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    bonjour,

    je viens de tester et j'ai des petites erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: Cannot use a scalar value as an array in /var/www/vhosts/../recup-fichier.php on line 21
     
    Warning: fputcsv() expects parameter 2 to be array, boolean given in /var/www/vhosts/../recup-fichier.php on line 22
    ligne 21 et 22
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $rec1[$qte_index] += $rec2[$qte_index];
           fputcsv($fhr, $rec1, ';');
    j'ai testé la deux variables $rec1 et $rec2 via un print_r le $rec1 me renvoit un 1 alors que l'autre me renvoit bien le tableau de la ligne, j'ai vérifié le chemin d'acces du premier fichier du coup il est OK je ne vois pas d'où il peut y avoir l'erreur

    si je trouve je posterais la réponse
    Tout sur le cyclisme : Annuaire vélo - Emploi Vélo

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    c'est bon cela fonctionne en modifiant cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     while ( false !== $rec1 = fgetcsv($fh1, 1024, ';') &&
                false !== $rec2 = fgetcsv($fh2, 1024, ';') ) {
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     while ( false !== $rec1 = fgetcsv($fh1, 1024, ';') ) {
                $rec2 = fgetcsv($fh2, 1024, ';');
    merci pour le coup de main en tout cas
    Tout sur le cyclisme : Annuaire vélo - Emploi Vélo

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Oui, désolé je n'avais pas testé le code. En fait il faut encadrer chaque condition avec des parenthèses pour des questions de précédence des opérateurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ( (false !== $rec1 = fgetcsv($fh1, 1024, ';')) &&
            (false !== $rec2 = fgetcsv($fh2, 1024, ';')) ) {
    Mais si tu es sûr que les deux fichiers ont le même nombre d'enregistrements, tu peux effectivement aussi ne faire le test que sur un seul fichier.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    pas de soucis c'est déjà gentil de m'avoir aidé

    encore merci
    Tout sur le cyclisme : Annuaire vélo - Emploi Vélo

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

Discussions similaires

  1. [Toutes versions] Copier Coller des information provenant de fichier vers un seul fichier avec plusieurs onglets
    Par Hazard17 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 10/10/2014, 18h15
  2. Réponses: 0
    Dernier message: 10/12/2013, 18h28
  3. Réponses: 0
    Dernier message: 17/03/2011, 13h50
  4. Réponses: 10
    Dernier message: 22/10/2010, 16h19
  5. [XL-2003] Fichier en lecture seule avec condition
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 07/10/2009, 18h21

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